Post

[OpenShift 오픈시프트] RHOCP 4.14.15 Installation - 5. ignition 생성

RHOCP 4.14.15 설치 (오픈시프트 설치) - Openshift 설치 사전준비 (ignition 파일 생성)


Test Environment


Red Hat Enterprise Linux 9.2 (Plow)

이 과정은 bastion 노드에서 진행한다.

1. SSH Key 설정


SSH 키 생성


mkdir /root/.ssh

ssh-keygen -t ed25519 -N '' -f /root/.ssh/id_rsa

1
2
3
4
5
6
Generating public/private ed25519 key pair.
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXX root@bastion.openshift.ig.local
..SKIP..


SSH 에이전트 설정


eval "$(ssh-agent -s)"

1
Agent pid 69185


SSH 에이전트에 개인 키 추가


ssh-add /root/.ssh/id_rsa

1
Identity added: /root/.ssh/id_rsa (root@bastion.openshift.ig.local)


2. Openshift 설치를 위한 사전 준비


install-config.yaml 작성 시, 필요한 내용 미리 출력 및 저장하기


cat /root/.ssh/id_rsa.pub

1
ssh-ed25519 ..SKIP.. root@bastion.openshift.ig.local


cat /opt/openshift/init-quay/quay-config/ssl.cert

1
2
3
4
5
6
-----BEGIN CERTIFICATE-----
..SKIP..
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
..SKIP..
-----END CERTIFICATE-----


tail -6 /opt/openshift/mirror-images/ocp4/full/oc-mirror-workspace/oc-mirror-workspace/results-1721286954/imageContentSourcePolicy.yaml

1
2
3
4
5
6
  - mirrors:
    - init-quay.openshift.ig.local:8443/openshift/release
    source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
  - mirrors:
    - init-quay.openshift.ig.local:8443/openshift/release-images
    source: quay.io/openshift-release-dev/ocp-release


cat /root/.docker/config.json

1
{"auths":{"cloud.openshift.com":{"auth":"..SKIP..","email":"XXX@naver.com"},"quay.io":{"auth":"..SKIP..","email":"XXX@naver.com"},"registry.connect.redhat.com":{"auth":"..SKIP..","email":"xxx@naver.com"},"registry.redhat.io":{"auth":"..SKIP..","email":"XXX@naver.com"},"init-quay.openshift.ig.local:8443":{"auth":"..SKIP..","email":"XXX@naver.com"}}}


Openshift 설치 디렉토리 생성


mkdir /var/www/html/ocp


Openshift install-config 파일 작성


위에서 출력한 필요 내용을 아래

vi /var/www/html/ocp/install-config.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
apiVersion: v1
baseDomain: ig.local
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: openshift
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  networkType: OVNKubernetes  
  serviceNetwork: 
  - 172.30.0.0/16
platform:
  none: {}
fips: false
pullSecret: '</root/.docker/config.json 파일 내용 붙여넣기 >' # 작은 따옴표 안에 내용쓰기
sshKey: '</root/.ssh/id_rsa.pub 파일 내용 붙여넣기 >' # 작은 따옴표 안에 내용쓰기
additionalTrustBundle: |
# /opt/openshift/init-quay/quay-config/ssl.cert의 값을 입력하면 됨
# 행 앞에 스페이스 두 칸씩 입력 필수. 아래 예시 참고
  -----BEGIN CERTIFICATE-----
  ...
  -----END CERTIFICATE-----   
     
  -----BEGIN CERTIFICATE-----
  ...
  -----END CERTIFICATE-----
imageContentSources:  
# imageContentSourcePolicy.yaml 파일의 아래 6행(mirror source 정보)을 입력하면 됨.아래 예시 참고
- mirrors:
  - init-quay.openshift.ig.local:8443/openshift/release
  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
- mirrors:
  - init-quay.openshift.ig.local:8443/openshift/release-images
  source: quay.io/openshift-release-dev/ocp-release


install-config 파일 백업


ignition 파일이 생성되면서 yaml 파일이 삭제되므로 항상 install-config.yaml 파일은 백업해야한다.

cp /var/www/html/ocp/install-config.yaml /opt/openshift/yaml/


OpenShift 클러스터 설치에 필요한 manifests 파일 생성


이 위치에서 반드시 실행해야 한다.

cd /var/www/html/ocp

openshift-install create manifests --dir=/var/www/html/ocp

1
2
3
4
5
WARNING imageContentSources is deprecated, please use ImageDigestSource
INFO Consuming Install Config from target directory
WARNING Certificate 1A8B22FD306A127BF31A9DDD7605B4DE5BDA0C0 from additionalTrustBundle is x509 v3 but not a certificate authority
WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings
INFO Manifests created in: /var/www/html/ocp/manifests and /var/www/html/ocp/openshift



ls manifests/

1
2
3
4
5
6
7
8
9
10
cluster-config.yaml                   cvo-overrides.yaml
cluster-dns-02-config.yml             image-content-source-policy.yaml
cluster-infrastructure-02-config.yml  kube-cloud-config.yaml
cluster-ingress-02-config.yml         kube-system-configmap-root-ca.yaml
cluster-network-01-crd.yml            machine-config-server-tls-secret.yaml
cluster-network-02-config.yml         openshift-config-secret-pull-secret.yaml
cluster-proxy-01-config.yaml          user-ca-bundle-config.yaml
cluster-scheduler-02-config.yml
[root@bastion manifests]# pwd
/var/www/html/ocp/manifests


