Skip to content

Latest commit

 

History

History
350 lines (264 loc) · 12.3 KB

3. Openshift Installation.md

File metadata and controls

350 lines (264 loc) · 12.3 KB

3. Openshift Installation

목적

Private registry, Yum repository, DNS, Haproxy, Chrony 등 Openshift 구성요소를 바탕으로 Openshift 설치를 진행한다.

설치 과정

1. OCP client와 installer 다운로드

  • RHCOS 버전과 동이란 버전의 openshift-installer를 설치
  • 본 프로젝트에서 사용하는 RHCOS 4.4.17 버전은 openshift-v4/clients/ocp/4.4.17 에서 다운

2. SSH Private Key 생성

  • SSH 프로토콜을 통해 클러스터에 접근 가능

  • SSH key 생성 ( default path: ~/.ssh/)

    ssh-keygen
    # -t : 생성할 key type , -b : 생성할 키의 bit 수, -f : 생성에 사용할 파일 
    ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa

3. 설치 구성 설정

  • install-config.yaml 파일을 사용하여 기본적인 클러스터의 구성 및 구조 설정

  • 작업 디렉토리 생성 및 install-config.yaml 작성

    mkdir ~/redhat2_install && cd ~/redhat2_install
    vi install-config.yaml
    • RedHat login 후, pullSecret 다운로드( 24시간 제한 )

    • sshkey ( path : ~/.ssh/id_rsa.pub )

    • additionalTrustBundle에는 Private registry 구축 시 TLS 인증서 만들 때 생성되었던 인증서( ex/ domain.crt )와 동일한 내용을 사용

    • imageContentSources에는 Private registry 구축 시 저장해두었던 내용을 기입

  • install-config.yaml Example

    apiVersion: v1
    baseDomain: cccr.local
    compute:
    - hyperthreading: Enabled
      name: worker
      replicas: 0
    controlPlane:
      hyperthreading: Enabled
      name: master
      replicas: 3
    metadata:
      name: redhat2
    networking:
      clusterNetworks:
      - cidr: 10.1.0.0/16
        hostPrefix: 24
      networkType: OpenShiftSDN
      serviceNetwork:
      - 172.30.0.0/16
    platform:
      none: {}
    pullSecret: '{"auths":{"bastion.redhat2.cccr.local:5000": {"auth": "ZGV2b3BzOmRrYWdoMS4=","email": "[email protected]"}}}'
    sshKey: 'ssh-rsa AAA~~AAA [email protected]'
    additionalTrustBundle: |
    
      -----BEGIN CERTIFICATE-----
      ~~~~
      ~~~~
      ~~~~
      -----END CERTIFICATE-----
    
    imageContentSources:
      - mirrors:
        - bastion.redhat2.cccr.local:5000/ocp4/openshift4
        source: quay.io/openshift-release-dev/ocp-release
      - mirrors:
        - bastion.redhat2.cccr.local:5000/ocp4/openshift4
        source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
  • install-config.yaml 은 이후 진행과정에서 manifest, ignition 파일을 생성하면서 자동으로 사라지므로 미리 백업을 진행

    cp install-config.yaml install-config.yaml.bak

