# OCP-ignition파일 및 VM생성

TASK DESCRIPTION

ignition파일은 RHCOS(RedHat Core OS)가 실행될때 참조하는 제반설정정보입니다.
openshift-install명령을 이용하여 ignition 파일을 생성합니다.
생성된 파일의 내용을 base64로 암호화하여 VM Node의 속성으로 등록합니다.
버전별 설치가이드를 참고하십시오.

# 사전준비

  • vSphere버전
    vSphere 6.5상에도 설치가능하지만 vSphere Version 6.7 U2이상을 권장합니다.

  • RHCOS VM Template
    2020-05-29일 현재 vmware상에서는 RHCOS4.3.0으로 VM Template을 만드십시오.
    그 이상의 버전으로 만든 VM Template을 이용하면 설치가 되지 않습니다.
    테스트 결과 RHCOS 4.3.0 ova파일로 템플릿을 만들고, openshift-installer 4.4.5로
    설치하니 OCP버전 4.4.5가 잘 설치되었습니다.

  • System requirements 문서상의 최소 사양은 아래와 같습니다.

경험상 CP4App까지 설치하여 운영하기 위한 사양은 아래와 같습니다.

Machine vCPU vRAM Storage
Bootstrap 8 16 120
Control plane 8 32 120
Compute 16 32 120

Master Node는 최소 3개이상, Worker Node는 최소 2개 이상 필요합니다.

  • User Provisioned Infra 환경 준비
    아래와 같은 인프라 환경구성이 필요합니다.

# 설치 프로그램 다운로드

  • Local PC에서 파일 다운로드

    • **Redhat 설치 가이드**으로 로그인합니다.
      그리고 설치 인프라 환경을 선택하십시오. 본 매뉴얼에서는 vmware상에 설치합니다.

    • OS에 맞는 설치 openshift-install, Pull secret값, RHCOS, OC CLI를 다운로드 합니다.

    • 특정 버전의 openshift-installer를 다운로드 하려면 아래 주소를 이용하십시오.
      Openshift-installer 버전별 Download

  • bastion VM으로 복사
    Local PC의 다운로드 위치는 '~/Downloads/ocp'이고, basion VM의 target 디렉토리는 '~/tmp'일때
    아래와 같이 작업하면 됩니다.
    이전 sslkey 구성단계에서 Local PC에 대한 작업을 미리 해야 암호없이 파일을 복사할 수 있습니다.

    $ cd ~/Downloads/ocp   
    $ scp -P 19022 ./openshift-client-linux.tar.gz kubepia:~/tmp
    $ scp -P 19022 ./openshift-install-linux.tar.gz kubepia:~/tmp
    $ scp -P 19022 ./pull-secret.txt kubepia:~/tmp 
    
    • bastion VM에서 압축해제 및 CLI파일 복사
    $ cd ~/tmp
    $ tar xvf openshift-client-linux.tar.gz
    $ tar xvf openshift-install-linux.tar.gz
    $ cp oc /usr/local/bin && cp kubectl /usr/local/bin && cp openshift-install /usr/local/bin
    
  • openshift-install, OC가 잘 설치되었는지 확인합니다.

# 설치 작업 디렉토리 생성

install-config.yaml과 ignition파일들이 생성될 설치 작업 디렉토리를 생성합니다.

$ mkdir -p /install/config

# install-config.yaml 생성

Sample install-config.yaml파일을 참조하여 작성합니다.

Sample

apiVersion: v1
baseDomain: darumtech.net 
compute:
- hyperthreading: Enabled   
  name: worker
  replicas: 2 
controlPlane:
  hyperthreading: Enabled   
  name: master
  replicas: 3 
metadata:
  name: cp 
platform:
  vsphere:
    vcenter: your.vcenter.server 
    username: username 
    password: password 
    datacenter: datacenter 
    defaultDatastore: datastore 
fips: false 
pullSecret: '{"auths": ...}' 
sshKey: 'ssh-ed25519 AAAA...' 

각 항목 설정방법은 아래와 같습니다.

항목 설명
baseDomain 기본 도메인 kubepia.com
compute.replicas worker node 수 2
controlPlane.replicas master node 수(3이상의 홀수) 3
metadata.name 클러스터 이름. [name].[baseDomain]으로 기본 주소 사용됨 cp
platform.vsphere.vcenter vSphere vCenter hostname 또는 IP 192.168.0.70
platform.vsphere.username vSphere의 username administrator@vsphere.local
platform.vsphere.password vSphere의 password passw0rd$
platform.vsphere.datacenter vSphere Datacenter명 NX-DC
platform.vsphere.defaultDatastore vSphere의 기본 Datastore VMware-NFS
fips Disk 암호화 사용 여부 false
pullSecret site별 SSL token값. 위 설치프로그램 다운로드 시 저장한 pullSecret파일 내용을 붙여넣게 합니다. 생략
sshKey SSHKey 구성시 생성한 public key파일 내용 생략

