低資源部署 KubeSphere 4.1.2:2 核 4G 極簡雲原生實戰

KubeSphere發表於2024-12-03
KubeSphere V4已經開源一段時間了,推出了全新的 KubeSphere 架構:KubeSphere LuBan,它構建在 K8s 之上,支援高度可配置和可擴充套件。該版本只安裝KubeSphere Core核心元件,即可實現KubeSphre Web控制檯的使用。前幾天在2核4G的VM虛擬機器體驗了一下。安裝過程極快,服務非常精簡。

本文演示線上聯網部署,線上安裝相對簡單,以下部署過程較多簡寫,必要位置進行了注意事項和詳細說明。如要檢視具體安裝過程和含義可瀏覽官方文件 在 Linux 上安裝 K8s 和 KubeSphere

伺服器配置:all in one形式部署

1. 前提條件

  • 官網原話:

叢集節點的作業系統和版本須為 Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04、Debian 9、Debian 10、CentOS 7、CentOS Stream、RHEL 7、RHEL 8、SLES 15 或 openSUSE Leap 15。多臺伺服器的作業系統可以不同。關於其它作業系統和版本支援,請聯絡 KubeSphere 技術支援。

Tips:也可以聯絡筆者

  • 安裝依賴項和初始化作業系統請看 2.4 初始化作業系統章節,線上安裝非常簡單。

2. 建立 Kubernetes 叢集

2.1 建立安裝目錄

/home 目錄下建立 ks 目錄用於安裝部署 K8s 和 KubeSphere。
/home 目錄下建立 ks 目錄的原因如下:
某些作業系統預設的根目錄(/)僅提供 50GB 的儲存空間,而 /home 目錄通常有更大的可用空間。
筆者所在公司在為使用者提供伺服器和作業系統以安裝叢集時,可能會遇到根目錄儲存不足的問題。因此,建議直接在/home 目錄下新建安裝目錄,確保空間充足。

mkdir -p /home/ks
cd /home/ks

2.2 下載Kubekey

export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io |  sh -

該命令會下載最新版 Kubekey,不同版本 Kubekey,所依賴的服務(如:docker,etcd等)和映象版本(如:pause)不同。若需要指定版本的Kubekey,可使用命令

curl -sfL https://get-kk.kubesphere.io | VERSION={version} sh -

version為需要的版本。如:curl -sfL `https://get-kk.kubesphere.io` | VERSION=v3.1.5 sh -

2.3 建立叢集配置檔案

檢視Kubekey支援的K8s版本

./kk version --show-supported-k8s
v1.19.0
v1.19.8
v1.19.9
v1.19.15
...
v1.29.10
v1.30.0
v1.30.1
v1.30.2
v1.30.3
v1.30.4
v1.30.5
v1.30.6
v1.31.0
v1.31.1
v1.31.2

由於本次重在體驗和測試,這裡使用較新的1.30.6版本

./kk create config --with-kubernetes v1.30.6

2.4 初始化作業系統

./kk init os

該命令kk會自動判斷作業系統以安裝依賴項和進行必要的初始化配置。關於這點官方文件是使用的apt install去下載依賴項,可能考慮節點多的話,需要每次下載/複製kk麻煩。實際上線上部署使用kk init os還是很方便的,筆者線上部署場景經常使用,命令少,好記。注意:離線部署,該命令不可用。

初始化前:
未初始化時,直接建立叢集會報錯提示並中斷執行。

初始化後:

2.5 修改配置檔案

由於筆者用慣了docker,此處修改容器執行時為docker。生產環境K8s 1.24以上版本建議還是使用containerd

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: node1, address: 192.168.150.128, internalAddress: 192.168.150.128, user: root, password: "123@213"}
  roleGroups:
    etcd:
    - node1
    control-plane:
    - node1
    worker:
    - node1
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    # internalLoadbalancer: haproxy

    domain: lb.kubesphere.local
    address: ""
    port: 6443
  system:
    ntpServers:
      - node1 # 配置時間同步,所有節點伺服器同步node1的時間
    timezone: "Asia/Shanghai"
  kubernetes:
    version: v1.30.6
    clusterName: cluster.local
    autoRenewCerts: true
    # 此處修改執行時為:docker
    containerManager: docker # 部署 kubernetes v1.24+ 版本,建議將 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
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: []

