k0s 使用教程:如何快速搭建 Kubernetes 集羣

文章首發於公號「阿拉平平」

相信 Kubernetes 以其複雜的架構,勸退了不少想要學習的新手。僅是搭建集羣,學習成本就不低。我的建議是:與其將時間放在搭建上,不如將精力放到 K8s 本身,等熟悉各個功能了,再搭建集羣去了解各個組件,這種學習方法可能更加高效。

今天和大家分享的一個開源的 K8s 發行版:k0s,只需將 k0s 的二進制文件複製到各個主機上,就可以快速搭 K8s 集羣。

項目介紹

k0s [1] 是一款簡易、穩定且經過認證的 Kubernetes 發行版,它提供了構建 Kubernetes 集羣所需的所有內容,集成了運行 K8s 所有必需的組件。

環境準備

k0s 支持單/多節點部署,這裏僅介紹多節點部署,其它安裝方法可以參考官方文檔 [2]

我準備了兩臺 CentOS 7.8 的虛擬機,信息如下:

主機名 IP
master 192.168.128.131
worker 192.168.128.132

需要說明的是,兩臺主機的防火牆和 SELinux 均已關閉。

下載安裝

目前 k0s 的最新版本爲 v0.11.0,可以通過腳本下載並安裝:

$ curl -sSLf https://get.k0s.sh | sudo sh

安裝完成後,驗證下版本:

[root@master ~]# k0s version
v0.11.0

各主機下載完成後,就可以搭建集羣了。

搭建集羣

最新版本的 k0s 支持通過命令創建服務,只需在各個主機上建好各自的服務,直接啓動即可。

master

在 master 主機上安裝 controller 服務:

[root@master ~]# k0s install controller 
INFO[2021-03-05 15:54:29] no config file given, using defaults         
INFO[2021-03-05 15:54:29] creating user: etcd                          
INFO[2021-03-05 15:54:30] creating user: kube-apiserver                
INFO[2021-03-05 15:54:30] creating user: konnectivity-server           
INFO[2021-03-05 15:54:30] creating user: kube-scheduler                
INFO[2021-03-05 15:54:30] Installing k0s service

啓動 controller 服務:

[root@master ~]# systemctl start k0scontroller

服務啓動後,檢查下運行狀態:

服務運行正常,接下來生成一個 token 文件供 worker 連接:

# 出於安全考慮,這裏設置了 token 的過期時間
[root@master ~]# k0s token create --role=worker --expiry=100h > token-file

將 token 文件複製到 worker 主機上:

[root@master ~]# scp token-file 192.168.128.132:/opt/k0s/

至此,master 節點部署完成,接下來登錄 worker 節點。

worker

在 worker 主機上安裝 worker 服務,並指定剛複製的 token 文件,:

[root@worker ~]# k0s install worker --token-file /opt/k0s/token-file 
INFO[2021-03-05 16:19:41] Installing k0s service 

啓動服務並確保運行正常:

[root@worker ~]# systemctl start k0sworker

至此,所有的部署工作均已完成。

使用示例

接下來,我準備創建一個 Deployment 來測試集羣是否可用。在創建前,需要檢查下當前集羣的狀態。

回到 master 節點,首先檢查下節點的狀態。需要注意:如果節點沒有加入或者處於 Not Ready,會導致 pod 一直處於 pending 狀態:

[root@master ~]# k0s kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
worker   Ready    <none>   8m32s   v1.20.4-k0s1

可以看到,worker 節點已加入並處於就緒狀態,再檢查下 kube-system 中 pod 的運行情況:

[root@master ~]# k0s kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-5f6546844f-9fjhp   1/1     Running   0          37m
calico-node-rnjnl                          1/1     Running   0          12m
coredns-5c98d7d4d8-xw6lw                   1/1     Running   0          38m
konnectivity-agent-xkcjh                   1/1     Running   0          10m
kube-proxy-hfcc9                           1/1     Running   0          12m
metrics-server-6fbcd86f7b-tc9kg            1/1     Running   0          37m

各 pod 均處於 Runing 狀態,說明集羣服務運行正常。接下來,試試通過 yaml 文件創建一個 nginx 應用。

[root@master ~]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
[root@master ~]# k0s kubectl create -f nginx.yaml 
deployment.apps/nginx-deployment created

查看 nginx 的運行情況,應用已啓動,,說明集羣可用:

[root@master ~]# k0s kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1/1     1            1           46s

寫在最後

官方將這個項目命名爲 k0s,這可不是亂取的啊,顯然是有備而來。k0s 中的 0 包含三層含義:

  • 零摩擦:輕量並保留所有 K8s 的功能,儘可能降低安裝和使用的複雜性。
  • 零依賴:集成所有 K8s 組件,無需安裝其它依賴。
  • 零成本:二進制文件部署,適合非專業用戶使用。

如文中演示,k0s 部署方便,使用簡單,即使是沒有經驗的用戶,在數分鐘內也可以創建一套 Kubernetes 集羣。

References

[1] k0s: https://github.com/k0sproject/k0s
[2] 官方文檔: https://docs.k0sproject.io/latest/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章