mastersSchedulable 값을 false로 변경한다.

vi manifests/cluster-scheduler-02-config.yaml

1
2
3
4
5
6
7
8
9
10
apiVersion: config.openshift.io/v1
kind: Scheduler
metadata:
  creationTimestamp: null
  name: cluster
spec:
  mastersSchedulable: false
  policy:
    name: ""
status: {}


ls -rtl /var/www/html/ocp

1
2
3
total 8
drwxr-x---. 2 root root 4096 Jul 16 15:22 manifests
drwxr-x---. 2 root root 4096 Jul 16 15:22 openshift


OpenShift 클러스터 설치에 필요한 ignition 파일 생성


ignition 파일을 생성한다.

openshift-install create ignition-configs --dir=/var/www/html/ocp

1
2
3
4
5
6
INFO Consuming Worker Machines from target directory
INFO Consuming Master Machines from target directory
INFO Consuming OpenShift Install (Manifests) from target directory
INFO Consuming Openshift Manifests from target directory
INFO Consuming Common Manifests from target directory
INFO Ignition-Configs created in: /var/www/html/ocp and /var/www/html/ocp/auth


ls -rtl /var/www/html/ocp

1
2
3
4
5
6
7
total 304
drwxr-x---. 2 root root     50 Jul 19 10:13 auth
-rw-r-----. 1 root root   1720 Jul 19 10:13 master.ign
-rw-r-----. 1 root root   1720 Jul 19 10:13 worker.ign
-rw-r-----. 1 root root 296976 Jul 19 10:13 bootstrap.ign
-rw-r-----. 1 root root    106 Jul 19 10:13 metadata.json
..SKIP..


Ignition 파일 경로 및 권한 수정


편의상 생성된 파일을 경로 및 이름을 수정한다.

cd /var/www/html

cp ocp/bootstrap.ign ./b.ign

cp ocp/master.ign ./m.ign

cp ocp/worker.ign ./w.ign


curl로 호출하면 다음과 같이 권한이 없어서 403 에러가 발생한다.

curl http://172.16.0.170:8080/b.ign

curl http://172.16.0.170:8080/m.ign

curl http://172.16.0.170:8080/w.ign

1
2
3
4
5
6
7
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>


읽기 권한을 추가하고 다시 curl로 호출해보면 잘 출력되는 것을 볼 수 있다.

chmod o+r ./*.ign

curl http://172.16.0.170:8080/b.ign

1
{"ignition":{"version":"3.2.0"},"passwd":{"users":[{"name":"core", ..SKIP..

curl http://172.16.0.170:8080/m.ign

1
{"ignition":{"config":{"merge":[{"source":"https://api-int.openshift.ig.local:22623/config/master"}]} ..SKIP..


curl http://172.16.0.170:8080/w.ign

1
{"ignition":{"config":{"merge":[{"source":"https://api-int.openshift.ig.local:22623/config/worker"}]} ..SKIP..


Bootstrap Ignition의 용량이 크기 때문에 보조 ignition 파일을 생성해준다.

httpd 서버의 경로를 직접 참조하기 때문에 반드시 httpd 서버가 실행되어있어야 한다.

vi ./merge-b.ign

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "ignition": {
    "config": {
      "merge": [
        {
          "source": "http://172.16.0.170:8080/b.ign",
          "verification": {}
        }
      ]
    },
    "timeouts": {},
    "version": "3.2.0"
  },
  "networkd": {},
  "passwd": {},
  "storage": {},
  "systemd": {}
}


ignition 파일 base64로 인코딩


Baremetal이 아닌 vSphere 등 환경에서는 Ignition을 매개변수로 입력해야 하기 때문에 보안을 위해 base64로 인코딩해야한다.

1
2
3
4
cat b.ign | base64 -w0 > base64_b.ign
cat m.ign | base64 -w0 > base64_m.ign
cat w.ign | base64 -w0 > base64_w.ign
cat merge-b.ign | base64 -w0 > base64_merge-b.ign


ls -rtl /var/www/html

1
2
3
4
5
6
7
8
9
drwxr-xr-x. 3 root root    163 Jul 19 10:13 ocp
-rw-r--r--. 1 root root 296976 Jul 19 10:15 b.ign
-rw-r--r--. 1 root root   1720 Jul 19 10:15 m.ign
-rw-r--r--. 1 root root   1720 Jul 19 10:16 w.ign
-rw-r--r--. 1 root root    286 Jul 19 10:21 merge-b.ign
-rw-r--r--. 1 root root 395968 Jul 19 10:21 base64_b.ign
-rw-r--r--. 1 root root   2296 Jul 19 10:21 base64_m.ign
-rw-r--r--. 1 root root   2296 Jul 19 10:21 base64_w.ign
-rw-r--r--. 1 root root    384 Jul 19 10:21 base64_merge-b.ign

생성된 ignition 들은 24시간 유지된다.

ignition의 유효기간이 있기 때문에 나머지 노드들을 24시간 내에 생성해줘야 한다. (b.ign, m.ign, w.ign)

시간이 지나 다시 생성하려면 /var/www/html/ocp 디렉토리부터 새로 만들어 위 ignition 생성 과정을 거치면 된다.


References


https://docs.openshift.com/container-platform/4.14/installing/installing_bare_metal/installing-bare-metal.html


This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.