說明: 具體引數含義可檢視官方文件:在 Linux 上安裝 K8s 和 KubeSphere,這裡寫一下注意事項

config-sample.yaml 配置檔案的 spec:hosts 引數

官方介紹

  • address 伺服器的 SSH 登入 IP 地址。
  • internalAddress 伺服器在子網內部的 IP 地址。

注:若部署的伺服器在同一區域,內網IP可以互通,address 和internalAddress 都使用內網IP。之前遇到過有的小夥伴買的雲伺服器做測試,address使用公網IP,由於部署過程通訊複製檔案走了address,公網頻寬又低。導致建立叢集時異常的慢。

2.6 建立K8s叢集

./kk create cluster -f config-sample.yaml

由於執行時使用了docker,執行後會有如下Notice提示

root@gj-VM:/home/ks# ./kk create cluster -f config-sample.yaml


 _   __      _          _   __           
| | / /     | |        | | / /           
| |/ / _   _| |__   ___| |/ /  ___ _   _ 
|    \| | | | '_ \ / _ \    \ / _ \ | | |
| |\  \ |_| | |_) |  __/ |\  \  __/ |_| |
\_| \_/\__,_|_.__/ \___\_| \_/\___|\__, |
                                    __/ |
                                   |___/

11:39:29 CST [GreetingsModule] Greetings
11:39:29 CST message: [node1]
Greetings, KubeKey!
11:39:29 CST success: [node1]
11:39:29 CST [NodePreCheckModule] A pre-check on nodes
11:39:29 CST success: [node1]
11:39:29 CST [ConfirmModule] Display confirmation form
+-------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| name  | sudo | curl | openssl | ebtables | socat | ipset | ipvsadm | conntrack | chrony | docker | containerd | nfs client | ceph client | glusterfs client | time         |
+-------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| node1 | y    | y    | y       | y        | y     | y     | y       | y         | y      |        | y          |            |             |                  | CST 11:39:29 |
+-------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+

This is a simple check of your environment.
Before installation, ensure that your machines meet all requirements specified at
https://github.com/kubesphere/kubekey#requirements-and-recommendations

Install k8s with specify version:  v1.30.6

[Notice]
For Kubernetes v1.24 and later, dockershim has been deprecated.
Current runtime is set to Docker and `cri-dockerd` will be installed to support Kubernetes v1.24 and later.
Yoc can also specify a container runtime other than Docker to install Kubernetes v1.24 or later.
You can set "spec.kubernetes.containerManager" in the configuration file to "containerd" or add "--container-manager containerd" to the "./kk create cluster" command.
For more information, see:
https://github.com/kubesphere/kubekey/blob/master/docs/commands/kk-create-cluster.md
https://kubernetes.io/docs/setup/production-environment/container-runtimes/#container-runtimes
https://kubernetes.io/blog/2022/02/17/dockershim-faq/
https://github.com/Mirantis/cri-dockerd

Continue this installation? [yes/no]:

輸入y或者yes開始安裝部署

大概等待10分鐘,部署完成

11:50:23 CST success: [LocalHost]
11:50:23 CST Pipeline[CreateClusterPipeline] execute successfully
Installation is complete.

Please check the result using the command:

        kubectl get pod -A

ps:若發現下載服務過程很慢,可以嘗試ctrl + c後重新輸入export KKZONE=cn。有個小夥伴電腦,出現同一個視窗,輸入了export KKZONE=cn後下載了兩個服務後不生效了。需要重新輸入後再次執行create cluster才可以,不確定是否為當前版本Bug,暫未排查原因。

2.7 驗證

root@gj-VM:/home/ks# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-848b87ffbc-6hh97   1/1     Running   0          29m
kube-system   calico-node-ks586                          1/1     Running   0          29m
kube-system   coredns-848f88b9dc-hsmh9                   1/1     Running   0          29m
kube-system   coredns-848f88b9dc-k9djl                   1/1     Running   0          29m
kube-system   kube-apiserver-node1                       1/1     Running   0          29m
kube-system   kube-controller-manager-node1              1/1     Running   0          29m
kube-system   kube-proxy-2l2rx                           1/1     Running   0          29m
kube-system   kube-scheduler-node1                       1/1     Running   0          29m
kube-system   nodelocaldns-l59qn                         1/1     Running   0          29m

