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 파일 다운
- iso 파일 : rhcos-4.4.17-x86_64-installer.x86_64.iso
- metal raw 파일 : rhcos-4.4.17-x86_64-metal.x86_64.raw.gz
-
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 ...