部署參數調整 (Image 交付)
安裝前的 Kubespray 部署參數調整
以下指令操作請在佈署主機上的 Kubespray Container 內執行,如不知道如何進行請參考啟動 Kubespray 執行環境
${HOME}/outputs/start-kubespray.sh 就可以自動載入先前所有設定生成 Inventory 檔 (交互命令生成)
此處我們使用工具來自動生成 Inventory 檔案 (YAML 格式),請根據提示輸入對應資訊即可
/outputs/gen-inventory.sh
執行後,該指令會將該鏡像內最新的參數檔放置到:
-
/inventoryKubespray 安裝時會使用的參數檔 -
/inventory/config.sh環境變數設定檔 -
Kubespray 不同版本間參數檔會有微幅修改,建議更換版本時能執行此指令以保證參數檔為最新內容
問答過程之參數解說與設定檔詳細說明
Deploy Server IP Address
部署時,各節點會連線至啟動 Kubespray Offline 容器的主機 80 (Package)/35000 (Container Image, optional) 下載所需檔案
設定時務必確定 Deploy Server 的 IP 地址可以被目標主機所連線
遠端 Container Registry
Kubernetes 啟動後,相關元件會嘗試從安裝時的 Registry 下載鏡像,因此需要在部署前將此次所用的到鏡像推送到企業內部 Container Registry 儲存,避免後續正常運作
修改腳本執行時套件下載路徑
執行生成腳本後,會自動生成 /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>"
# Download URLs: See roles/download/defaults/main.yml of kubespray.
kubeadm_download_url: "{{ files_repo }}/kubernetes/{{ kube_version }}/kubeadm"
kubectl_download_url: "{{ files_repo }}/kubernetes/{{ kube_version }}/kubectl"
kubelet_download_url: "{{ files_repo }}/kubernetes/{{ kube_version }}/kubelet"
# etcd is optional if you **DON'T** use etcd_deployment=host
etcd_download_url: "{{ files_repo }}/kubernetes/etcd/etcd-{{ etcd_version }}-linux-amd64.tar.gz"
cni_download_url: "{{ files_repo }}/kubernetes/cni/cni-plugins-linux-{{ image_arch }}-{{ cni_version }}.tgz"
crictl_download_url: "{{ files_repo }}/kubernetes/cri-tools/crictl-{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
# If using Calico
calicoctl_download_url: "{{ files_repo }}/kubernetes/calico/{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
# If using Calico with kdd
calico_crds_download_url: "{{ files_repo }}/kubernetes/calico/{{ calico_version }}.tar.gz"
# If using Cilium
ciliumcli_download_url: "{{ files_repo }}/cilium-linux-{{ image_arch }}.tar.gz"
runc_download_url: "{{ files_repo }}/runc/{{ runc_version }}/runc.{{ image_arch }}"
nerdctl_download_url: "{{ files_repo }}/nerdctl-{{ nerdctl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
containerd_download_url: "{{ files_repo }}/containerd-{{ containerd_version }}-linux-{{ image_arch }}.tar.gz"
設定 Kubernetes CNI
- 儘管內部驗證三者可以切換安裝,但考量到生產環境複雜度仍不建議隨意更換
推送鏡像
此處會自動讀取參數,將鏡像推送到對應 Container Registry。以下為參數來源 (按優先級排序,越前面者越高)
- /inventory/config.sh
- 環境變數 (env)
/outputs/start-serving.sh
/inventory/config.sh 內容範例
#!/bin/bash
REGISTRY_HOST=registry.example.com
REGISTRY_PORT=445
REGISTRY_REPO=library
REGISTRY_USER=robot_token
REGISTRY_PASSWORD=foobar
# Do NOT change the following lines as they are auto-generated.
KUBESPRAY_VERSION=v2.22.0-1.26.11-71b6fa13
KUBESPRAY_IMAGE=registry.srcmesh.dev/kubespray/kubespray:v2.22.0-1.26.11-71b6fa13
KUBE_VERSION=v1.26.13
調整 Inventory 設定
產生部署節點設定檔
- 修改
ansible_user,請填寫前面步驟創建的部署專用帳號名稱 - 設定各節點
Hostname(範例為:master1, worker1, worker2) - 決定各目標節點功能,如
控制節點 (Control Plane)、運算節點 (Worker Node)、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: {}
其他參數調整
修正 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 一直循環。