4. Manifest와 ignition 파일 생성

  • Manifest 파일이란, 집합의 일부나 논리정연한 단위인 파일들의 그룹을 위한 메타데이터를 포함하는 파일

  • Kubernetes manifests 파일을 install-config.yaml와 같은 디렉토리에 생성

  • manifest/[manifest 파일들]의 구조로 생성됨

    ./openshift-install create manifests --dir=~/redhat2_install
  • master에 pod들을 scheduling 하고 싶지 않다면 다음 단계 진행 ( optional )

    cd manifests 
    vi cluster-scheduler-02-config.yml
    
    masterSchedulable: false # true -> false 



  • Ignition file은 RHCOS에서 초기 구성 중에 디스크를 조작하는 데 사용되는 파일로서, Openshift Container Platform 클러스터 머신의 초기 구성을 수행

  • Ignition config file 생성

    ./openshift-install create ignition-configs --dir=~/redhat2/
    
    tree 
    .
    ├── auth
    │   ├── kubeadmin-password
    │   └── kubeconfig
    ├── bootstrap.ign
    ├── master.ign
    ├── metadata.json
    └── worker.ign
  • 클러스터 내에서 ignition file들을 다운받아 사용할 수있도록 http 파일 서버로 ignition 파일 이동

  • 이 때, 다운 받아 사용 가능하도록 권한을 적절히 설정

    # bastion에 ignition 파일 들어갈 디렉토리 만들기
    cp dir/*.ign /var/www/html/repo/ign
    
    chmod 644 /var/www/html/repo/ign/*.ign

5. RHCOS 가상 머신 만들기

  • ISO 이미지를 사용하여 bootstrap, master, worker로 사용할 가상머신 생성

  • RedHat mirror server에서 RHCOS iso와 raw 파일 다운

  • raw 파일은 rhcos 부팅 시 url을 통해 사용되므로 http 서버에 위치

    cd /mnt/test2/rhel-repo # http 서버 파일 위치 
    mkdir raw && cd raw 
    wget https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.4/4.4.17/rhcos-4.4.17-x86_64-metal.x86_64.raw.gz
  • kvm에 ISO image 기반 RHCOS vm 생성

  • VM instance booting

    • booting 화면에서 e or tab을 눌러 kernel command 편집
    • bootstrap, master, worker node에서 동일한 작업 반복
    • 상황에 맞는 install device, ignition 파일, http server의 url, hostname 및 ip 적용
    # kernel command Example 
    # IMAGE_URL = http://10.10.10.17:8080
    coreos.inst=yes
    coreos.inst.install_dev=sda
    coreos.inst.image_url='IMAGE_URL'/repo/repodata/_____.raw.gz
    coreos.inst.ignition_url='IMAGE_URL'/repo/ign/_____.ign
    ip=10.10.10.XX::10.10.10.1:255.255.255.0:XXXX.redhat2.cccr.local:ens3:none
    nameserver=10.10.10.17
  • 부팅 이후, bastion 에서 SSH 프로토콜을 사용하여 해당 노드로 접근하여 설정 확인

    ssh -i ~/.ssh/id_rsa [email protected]

6. 클러스터 생성

  • Bootstrap 생성 확인 하다가 완료되었으니 제거해도 좋다는 명령이 나오면 bootstrap 제거

  • 다른 세부 설치 사항 확인하려면 --log-level=debug/warn/error 중 선택하여 사용

    ./openshift-install --dir='INSTALL_DIR' wait-for bootstrap-complete --log-level=info
    
    INFO Waiting up to 30m0s for the Kubernetes API at https://api.test.example.com...
    INFO API v1.17.1 up
    INFO Waiting up to 30m0s for bootstrapping to complete...
    INFO It is now safe to remove the bootstrap resources
  • 현재 bootstrap이 어떤 일을 하고 있는지 확인

    journalctl -b -f -u bootkube
  • kubeconfig 파일을 export 해 default system user로 클러스터에 로그인 가능

    • system:admin 계정은 초기 설치 시에만 사용 됨
    • 클러스터 내 모든 node가 Ready가 되어야 완성
    export KUBECONFIG='INSTALL_DIR'/auth/kubeconfig
    
    oc whoami
    system:admin
    
    oc get nodes
    NAME                          STATUS   ROLES    AGE   VERSION
    master-1.redhat2.cccr.local    Ready    master   7m   v1.16.2
    master-2.redhat2.cccr.local    Ready    master   7m   v1.16.2
    master-3.redhat2.cccr.local    Ready    master   7m   v1.16.2
    worker-1.redhat2.cccr.local    Ready    master   7m   v1.16.2
    worker-2.redhat2.cccr.local    Ready    master   7m   v1.16.2
    ... 
  • 클러스터에 node들 추가 할 때, Pending 상태인 CSR(certificate signing requests)들이 생성됨

    oc get csr
    NAME        AGE     REQUESTOR                                                                   CONDITION
    csr-8b2br   15m     system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending 
    csr-8vnps   15m     system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending
    csr-bfd72   5m26s   system:node:ip-10-0-50-126.us-east-2.compute.internal                       Pending 
    csr-c57lv   5m26s   system:node:ip-10-0-95-157.us-east-2.compute.internal                       Pending
    ...
  • Pending된 CSR 승인

    oc adm certificate approve `csr_name`

7. 클러스터 작업 완료 확인

  • 초기 Operator configuration이 available인지 확인

    watch -n5 oc get clusteroperators
    
    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                             4.4.3     True        False         False      7m56s
    cloud-credential                           4.4.3     True        False         False      31m
    cluster-autoscaler                         4.4.3     True        False         False      16m
    console                                    4.4.3     True        False         False      10m
    
    ...
  • 클러스터 모니터링

    • 모니터링 중, 클러스터 완성 후 제공되는 아이디와 비번, console url은 후에 사용되므로 따로 저장
    ./openshift-install --dir=~/redhat2 wait-for install-complete
    
    INFO Waiting up to 30m0s for the cluster to initialize... 
    INFO Waiting up to 10m0s for the openshift-console route to be created... 
    INFO Install complete! 
    INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/install/auth/kubeconfig'
    INFO Access the OpenShift web-console here: https://console-openshift-console.apps.redhat2.cccr.local
    INFO Login to the console with user: kubeadmin, password: qMZXS-eoF9S-W46LX-USXoj
  • 클러스터 로그인

    oc login -u kubeadmin -p qMZXS-eoF9S-W46LX-USXoj
  • OCP console에 접근하여 dashboard 확인 ( 위의 아이디와 비번으로 로그인 )

8. Image registry(Integrated registry) 구축

  • Bare-metal는 공유 Object storage를 제공하지 않는 플랫폼

  • Bare-metal로 클러스터를 구축하는 경우에, Image Registry가 removed로 설정되기 때문에 Managed로 바꾸어주는 작업이 필요

    oc edit configs.imageregistry.operator.openshift.io
    
    ...
    spec.managementState: Managed 
  • image-registry는 기본 스토리지를 지정하지 않으면 동작하지 않기 때문에, 설치 후 스토리지 지정 필수( 기본 볼륨 100GB )

  • bastion node에 NFS 서버 구성

    vi /etc/exports
    /data *(rw,sync,no_wdelay,root_squash,insecure,fsid=0)
    
    exportfs -rv
    exporting *:/data
  • image registry configs 파일에 spec.storage.pvc 추가

    • 양식만 넣어 두고 아무 값도 설정하지 않으면 default 로 자동 설정됨
    oc edit configs.imageregistry.operator.openshift.io
    
    storage : 
      pvc : 
        claim :  
  • PV 생성

    # pv create Example
    vi pv-nfs.yml
    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nfs
    spec:
      capacity:
        storage: 100Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /root/data
        server: 10.10.10.17
    
    kubectl create -f pv-nfs.yml
    kubectl get persistentvolumes 
  • clusteroperator가 모두 True 인지 확인

    oc get clusteroperator 
    
    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                             4.4.3     True        False         False      7m56s
    cloud-credential                           4.4.3     True        False         False      31m
    cluster-autoscaler                         4.4.3     True        False         False      16m
    console                                    4.4.3     True        False         False      10m
    ...
    




참고문헌