※vCenter 'VMs and Templates' 폴더 구조

install-config.yaml과 매핑하여 폴더 작성

위에서 지정한 Datacenter명과 metadata.name과 동일하게
vCenter의 'VMs and templates'의 폴더 명을 맞추십시오.
이는 OCP설치 시 기본 생성되는 StorageClass 'thin'을 사용할때
dynamic provisioning을 하기 위함입니다.

※ vCenter폴더 구조를 install-config.yaml과 맞춰야 하는걸 매뉴얼 작성 후 알았습니다.
그래서 이후 화면에는 폴더구조가 틀리게 구성되어 있는 이미지가 많습니다.

※ pullSecret과 sshKey는 복사-붙여넣기할때 여러번 체크하여 틀린게 없는지 확인하십시오.

defaultDatastore확인

반드시 install-config.yaml 백업

install-config.yaml파일은 OCP 설치를 시작하면 없어집니다.
반드시 백업파일을 생성하시기 바랍니다.

$ cp install-config.yaml install-config-org.yaml

# install manifest파일 생성 및 수정

설치 관련 설정 내용을 담고 있는 manifest파일들을 생성합니다.
이 단계는 특별히 수정할게 없으면 생략해도 됩니다.
'installation_directory'는 install-config.yaml파일이 있는 디렉토리입니다.

$ openshift-install create manifests --dir=<installation_directory>

manifest파일들은 <installation_directory>/manifests디렉토리에 생성됩니다.

'cluster-scheduler-02-config.yml'파일에서 'mastersSchedulable'의 값을 'false'로 변경합니다.
Master node에 Pod가 배포되지 않도록 하기 위함입니다.

# ignition 파일 생성

RHCOS 부팅 시 참조하는 ignition파일들을 생성합니다.

$ openshift-install create ignition-configs --dir=<installation_directory> 

아래와 같은 구조로 파일들이 생성됩니다.  
auth/kubeadmin-password는 kubeadmin사용자의 암호이고,  
auth/kubeconfig는 cluster로그인 설정정보입니다.  
kubeconfig파일은 사용할 Terminal의 <HOME>/.kube/config파일로 복사하면  
cluster에 인증되어 접근할 수 있습니다.   
.
├── auth
│   ├── kubeadmin-password
│   └── kubeconfig
├── bootstrap.ign
├── master.ign
├── metadata.json
└── worker.ign

# append-bootstrap.ign파일 생성

각 Node용 VM을 생성할 때 ignition파일의 내용을 base64 encoding하여 셋팅하여야 합니다.
그런데 bootstrap.ign의 내용이 너무 많아 길이 제한에 걸려
base64 encoding한 값을 셋팅할 수 없습니다.
그래서 bootstrap.ign파일을 Web서버에 업로드하고,
그 주소를 지정한 append-bootstrap.ign파일을 생성하여 셋팅합니다.

  • bootstrap.ign파일을 Web서버에 복사
    bootstrap VM에 Web서버가 설치되어 있습니다.
    home디렉토리인 /var/www/html하위에 install디렉토리를 만들고 bootstrap.ign파일을 복사합니다.
예시)

[root@bastion config]# mkdir -p /var/www/html/install
[root@bastion config]# cp bootstrap.ign /var/www/html/install
[root@bastion config]# ls -al /var/www/html/install
total 304
drwxr-xr-x. 2 root root     27 May 28 17:03 .
drwxr-xr-x. 3 root root     38 May 28 17:03 ..
-rw-r-----. 1 root root 308269 May 28 17:03 bootstrap.ign

COPY후 mode를 변경하고 curl로 접근을 확인합니다.  
[root@bastion config]# chmod 777 /var/www/html/install/*
[root@bastion config]# curl http://172.168.0.190/install/bootstrap.ign

  • append-bootstrap.ign 생성
{
  "ignition": {
    "config": {
      "append": [
        {
          "source": "<bootstrap_ignition_config_url>", 
          "verification": {}
        }
      ]
    },
    "timeouts": {},
    "version": "2.1.0"
  },
  "networkd": {},
  "passwd": {},
  "storage": {},
  "systemd": {}
}

# ignition파일 base64 encoding

base64 encoding한 ignition파일들을 생성합니다.

$ base64 -w0 <installation_directory>/master.ign > <installation_directory>/master.64
$ base64 -w0 <installation_directory>/worker.ign > <installation_directory>/worker.64
$ base64 -w0 <installation_directory>/append-bootstrap.ign > <installation_directory>/append-bootstrap.64

예시)
$ base64 -w0 /install/config/master.ign > /install/config/master.64
$ base64 -w0 /install/config/worker.ign > /install/config/worker.64
$ base64 -w0 /install/config/append-bootstrap.ign > /install/config/append-bootstrap.64

# VM Template 작성

