生成 Inventory 檔 (交互命令生成)

此處我們使用工具來自動生成 Inventory 檔案 (YAML 格式),請根據提示輸入對應資訊即可

  /outputs/gen-inventory.sh
  

執行後,該指令會將該映像檔內最新的參數檔放置到:

  • /inventory: Kubespray 安裝時會使用的參數檔 (實際會存放在前個步驟的 Host 位置)

  • /inventory/config.sh: 環境變數設定檔

  • Kubespray 不同版本間參數檔會有微幅修改,建議更換版本時能執行此指令以保證參數檔為最新內容

問答過程之參數解說與設定檔詳細說明

Deploy Server IP Address

部署時,各節點會連線至部署主機下載所需的安裝檔案/映像檔,設定時務必確定部署主機的 IP 地址可以被目標主機所連線

遠端 Container Registry

Kubernetes 啟動後,相關元件會嘗試從安裝時的 Registry 下載映像檔,因此需要在部署前將此次所用的到映像檔推送到企業內部 Container Registry 儲存,避免後續正常運作

修改腳本執行時套件下載路徑

執行生成腳本 (gen-inventory.sh) 後,會自動生成 /inventory/group_vars/all/offline.yml,以下僅為範例 (實際內容根據輸入參數會有所異動,切勿 Copy/Paste)

`L1`: 為 Container Registry
`L4`-`L6`: 請務必確認 `REGISTRY_HOST` 與 `REGISTRY_PORT` 是否與前面 Container Registry 設定相同
`L2`-`L17`: 請務必確認 `REGISTRY_REPO` 是否與前面 Container Repository 設定相同
registry_host: "<REGISTRY_HOST>:<REGISTRY_PORT>"

containerd_insecure_registries:
"<REGISTRY_HOST>:<REGISTRY_PORT>": "http://<REGISTRY_HOST>:<REGISTRY_PORT>"

files_repo: "<HOST_IP>/files"
yum_repo: "<HOST_IP>/rpms"
ubuntu_repo: "<HOST_IP>/debs"

# Registry overrides
kube_image_repo: "{{ registry_host }}/<REGISTRY_REPO>"
gcr_image_repo: "{{ registry_host }}/<REGISTRY_REPO>"
docker_image_repo: "{{ registry_host }}/<REGISTRY_REPO>"
quay_image_repo: "{{ registry_host }}/<REGISTRY_REPO>"
github_image_repo: "{{ registry_host }}/<REGISTRY_REPO>"

...

設定 Kubernetes CNI

CNI 已於 gen-inventory.sh 的選單中選定(選單僅列出此映像檔所包含的 CNI,第一項為預設值),並寫入 /inventory/group_vars/k8s_cluster/k8s-cluster.yml 的 kube_network_plugin。如需更換,請重新執行 gen-inventory.sh(執行前會自動備份既有設定)。各選項說明如下:

  • 儘管內部驗證三者可以切換安裝,但考量到生產環境複雜度仍不建議隨意更換

推送映像檔

此處會自動讀取參數,將映像檔推送到對應 Container Registry。以下為參數來源 (按優先級排序,越前面者越高)

  • /inventory/config.sh
  • 環境變數 (env)
  /outputs/start-serving.sh
  
/inventory/config.sh 內容範例

gen-inventory.sh 會將輸入的值直接寫入此檔案,start-serving.sh 執行時讀取此檔案,無須另行宣告環境變數。

  #!/bin/bash

REGISTRY_HOST=192.168.1.160
REGISTRY_PORT=35000
REGISTRY_LIBRARY_REPO=library
FLATTEN_IMAGE_PATH=true
INSECURE_REGISTRY=true

REGISTRY_USER=
REGISTRY_PASSWORD=

IMAGE_PLATFORM=$(printf "%s/%s" "$(uname -s | tr '[:upper:]' '[:lower:]')" "$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/')")

# Do NOT change the following lines as they are auto-generated.

KUBESPRAY_VERSION=v2.32.0-1.36.4-990d3035

KUBE_VERSION=v1.36.4
  

調整 Inventory 設定

請務必先執行 gen-inventory.sh 生成 Inventory 設定檔

產生部署節點設定檔

gen-inventory.sh 已依輸入的節點 IP、部署專用帳號與控制節點數量產生 /inventory/hosts.yml:前 N 台為 master1..(Control Plane 與 etcd),其餘為 worker1..。請檢視並視需要調整下列內容:

  1. ansible_user 為前面步驟建立的部署專用帳號名稱(若執行 gen-inventory.sh 時未填寫,請於此補上)
  2. 各節點 Hostname(範例:master1、worker1、worker2)。安裝時會將節點的主機名稱設定為此處的名稱
  3. 各目標節點的角色,如控制節點 (Control Plane)、運算節點 (Worker Node)、etcd 節點;etcd 節點數量須為奇數

以下為範例 (請根據實際狀況調整,切勿 Copy/Paste)

  all:
    vars:
      ansible_user: <部署專用帳號>
    hosts:
      master1:
        ansible_host: <Master Node IP>
        ip: <Master Node IP>
        access_ip: <Master Node IP>
      worker1:
        ansible_host: <Worker Node 1 IP>
        ip: <Worker Node 1 IP>
        access_ip: <Worker Node 1 IP>
      worker2:
        ansible_host: <Worker Node 2 IP>
        ip: <Worker Node 2 IP>
        access_ip: <Worker Node 2 IP>
    children:
      kube_control_plane:
        hosts:
          master1:
      kube_node:
        hosts:
          worker1:
          worker2:
      etcd:
        hosts:
          master1:
      k8s_cluster:
        children:
          kube_control_plane:
          kube_node:
      calico_rr:
        hosts: {}
  

設定 Cluster CIDR

於 /inventory/group_vars/k8s_cluster/k8s-cluster.yml 修改下列設定

  # 範例,請根據實際環境調整
kube_service_addresses: 10.233.0.0/18
kube_pods_subnet: 10.234.0.0/16
kube_network_node_prefix: 24
  

設定 HA

於 /inventory/group_vars/all/all.yml 修改下列設定

  # 範例,請根據實際環境調整
apiserver_loadbalancer_domain_name: "my-apiserver-lb.example.com"
loadbalancer_apiserver:
  address: <VIP>
  port: 8383
  

實際 HAProxy 設置,請參考官方文件說明


其他參數調整

修正 RHEL 訂閱錯誤

如果出現 RHEL 訂閱錯誤 (subscription error) 時才需要進行以下設定調整

於 /inventory/group_vars/all/all.yml 增加下列設定

  cat >> /inventory/group_vars/all/all.yml << EOF
rhel_enable_repos: false
EOF
  

調整 hostNetwork: true 模式下 DNS 解析設定

如目標主機並未指定上游 DNS 主機時可能會出現部分異常,請調整 /inventory/group_vars/k8s_cluster/k8s-cluster.yml 的 resolvconf_mode 改成下列樣式

  # Can be docker_dns, host_resolvconf or none
resolvconf_mode: none
  

如該環境皆有指定 DNS 主機,可以保持官方原始設定 host_resolvconf,詳細參數設定含義請參考官方文件

沒有設定上游 DNS 查詢主機時

原本的設定檔並未設定 upstream_dns_servers,將導致 Local DNS => Global DNS => Local DNS 一直循環。

Was this page helpful?