可以看到K8s所有pod執行中,K8s已經部署完成。

3.安裝 KubeSphere

本章節只部署 KubeSphere 4.1.2的ks-core核心元件,擴充套件元件暫不安裝。安裝完成後,即可訪問 KubeSphere Web 控制檯,K8s和KubeSphere的核心功能已可使用。

3.1 安裝Helm

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
root@gj-VM:/home/ks# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11903  100 11903    0     0  13760      0 --:--:-- --:--:-- --:--:-- 13760
[WARNING] Could not find git. It is required for plugin installation.
Helm v3.16.3 is available. Changing from version v3.14.3.
Downloading https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

3.2 安裝 KubeSphere Core

helm upgrade --install -n kubesphere-system --create-namespace ks-core https://charts.kubesphere.io/main/ks-core-1.1.3.tgz --debug --wait --set global.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks

部署過程非常快,快到讓人懷疑,2H4G的硬體,不到2分鐘安裝完了,比之前版本離線部署還快。

Thank you for choosing KubeSphere Helm Chart.

Please be patient and wait for several seconds for the KubeSphere deployment to complete.

1. Wait for Deployment Completion

    Confirm that all KubeSphere components are running by executing the following command:

    kubectl get pods -n kubesphere-system
2. Access the KubeSphere Console

    Once the deployment is complete, you can access the KubeSphere console using the following URL:  

    http://192.168.150.128:30880

3. Login to KubeSphere Console

    Use the following credentials to log in:

    Account: admin
    Password: P@88w0rd

再次檢視pod情況

root@node1:~# kubectl get pod -A
NAMESPACE           NAME                                       READY   STATUS    RESTARTS        AGE
kube-system         calico-kube-controllers-848b87ffbc-2mqwb   1/1     Running   1 (2m25s ago)   130m
kube-system         calico-node-kmspv                          1/1     Running   1 (2m25s ago)   130m
kube-system         coredns-9dc95d955-4th25                    1/1     Running   1 (2m25s ago)   130m
kube-system         coredns-9dc95d955-zr77b                    1/1     Running   1 (2m25s ago)   130m
kube-system         kube-apiserver-node1                       1/1     Running   1 (2m25s ago)   131m
kube-system         kube-controller-manager-node1              1/1     Running   1 (2m25s ago)   131m
kube-system         kube-proxy-rlnsq                           1/1     Running   1 (2m25s ago)   130m
kube-system         kube-scheduler-node1                       1/1     Running   1 (2m25s ago)   131m
kube-system         nodelocaldns-rx4w2                         1/1     Running   1 (2m25s ago)   130m
kubesphere-system   extensions-museum-d77fddd77-5tqpp          1/1     Running   1 (2m25s ago)   70m
kubesphere-system   ks-apiserver-59b7c94c77-fpkmv              1/1     Running   1 (2m25s ago)   70m
kubesphere-system   ks-console-b9ff8948c-687zd                 1/1     Running   1 (2m25s ago)   70m
kubesphere-system   ks-controller-manager-777888fdb8-nlkmr     1/1     Running   1 (2m25s ago)   70m

可以看到kubespehre-system的pod只有4個,kube-sysem的 pod 有9個,對比 K8s 1.23和1.22也少了3~4個。也沒有其他的ns,整體非常精簡。

4.體驗KubeSphere控制平臺

4.1 登入

訪問http://IP:30080登入 KubeSphere 管理平臺

輸入預設使用者名稱密碼:admin/P@88w0rd登入,之前版本不會強制要求更改預設密碼。KubeSphere 4.1.2版本使用預設使用者登入後,要求更改預設密碼才可後續訪問。

注意:根據海勒姆定律,非必要不修改。此變更,雖提高了安全性,若業務系統有使用的預設使用者名稱密碼呼叫 KubeSphere 的,影響比較大。需要業務系統同步修改(PS:之前我司有個研發小夥伴寫的程式碼沒有使用後建立的賬號而用了預設admin/P@88w0rd)。

若想不修改密碼繼續使用後續功能。可透過以下二種方式規避。

  • 修改瀏覽器url去掉password/confirm

