OCP安裝手冊

參考文件

GitHub - CCChou/OpenShift-Automation · GitHub 自動化部屬
Red Hat OpenShift Container Platform Operator Update Information Checker 更新元件資訊檢查
Red Hat OpenShift Container Platform Update Graph OPC版本

01_前置作業

需求檔案

檔案 解壓縮放置位置 用途
butane-amd64
oc-mirror.tar.gz /usr/local/bin/oc-mirror oc mirror
mirror-registry-amd64.tar.gz /mirror-registry/mirror-registry 地端倉庫
openshift-install-rhel9-amd64.tar.gz /usr/local/bin/kubectl openshift-install
注意版本需一致
openshift-client-linux-amd64-rhel9-4.21.20.tar.gz /usr/local/bin/oc oc 命令
注意版本需一致
pull-secret /root/.docker/config.json 官方憑證


Firewall 需要開啟的Port

port 類型 服務
80,443 tcp http
22623 tcp api-int
6443 tcp api
8080 tcp http aph
53 udp DNS

開啟指定Port

firewall-cmd --add-port={53,80,8080,443,6443,22623}/tcp --permanent
firewall-cmd –reload
firewall-cmd --add-port=53/udp --permanent
firewall-cmd --reload

Check

firewall-cmd --list-all

netstat -tlnp

02.1_設定yum軟體組態

本地軟體組態設定

請先掛載IOS至自訂路近

vim /etc/yum.repos.d/<reponame>.repo #結尾必須.repo

內文如下

	[base]
	name=base
	baseurl=http://data.example.com/BaseOS  
	#若以iso掛載方式請使用file:///<iso位置> baseurl=file:///mnt/iso/BaseOS
	gpgcheck=0
	enabled=1
	
	[app]
	name=app
	baseurl=http://data.example.com/AppStream  
	#若以iso掛載方式請使用file:///<iso位置> 
	#例:baseurl=file:///mnt/iso/AppStream 
	gpgcheck=0
	enabled=1
**驗證方式**
dnf install httpd
  • 方法1 若DNS 可以解析可使用http
    baseurl=http://data.example.com/BaseOS

    /etc/hosts 
     192.168.111.111 data.example.com
    
  • 方法2 若以本地ISO軟體庫請先mount 軟體庫在進行後續url填寫
    baseurl=file:///mnt/iso/BaseOS

      mkdir /mnt/iso
      mount /dev/sr0 /mnt/iso
    

安裝httpd、vsftpd、haproxy、dnsmasq wget

yum install -y httpd haproxy dnsmasq policycoreutils-python-utils wget net-tools

設定httpd