각 Node VM을 만들 VM Template을 생성합니다.

  • RHCOS image인 ova파일을 다운로드 합니다.

    • Redhat 설치페이지을 로그인
    • 설치할 IaaS선택. 이 매뉴얼에서는 vmware선택
    • 'Red Hat Enterprise Linux CoreOS (RHCOS)'의 [Download RHCOS] 버튼 클릭
    • 'rhcos-[version]-x86_64-vmware.x86_64.ova'클릭하여 다운로드
  • 작업폴더를 생성합니다.

    • vSphere Client로그인
    • 좌측 Tree상단의 'VMs and Templates'를 클릭하고, install-config.yaml생성시 지정한 Datacenter와 metadata.name으로 폴더를 구성합니다.
  • VM Template을 작성합니다.
    ※ 2020-05-29일 현재 vmware상에서는 RHCOS4.3.0만 제대로 설치됩니다.

    • PC에 다운로드한 ova파일을 복사-붙여넣기하여 vcenter vm으로 복사
    • 'templates'폴더 선택->우측마우스메뉴에서 'Deploy OVF Template'클릭
    • 'Local file'선택하고 ova파일 위치 지정
    • template명과 folder선택
    • Compute resource는 아무거나 선택
    • 선택내용 review
    • Virtual Disk format은 'Thin Provision'선택하고 Storage선택
    • Network은 'VM Network'선택
    • 'Customize template'은 Skip함
    • 'Ready to complete'에서 마지막으로 설정 내용 검토하고 [FINISH]클릭
    • 생성된 VM선택->우측마우스메뉴에서 'Template->Convert to template'클릭

# Master Node VM 생성

Master node VM을 생성합니다.

  • VM template 선택 -> 우측마우스메뉴에서 'New VM from This Template'클릭
  • VM의 이름과 folder를 지정

VM이름
VM이름의 규칙은 없지만 헷갈리지 않도록 dhcpd.conf파일에 지정한 이름을 참조하여 작명하십시오.

  • 'Compute resource'는 아무거나 지정하면 됨
    DRS-Distributed Resources Scheduler를 이용하므로 자동으로 IP가 부여됨

  • Storage선택

  • 'Customize this virtual machine's hardware'체크

  • CPU/MEM/Disk 지정
    System requirements를 참조하여 지정하세요.
    메모리 항목을 펼치고 'Reservation'을 동일하게 바꿔 주십시오.

  • Network MAC Address지정
    Network Adapter1을 펼치고 MAC Address항목의 'Automatic'을 'Manual'로 변경하십시오.
    MAC Address는 Network VM의 /etc/dhcpd.conf에 정의한 MAC주소를 입력하십시오.
    dhcpd.conf파일 설정을 참고 하십시오.

  • ignition내용 셋팅
    RHCOS부팅시에 참조할 ignition값을 파라미터로 셋팅합니다.

    • 'VM Options'탭을 클릭하고 'Configuration Parameters'의 [EDIT CONFIGURATION]을 클릭하십시오.
    • [Add Configuration Params]버튼을 클릭하여 파라미터를 추가
    파라미터
    guestinfo.ignition.config.data master.64파일 내용
    guestinfo.ignition.config.data.encoding base64
    disk.EnableUUID TRUE

** 주의 **
base64 내용을 'cat'명령어로 볼 때 아래와 같이 ';echo'를 붙이십시오.

$ cat append-bootstrap.64;echo

  • 설정내용 최종검토
    최종 검토 후 [FINISH]버튼을 클릭합니다.

모든 Master node VM 생성

VM이름과 MAC Address만 다르게 하여 나머지 Master Node VM들을 생성합니다. 아래와 같이 첫번째 만든 기존 VM을 복사하여 MAC Address만 변경하면 됩니다.

# Worker Node VM 생성

Worker node VM 생성

Master node VM생성단계를 참고하여 모든 Worker node VM들을 생성합니다.
단, 아래 단계에서는 Worker node에 맞게 변경하여야 합니다.

  • VM의 이름과 folder를 지정
  • CPU/MEM/Disk 지정
  • Network MAC Address지정
  • ignition내용 셋팅: worker.64파일 내용으로 셋팅

# Bootstrap Node VM 생성

Bootstrap node VM 생성

Master node VM생성단계를 참고하여 Bootstrap node VM들을 생성합니다.
단, 아래 단계에서는 Bootstrap node에 맞게 변경하여야 합니다.

  • VM의 이름과 folder를 지정
  • CPU/MEM/Disk 지정
  • Network MAC Address지정
  • ignition내용 셋팅: append-bootstrap.64파일 내용으로 셋팅

# Snapshot 만들기

지금까지 작업한 내용을 백업하기 위해 각 VM의 Snapshot을 생성합니다.

※ Infra VM들은 중지하고 Snapshot을 생성하셔야 빠르게 snapshot이 만들어집니다.