征服 Docker 映象訪問限制:KubeSphere v3.4.1 成功部署全攻略

kubesphere發表於2024-07-28

近期,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 管理平臺。

  1. 建立叢集配置檔案

本文選擇了 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
  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 釋出!

相關文章