設定httpd 伺服器(⽤來讓CoreOS 下載ignition file 使⽤,也可以使⽤vsfptd 的⽅式處理,因為
haproxy 已經佔⽤了80 Port所以要將httpd 的預設Port改為8080

vi /etc/httpd/conf/httpd.conf
#將Listen 80 > Listen 8080
systemctl enable --now httpd

03_Setup DNS

叢集網域(cluster-domain,用於 api/apps 等 OCP 固定命名):INPUT[text:cluster-domain]

主機 DNS IP
範例bastion bastion 192.168.100.40
bastion INPUT[text:bastion-dns] INPUT[text:Bastion_IP]
master1 INPUT[text:master1-dns] INPUT[text:Master1_IP]
master2 INPUT[text:master2-dns] INPUT[text:Master2_IP]
master3 INPUT[text:master3-dns] INPUT[text:Master3_IP]
worker1 INPUT[text:worker1-dns] INPUT[text:Worker1_IP]
worker2 INPUT[text:worker2-dns] INPUT[text:Worker2_IP]
bootstrap INPUT[text:bootstrap-dns] INPUT[text:Bootstrap_IP]

03_Setup DNS

安裝 dnsmasq

yum install -y dnsmasq

設定 dnsmasq.d/dns.conf

vi /etc/dnsmasq.d/dns.conf
# =====================================================================
# Dnsmasq 核心設定 (適用於靜態 IP 環境)
# =====================================================================

# domain=ocp.com,<您的_環境網段_例如192.168.1.0>/24,local
# --> 這個設定用於 DHCP 使用,環境如果使用 static ip 則不需要,可以用 man dnsmasq 查看詳情

# ---------------------------------------------------------------------
# host-record --> 同時處理「正解」與「反解」
# ---------------------------------------------------------------------
host-record=bastion.ocp.com,192.168.100.40
host-record=bootstrap.ocp.com,192.168.100.46
host-record=master1.ocp.com,192.168.100.41
host-record=master2.ocp.com,192.168.100.42
host-record=master3.ocp.com,192.168.100.43
host-record=worker1.ocp.com,192.168.100.44
host-record=worker2.ocp.com,192.168.100.45

# OCP DNS 與 api uri 需要正反解 (全指向擔任 Load Balancer 的 Bastion IP)
host-record=api.ocp.com,192.168.100.40
host-record=api-int.ocp.com,192.168.100.40
host-record=apps.ocp.com,192.168.100.40
host-record=*.apps.ocp.com,192.168.100.40

# ---------------------------------------------------------------------
# address --> 處理「正解」與「萬用字元 (Wildcard)」
# ---------------------------------------------------------------------
address=/bastion/192.168.100.40
address=/bootstrap/192.168.100.46
address=/master1/192.168.100.41
address=/master2/192.168.100.42
address=/master3/192.168.100.43
address=/worker1/192.168.100.44
address=/worker2/192.168.100.45

# OCP 內部路由與 API 正解
address=/apps.ocp.com/192.168.100.40
address=/*.apps.ocp.com/192.168.100.40
address=/api.ocp.com/192.168.100.40
address=/api-int.ocp.com/192.168.100.40

# ---------------------------------------------------------------------
# 上游 DNS 轉發設定
# ---------------------------------------------------------------------
# 當查詢非 ocp.com 的外部網址時,轉發給外部 DNS(可依內網環境改成公司內部的 DNS 伺服器)
server=168.95.1.1

123

安裝 dnsmasq

yum install -y dnsmasq

設定網卡dnsmasq.conf

查看IP網卡

ip a
#ens33
vi /etc/dnsmasq.conf
# 搜尋 interface <網卡>
interface=ens33

驗證方式

host 192.168.100.40
host bastion

vi /etc/resolv.conf

編輯resolv.conf設定檔

# Generated by NetworkManager
search kevin.com
nameserver 192.168.100.40   #<- 指向DNServer位置
# nameserver 1.1.1.1

設定Haproxy

vim /etc/haproxy/haproxy.cfg

設定檔

global
  log         127.0.0.1 local2
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  daemon

defaults
  mode                    http
  log                     global
  option                  dontlognull
  option http-server-close
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000

listen api-server-6443 
  bind *:6443
  mode tcp
  option  httpchk GET /readyz HTTP/1.0
  option  log-health-checks
  balance roundrobin
  server bootstrap bootstrap.kevin.com:6443 verify none check check-ssl inter 10s fall 2 rise 3 backup 
  server master1 master1.kevin.com:6443 weight 1 verify none check check-ssl inter 10s fall 2 rise 3
  server master2 master2.kevin.com:6443 weight 1 verify none check check-ssl inter 10s fall 2 rise 3
  server master3 master3.kevin.com:6443 weight 1 verify none check check-ssl inter 10s fall 2 rise 3

listen machine-config-server-22623 
  bind *:22623
  mode tcp
  server bootstrap bootstrap.kevin.com:22623 check inter 1s backup 
  server master1 master1.kevin.com:22623 check inter 1s
  server master2 master2.kevin.com:22623 check inter 1s
  server master3 master3.kevin.com:22623 check inter 1s

listen ingress-router-443 
  bind *:443
  mode tcp
  balance source
  server worker1 worker1.kevin.com:443 check inter 1s
  server worker2 worker2.kevin.com:443 check inter 1s
  
listen ingress-router-80 
  bind *:80
  mode tcp
  balance source
  server worker1 worker1.kevin.com:80 check inter 1s
  server worker2 worker2.kevin.com:80 check inter 1s
setenforce 0

systemctl restart haproxy.service

可預先掛載空間給mirror-registry作為儲存庫使用200G

選項 參數
--quayHostname bastion.kevin.com
--quayRoot /mirror-quay
--quayStorage /mirror-quay/storage
--initPassword redhat123

要修改hostname???

創建目錄

mkdir /mirror-registry
cd /mirror-registry

解壓縮

tar -zxvf mirror-registry-amd64.tar.gz -C /mirror-registry/

安裝mirror-registry

./mirror-registry install --quayHostname  bastion.kevin.com --quayRoot /mirror-quay --quayStorage /mirror-quay/storage --initPassword redhat123
Caution

密碼必須至少包含 8 個字元且不包含空格

若有錯誤可以使用un卸載

./mirror-registry uninstall

登入測試

podman login -u init -p redhat123 bastion.kevin.com:8443 --tls-verify=false
Login Succeeded!

設置pull-secret

mkdir /root/.docker
cat /root/Download/pull-secret | jq . > /root/.docker/config.json

前置條件

  • 以下步驟需再連線環境執行
    oc mirror需在連線環境下才可下載
  • 06_pull-secret設定完畢

解壓縮

tar -zxvf oc-mirror.tar.gz -C /usr/local/bin/ 

權限設定

chmod +x /usr/local/bin/oc-mirror 

編輯imageset-config.yaml

mkdir /root/mirror
vim ~/mirror/imageset-config.yaml

imageset-config.yaml

apiVersion: mirror.openshift.io/v2alpha1
kind: ImageSetConfiguration
archiveSize: 5
mirror:
  platform:
    channels:
      - name: stable-4.21
        minVersion: 4.21.20
        maxVersion: 4.21.20
    graph: true
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.21
      packages:
        - name: kubevirt-hyperconverged
          channels:
            - name: stable
              minVersion: 4.21.10
              maxVersion: 4.21.10
        - name: mtv-operator
          channels:
            - name: release-v2.12
              minVersion: 2.12.1
              maxVersion: 2.12.1
        - name: kubernetes-nmstate-operator
          channels:
            - name: stable
              minVersion: 4.20.0-202606171653
              maxVersion: 4.20.0-202606171653
        - name: netobserv-operator
          channels:
            - name: stable
              minVersion: 1.12.0
              maxVersion: 1.12.0
        - name: cluster-observability-operator
          channels:
            - name: stable
              minVersion: 1.5.0
              maxVersion: 1.5.0
        - name: cluster-logging
          channels:
            - name: stable-6.5
              minVersion: 6.5.1
              maxVersion: 6.5.1
        - name: loki-operator
          channels:
            - name: stable-6.5
              minVersion: 6.5.1
              maxVersion: 6.5.1
        - name: tempo-product
          channels:
            - name: stable
              minVersion: 0.21.0-1
              maxVersion: 0.21.0-1
        - name: opentelemetry-product
          channels:
            - name: stable
              minVersion: 0.150.0-1
              maxVersion: 0.150.0-1
        - name: local-storage-operator
          channels:
            - name: stable
              minVersion: 4.21.0-202606090112
              maxVersion: 4.21.0-202606090112
        - name: node-healthcheck-operator
          channels:
            - name: stable
              minVersion: 0.11.0
              maxVersion: 0.11.0
        - name: node-maintenance-operator
          channels:
            - name: stable
              minVersion: 5.6.1
              maxVersion: 5.6.1
        - name: self-node-remediation
          channels:
            - name: stable
              minVersion: 0.12.1
              maxVersion: 0.12.1
        - name: cincinnati-operator
          channels:
            - name: v1
              minVersion: 5.0.3
              maxVersion: 5.0.3
        - name: openshift-gitops-operator
          channels:
            - name: latest
              minVersion: 1.21.0
              maxVersion: 1.21.0
        - name: advanced-cluster-management
          channels:
            - name: release-2.17
              minVersion: 2.17.0
              maxVersion: 2.17.0
        - name: multicluster-engine
          channels:
            - name: stable-2.17
              minVersion: 2.17.0
              maxVersion: 2.17.0

下載

oc-mirror --v2 --config=/root/mirror/imageset-config.yaml file:///root/mirror

#CC範例
oc-mirror -c /root/install/ocp/imageset-config.yaml file:///root/install/ocp --cache-dir /root/install/ocp/cache --v2
注意事項

--config=請使用完整路徑 使用 ~ 會有問題

  • 驗證下載
cd /root/mirror/
ls -l

#輸出結果
#imageset-config.yaml
#mirror_000001.tar
#mirror_000002.tar
tar czvf /root/openshift-automation.tar.gz -C /root OpenShift-Automation install_source OpenShift-EaaS-Practice

前置條件

  • 已完成資料下載
  • 以建立05_mirror-registry

憑證設定

cp /mirror-quay/quay-rootCA/rootCA.pem /etc/pki/ca-trust/source/anchors/rootCA.pem
update-ca-trust #更新
trust list      #檢查

上傳

#oc-mirror -c <imageset-config.yaml位置> --from file://<images.tar位置> docker://<倉庫位置> --v2
oc-mirror -c /root/mirror/imageset-config.yaml --from file:///root/mirror/ docker://bastion.kevin.com:8443/ocp421 --v2
Warning

--cache-dir 記得設定位置

空間記得給足夠 可以分割出來


項目 內容 填寫範例
baseDomain: clusterbaseDomain com
metadata.name: clustermetadataname kevin
pullSecret: mirror-register憑證 {"auths":{"bastion.kevin.com:8443":{"auth":"aW5pdDpyZWRoYXQxMjM="}}}
sshKey: /root/.ssh/id_rsa.pub ssh碼 記得縮排
imageDigestSources:
- mirrors:
<mirror-register倉庫位置>/openshift/release
imageDigestSources:
- mirrors:
<mirror-register倉庫位置>/openshift/release-images

創建資料夾

mkdir /root/ocp4
cd /root/ocp4
vim install-config.yaml

內文如下

apiVersion: v1
baseDomain: {{ baseDomain }} #DNS規範要注意
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: {{ clusterName }}
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  networkType: OVNKubernetes
  serviceNetwork:
  - 172.30.0.0/16
platform:
  none: {}
fips: false
pullSecret: '{"auths":{"{{ bastion.name }}.{{ clusterName }}.{{ baseDomain }}:8443":{"auth":"{{ ('init:'+registryPassword) | b64encode }}"}}}'
sshKey: '{{ sshkey.stdout }}'
additionalTrustBundle: |
{{ (mirrorRegistryCA['content'] | b64decode) | indent(width=2,first=True) }}
imageDigestSources:
- mirrors:
  - {{ bastion.name }}.{{ clusterName }}.{{ baseDomain }}:8443/{{ reponame }}/openshift/release
  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
- mirrors:
  - {{ bastion.name }}.{{ clusterName }}.{{ baseDomain }}:8443/{{ reponame }}/openshift/release-images
  source: quay.io/openshift-release-dev/ocp-release
  • mirror創建憑證
podman login -u init -p redhat123 bastion.kevin.com:8443 --tls-verify=false --authfile aaa
cat aaa|jq -c #jq顯示憑證格式
  • 取得sshkey
cat /root/.ssh/id_rsa.pub
#輸出結果 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDadWhGXFA26qgzKdSt29UVwdxXfYV2l1I32Dk7i3n64LhkSOMGCh5b25vYPC2avkyKe471Ty9rcWCuI7aSr0rCHdJDH6nU7dcwAi1YgZHM540VzpjjkJJmW3cXHiOWEq1MN2Pi7I79+dTeK2mTpntsH74Q2aPEtrlt/ZN/8R/TieO0oepXpLV2R/O9eAlM5TtZrQ1keyWbv/72+XbRAMznSNmmcF/sdhmTNfx8vEmK3SrvgeK86/iy7OiRPsf+jm2VPndSvvadUivKn8yMOnU3mH2OR9k4hvSHz1fi7o0ixglLv60as5cJopB6g7MSmsGkaHh7B2Pkw97CbjYrPta5aUdKOqQrZd2TUx5EyAKgO7Ypsen50JbhqL8VtO9LfAA0WueEztFLYSiuAB/kixHtpYsG/PMtm+vjP/OUoVVBFu5dLAh8xjkHkoqhvhbU5zX/5QeqOuYqiJtxeamhEJ4FAxT2YHlp/44M9Sr0b6iGx3eISF7GESIyNDtdp1OSmbM= root@ocp.com
  • 取得imageDigestSources
#上傳完oc mirror才會有此檔
#可以從這裡查看
vim  /root/mirror/working-dir/cluster-resources/idms-oc-mirror.yaml

內文如下 查詢spec -> imageDigestMirrors -> mirrors :
bastion.kevin.com:8443/ocp421/openshift/release-images

---
apiVersion: config.openshift.io/v1
kind: ImageDigestMirrorSet
metadata:
  annotations:
    createdAt: Wednesday, 01-Jul-26 08:38:35 UTC
    createdBy: oc-mirror v2
    oc-mirror_version: 4.21.0-202606240914.p2.gf981281.assembly.stream.el9-f981281
  name: idms-operator-0
spec:
  imageDigestMirrors:
  - mirrors:
    - bastion.kevin.com:8443/ocp421/migration-toolkit-virtualization
    source: registry.redhat.io/migration-toolkit-virtualization
  - mirrors:
    - bastion.kevin.com:8443/ocp421/container-native-virtualization
    source: registry.redhat.io/container-native-virtualization
  - mirrors:
    - bastion.kevin.com:8443/ocp421/openshift4
    source: registry.redhat.io/openshift4
---
apiVersion: config.openshift.io/v1
kind: ImageDigestMirrorSet
metadata:
  annotations:
    createdAt: Wednesday, 01-Jul-26 08:38:35 UTC
    createdBy: oc-mirror v2
    oc-mirror_version: 4.21.0-202606240914.p2.gf981281.assembly.stream.el9-f981281
  name: idms-release-0
spec:
  imageDigestMirrors:
  - mirrors:
    - bastion.kevin.com:8443/ocp421/openshift/release
    source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
  - mirrors:
    - bastion.kevin.com:8443/ocp421/openshift/release-images
    source: quay.io/openshift-release-dev/ocp-release


這是Kubernetes 建置時候產⽣的那個config.yaml file,就是定義Master 或是Worker 的設定檔。

Warning

記得複製備份 指令產出後檔案會消失

cp -r ocp4/ ocp4bak

建立manifests

openshift-install create manifests --dir=/root/ocp4
#輸出解果
INFO Consuming Install Config from target directory 
WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings 
INFO Successfully populated MCS CA cert information: root-ca 2036-06-28T09:14:41Z 2026-07-01T09:14:41Z 
INFO Successfully populated MCS TLS cert information: root-ca 2036-06-28T09:14:41Z 2026-07-01T09:14:41Z 
INFO Manifests created in: /root/ocp4, /root/ocp4/manifests and /root/ocp4/openshift 

執⾏後會產⽣2 個資料夾
manifests\ ,openshift\

ls /root/ocp4/

修改cluster-scheduler-02-config.yml設定

注意 如果OCP 為single node時不⽤設定

將ture改為false ;否則master node 會被⽤來放OCP 以外的pod,增加master node的負擔

vim /root/ocp4/manifests/cluster-scheduler-02-config.yml

NTPSERVER 可以預先建置


Powered by Forestry.md