近期,KubeSphere 社群的討論中頻繁出現關於 Docker 官方映象倉庫訪問受限的問題。
本文旨在為您提供一個詳細的指南, 展示在 Docker 官方映象訪問受限的情況下,如何透過 KubeKey v3.1.2 一次性成功部署 KubeSphere v3.4.1 以及 Kubernetes v1.28.8 叢集。這將幫助您克服訪問限制,確保部署過程的順利進行。
實戰伺服器配置(架構1:1復刻小規模生產環境,配置略有不同)
主機名 | IP | CPU | 記憶體 | 系統盤 | 資料盤 | 用途 |
---|---|---|---|---|---|---|
ksp-control-1 | 192.168.9.91 | 8 | 16 | 40 | 100 | KubeSphere/k8s-control-plane/Worker |
ksp-control-2 | 192.168.9.92 | 8 | 16 | 40 | 100 | KubeSphere/k8s-control-plane/Worker |
ksp-control-3 | 192.168.9.93 | 8 | 16 | 40 | 100 | KubeSphere/k8s-control-plane/Worker |
合計 | 3 | 24 | 48 | 120 | 300 |
實戰環境涉及軟體版本資訊
- 作業系統:openEuler 22.03 LTS SP3 x86_64
- KubeSphere:v3.4.1
- Kubernetes:v1.28.8
- KubeKey: v3.1.2
1. 前置條件
請參考 Kubernetes 叢集節點 openEuler 22.03 LTS SP3 系統初始化指南,完成作業系統初始化配置。
初始化指南中沒有涉及作業系統升級的任務,在能聯網的環境建議初始化的時候升級作業系統,然後重啟節點。
2. 安裝部署 KubeSphere 和 Kubernetes
2.1 下載 KubeKey
本文將 Control-1 節點作為部署節點,把 KubeKey 最新版 (v3.1.2) 二進位制檔案下載到該伺服器。
- 下載最新版的 KubeKey
mkdir ~/kubekey
cd ~/kubekey/
# 選擇中文區下載(訪問 GitHub 受限時使用)
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -
- 檢視 KubeKey 支援的 Kubernetes 版本列表
./kk version --show-supported-k8s
$ ./kk version --show-supported-k8s
v1.19.0
......(受限於篇幅,中間的不展示,請讀者根據需求檢視)
v1.28.10
v1.28.11
v1.29.0
v1.29.1
v1.29.2
v1.29.3
v1.29.4
v1.29.5
v1.29.6
v1.30.0
v1.30.1
v1.30.2
說明: 輸出結果為 KubeKey 支援的結果,但不代表 KubeSphere 和其他 K8s 也能完美支援。
KubeKey 支援的 K8s 版本還是比較新的。本文選擇 v1.28.8,生產環境可以選擇 v1.26.15 或是其他次要版本是雙數且補丁版本數超過 5 的版本。不建議選擇太老的版本了,畢竟 v1.30 都已經發布了。
2.2 建立叢集部署配置檔案
本文部署一套三節點,control-plane 和 worker 複用的 Kubernetes 叢集。同時,部署只啟用預設外掛的 KubeSphere 管理平臺。
- 建立叢集配置檔案
本文選擇了 KubeSphere v3.4.1 和 Kubernetes v1.28.8。因此,指定配置檔名稱為 ksp-v341-v1288.yaml,如果不指定,預設的檔名為 config-sample.yaml。
./kk create config --name opsxlab -f ksp-v341-v1288.yaml --with-kubernetes v1.28.8 --with-kubesphere v3.4.1
- 修改配置檔案
重點說明:解決 DockerHub 映象拉取受限的核心辦法就是修改 registry 的相關配置,顯示的指定映象從國內映象倉庫拉取。
編輯配置檔案, vi ksp-v341-v1288.yaml
,主要修改 kind: Cluster 小節的相關配置,修改說明如下。
- hosts:指定節點的 IP、ssh 使用者、ssh 密碼、ssh 埠。示例演示了 ssh 埠號的配置方法。
- roleGroups:指定 etcd、control-plane 、worker 使用相同的三個節點
- internalLoadbalancer: 啟用內建的 HAProxy 負載均衡器
- domain:自定義域名 lb.opsxlab.cn,無特殊需求可使用預設值 lb.kubesphere.local
- clusterName:自定義 opsxlab.cn,無特殊需求可使用預設值 cluster.local
- autoRenewCerts:該引數可以實現證書到期自動續期,預設為 true
- containerManager:使用 containerd
- storage.openebs.basePath:新增配置,指定 openebs 預設儲存路徑為 /data/openebs/local
- registry.privateRegistry:核心配置, 解決 Docker 官方映象不可用的問題
- registry.namespaceOverride: 核心配置, 解決 Docker 官方映象不可用的問題
修改後的完整示例如下:
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: opsxlab
spec:
hosts:
- {name: ksp-control-1, address: 192.168.9.91, internalAddress: 192.168.9.91, user: root, password: "OpsXlab@2024"}
- {name: ksp-control-2, address: 192.168.9.92, internalAddress: 192.168.9.92, user: root, password: "OpsXlab@2024"}
- {name: ksp-control-3, address: 192.168.9.93, internalAddress: 192.168.9.93, user: root, password: "OpsXlab@2024"}
roleGroups:
etcd:
- ksp-control-1
- ksp-control-2
- ksp-control-3
control-plane:
- ksp-control-1
- ksp-control-2
- ksp-control-3
worker:
- ksp-control-1
- ksp-control-2
- ksp-control-3
controlPlaneEndpoint:
## Internal loadbalancer for apiservers
internalLoadbalancer: haproxy
domain: lb.opsxlab.cn
address: ""
port: 6443
kubernetes:
version: v1.28.8
clusterName: opsxlab.cn
#dnsDomain: opsxlab.cn
autoRenewCerts: true
containerManager: containerd
etcd:
type: kubekey
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
multusCNI:
enabled: false
storage:
openebs:
basePath: /data/openebs/local # 預設沒有的新增配置,base path of the local PV
registry:
privateRegistry: "registry.cn-beijing.aliyuncs.com" # 使用阿里雲映象
namespaceOverride: "kubesphereio" # 阿里雲映象 KubeSphere 官方 namespace
registryMirrors: []
insecureRegistries: []
addons: []
---
......
2.3 部署叢集
執行下面的命令,使用配置檔案 ksp-v341-v1288.yaml
部署叢集。
export KKZONE=cn
./kk create cluster -f ksp-v341-v1288.yaml
上面的命令執行後,KubeKey 先檢查部署 Kubernetes 的依賴及其它配置是否符合要求。透過檢查後,系統將提示您確認安裝。輸入 yes 並按 ENTER 繼續部署。
部署完成需要大約 20-30 分鐘左右,具體看網速和機器配置(注:kubeadm、kubelet 等 10個二進位制安裝包,總大小 400M,因下載限速 1024K,下載時間需要 7分鐘)。
部署完成後,您應該會在終端上看到類似於下面的輸出。提示部署完成的同時,輸出中還會顯示使用者登陸 KubeSphere 的預設管理員使用者和密碼。
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://192.168.9.91:30880
Account: admin
Password: P@88w0rd
NOTES:
1. After you log into the console, please check the
monitoring status of service components in
"Cluster Management". If any service is not
ready, please wait patiently until all components
are up and running.
2. Please change the default password after login.
#####################################################
https://kubesphere.io 2024-07-17 22:34:20
#####################################################
22:34:20 CST skipped: [ksp-control-3]
22:34:20 CST skipped: [ksp-control-2]
22:34:20 CST success: [ksp-control-1]
22:34:20 CST Pipeline[CreateClusterPipeline] execute successfully
Installation is complete.
Please check the result using the command:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
3. 驗證 k8s 叢集
3.1 KubeSphere 管理控制檯驗證叢集狀態
我們開啟瀏覽器訪問 Control-1 節點的 IP 地址和埠 30880,可以看到 KubeSphere 管理控制檯的登入頁面。
輸入預設使用者 admin 和預設密碼 P@88w0rd,然後點選「登入」。
- 檢視叢集節點資訊(CPU、記憶體資源使用量不大)
- 檢視元件資訊(最小化)
- 檢視監控資訊
3.2 kubectl 命令列驗證叢集狀態
本小節只是簡單檢視基本狀態,並不全面,更多的細節請自己體驗探索。
- 檢視叢集節點資訊
在 control-1 節點執行 kubectl 命令獲取 Kubernetes 叢集上的可用節點列表。
kubectl get nodes -o wide
在輸出結果中可以看到,當前的 Kubernetes 叢集節點數量,並詳細展示每個節點的名字、狀態、角色、存活時間、Kubernetes 版本號、內部 IP、作業系統型別、核心版本和容器執行時等資訊。
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ksp-control-1 Ready control-plane,worker 42m v1.28.8 192.168.9.91 <none> openEuler 22.03 (LTS-SP3) 5.10.0-182.0.0.95.oe2203sp3.x86_64 containerd://1.7.13
ksp-control-2 Ready control-plane,worker 41m v1.28.8 192.168.9.92 <none> openEuler 22.03 (LTS-SP3) 5.10.0-182.0.0.95.oe2203sp3.x86_64 containerd://1.7.13
ksp-control-3 Ready control-plane,worker 41m v1.28.8 192.168.9.93 <none> openEuler 22.03 (LTS-SP3) 5.10.0-182.0.0.95.oe2203sp3.x86_64 containerd://1.7.13
- 檢視 Pod 列表
輸入以下命令獲取在 Kubernetes 叢集上執行的 Pod 列表,確保所有的容器狀態都是 Running。
kubectl get pods -o wide -A
3.3 驗證節點映象列表
下面展示一下最小化部署一套 KubeSphere 和 Kubernetes 叢集到底依賴哪些映象,以及映象的下載地址、TAG、大小。
- Control 節點的映象列表(29 個)
$ crictl images
IMAGE TAG IMAGE ID SIZE
registry.cn-beijing.aliyuncs.com/kubesphereio/alertmanager v0.23.0 ba2b418f427c0 26.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/cni v3.27.3 6527a35581401 88.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/coredns 1.9.3 5185b96f0becf 14.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64 1.4 846921f0fe0e5 1.82MB
registry.cn-beijing.aliyuncs.com/kubesphereio/k8s-dns-node-cache 1.22.20 ff71cd4ea5ae5 30.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-apiserver v3.4.1 c486abe6f1cc8 65.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-console v3.4.1 aa81987f764d3 51.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-controller-manager v3.4.1 2a2294b6c6af0 50.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-installer v3.4.1 d6ce52546e1c3 156MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-apiserver v1.28.8 e70a71eaa5605 34.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controller-manager v1.28.8 e5ae3e4dc6566 33.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controllers v3.27.3 3e4fd05c0c1c0 33.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-proxy v1.28.8 5ce97277076c6 28.1MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-rbac-proxy v0.11.0 29589495df8d9 19.2MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-scheduler v1.28.8 ad3260645145d 18.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-state-metrics v2.6.0 ec6e2d871c544 12MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kubectl v1.22.0 30c7baa8e18c0 26.6MB
registry.cn-beijing.aliyuncs.com/kubesphereio/linux-utils 3.3.0 e88cfb3a763b9 26.9MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node-exporter v1.3.1 1dbe0e9319764 10.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node v3.27.3 5c6ffd2b2a1d0 116MB
registry.cn-beijing.aliyuncs.com/kubesphereio/notification-manager-operator v2.3.0 7ffe334bf3772 19.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/notification-manager v2.3.0 2c35ec9a2c185 21.6MB
registry.cn-beijing.aliyuncs.com/kubesphereio/notification-tenant-sidecar v3.2.0 4b47c43ec6ab6 14.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/pause 3.9 e6f1816883972 321kB
registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus-config-reloader v0.55.1 7c63de88523a9 4.84MB
registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus-operator v0.55.1 b30c215b787f5 14.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus v2.39.1 6b9895947e9e4 88.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/provisioner-localpv 3.3.0 739e82fed8b2c 28.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/snapshot-controller v4.0.0 f1d8a00ae690f 19MB
- Worker 節點的映象列表(11 個)
$ crictl images
IMAGE TAG IMAGE ID SIZE
registry.cn-beijing.aliyuncs.com/kubesphereio/cni v3.27.3 6527a35581401 88.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/coredns 1.9.3 5185b96f0becf 14.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/k8s-dns-node-cache 1.22.20 ff71cd4ea5ae5 30.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-apiserver v1.28.8 e70a71eaa5605 34.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controller-manager v1.28.8 e5ae3e4dc6566 33.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-proxy v1.28.8 5ce97277076c6 28.1MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-rbac-proxy v0.11.0 29589495df8d9 19.2MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-scheduler v1.28.8 ad3260645145d 18.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node-exporter v1.3.1 1dbe0e9319764 10.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node v3.27.3 5c6ffd2b2a1d0 116MB
registry.cn-beijing.aliyuncs.com/kubesphereio/pause 3.9 e6f1816883972 321kB
免責宣告:
- 筆者水平有限,儘管經過多次驗證和檢查,盡力確保內容的準確性,但仍可能存在疏漏之處。敬請業界專家大佬不吝指教。
- 本文所述內容僅透過實戰環境驗證測試,讀者可學習、借鑑,但嚴禁直接用於生產環境。由此引發的任何問題,作者概不負責!
本文由部落格一文多發平臺 OpenWrite 釋出!