如,修改192.168.150.128:30880/password/confirm去掉後直接訪問192.168.150.128:30880

  • 先修改成一個複雜密碼,然後用複雜密碼登入後再修改為P@88w0rd。由於修改過密碼之後再登入不會出現強制修改密碼。

登入後,此時將會看到全新的 KubeSphere 頁面

4.2 叢集管理

點選叢集管理,可以看到之前聯邦叢集的頁面,

進入主叢集會看到左側熟悉的選單,跟之前的功能基本一致。

5.新增其他叢集,組建叢集聯邦

5.1 概述

如今,各種組織跨不同的雲廠商或者在不同的基礎設施上執行和管理多個 K8s 叢集的做法非常普遍。由於每個 K8s 叢集都是一個相對獨立的單元,上游社群正在艱難地研究和開發多叢集管理解決方案。即便如此,K8s 叢集聯邦(Kubernetes Cluster Federation,簡稱 <font style="color:rgb(46,161,33);">KubeFed</font>)可能是其中一種可行的方法。

5.2 部署成員叢集

重複以上步驟,在129,130建立all in one K8s叢集

這裡使用129作為主叢集,新增128為成員叢集

5.3 新增成員叢集

獲取成員叢集的kubeconfig

kubectl config view --raw

複製 Kubeconfig 資訊,並修改其中的 clusters:cluster:server 引數

clusters:
- cluster:
    server: https://<member-cluster-node-ip>:6443

注意:成員叢集不要安裝 KubeSphere,否則頁面點選建立時會沒有反應。透過F12檢視開發者選項,可以看到400錯誤,提示current cluster is managed by another host cluster 'host' 成員叢集已經由另一個主叢集管理。需要先解除安裝成員叢集中的kubesphere部分helm -n kubesphere-system uninstall ks-core

點選下一步後,叢集配置不填寫,直接點選建立。

注意:成員叢集加入過程,成員叢集會部署 KubeSphere 相關服務。而成員叢集部署 KubeSphere 服務時,直接使用 hub.docker 映象,由於訪問限制,國內沒梯子的話會顯示一直映象拉取失敗。

修復措施:將以下相關映象,重新打標籤 。因為可以使用優先本地映象,就不需要去 hub.docker 拉取了。

如:

docker tag swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/kubectl:v1.27.17  kubesphere/kubectl:v1.27.17
docker tag swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-console:v4.1.2 kubesphere/ks-console:v4.1.2

然而extensions-museum設定的是每次拉取映象,這時候,我們需要透過edit修改為優先使用本地映象kubectl edit deployment extensions-museum -n kubesphere-system`IfNotPresent`

待成員叢集中的kubesphere-system專案中的pod都啟動正常後,返回主叢集管理頁面,可以看到成員叢集已經準備就緒,新增成功。

點選成員叢集,可以進入成員叢集管理介面。


5.4 建立企業空間

點選工作臺-左側企業空間-建立企業空間,填寫名稱後選擇要建立哪個叢集。當選擇主叢集時會出現提示:<font style="color:rgb(222,120,2);">當前系統為多叢集系統,請儘量避免在主叢集上建立資源。主叢集負載過高會導致多叢集系統穩定性下降。</font>

5.5 建立專案

點選新建企業空間後,進入企業空間的專案。當有多個叢集有該企業空間時,可選擇叢集,然後建立至哪個叢集。

其他建立/檢視應用倉庫、工作負載、服務等跟之前一樣,具體可自行體驗。

到這裡,我們用最小化的配置完成了 KubeSphere 4.1.2的部署,聯邦叢集的新增。整體使用下來,令人很是心動。若是第一次使用或是學習還是推薦使用該版本的。

注意事項

  • 測試體驗:本文旨在測試和體驗 KubeSphere 4.1.2 的新特性和功能。
    部署過程中預設僅安裝了 KubeSphere 核心元件,因此諸如 Prometheus 監控、告警、日誌 等功能並未安裝。
  • 擴充套件元件:如需使用上述功能,可透過安裝擴充套件元件實現,具體操作需參考官方文件或自行研究。
  • 生產環境:若需用於生產環境,請在部署前進行充分的測試和驗證。

相關文章