極簡教程!教你快速將K3s與Cloud Controller集成

作者:

Dawid Ziolkowski,雲原生工程師

原文鏈接:

https://itnext.io/how-to-integrate-k3s-with-the-cloud-controller-36bd5020b8f7

在之前的一篇文章中我們介紹了如何在60秒內創建一個4個節點的K3s集羣,文中還包含了虛擬機的配置。這一集羣的唯一問題是沒有cloud provider的支持,也就是說你不能使用LoadBalancer、存儲等服務。那麼,本文將告訴你如何將K3s與cloud provider集成。

將CCM(雲管理控制器)與K3s集成在一起基本上意味着你的K3s集羣能夠與cloud provider的API進行通信,以請求和配置諸如LoadBalancer(用於ingress)之類的服務,還能爲節點應用適當的標籤等。在不同的cloud provider之前這一過程有所不同,主要取決於cloud provider是否首先提供CCM。在本文中,我們將在DigitalOcean上安裝K3s。

整個流程並不複雜,但你需要仔細跟着以下步驟進行。首先,從master節點開始。安裝K3s master節點時,我們需要傳遞以下參數:

— disable-cloud-controller

— no-deploy servicelb

— kubelet-arg=”cloud-provider=external”

— kubelet-arg=”provider-id=digitalocean://[master_node_id]”

那麼,它們意味着什麼呢?首先,正如名字所暗示的,禁用默認K3s cloud provider,否則K3s將使用其自身內置的cloud controller。第二,我們要求K3s不要部署servicelb,因爲它會將IP地址弄亂——servicelb會用節點IP覆蓋Ingress IP,而我們希望使用DigitalOcean LoadBalancer IP作爲LoadBalancer服務類型。第三,這幾乎是所有CCM的要求,我們只需要指示kubelet使用外部cloud provider。最後一個參數,這是DO CCM的要求——如果你查看DO CCM Github repo(https://github.com/digitalocean/digitalocean-cloud-controller-manager),你會發現它們僅要求你將此參數傳遞給kubelet。[master_node_id]是可以在DO Dashboard中找到的,也可以通過從droplet本身進行GET調用來查找:

curl http://169.254.169.254/metadata/v1/id

因此,爲了安裝給CCM準備的K3s server,我們需要執行以下命令:

curl -sfL https://get.k3s.io | sh -s — server \
  --disable-cloud-controller \
  --no-deploy servicelb \
  --kubelet-arg=”cloud-provider=external” \
  --kubelet-arg=”provider-id=digitalocean://$master_id”

以上就是第一部分,前期準備。K3s server啓動之後,我們需要安裝CCM。要完成這一步驟,首先需要clone該git倉庫:

https://github.com/digitalocean/digitalocean-cloud-controller-manager

接下來,我們需要創建一個包含DigitalOcean API token的Kubernetes secret。你可以使用repo中的secret生成器,也可以使用以下命令:

kubectl -n kube-system create secret generic digitalocean --from-literal=access-token=[YOUR_DO_API_TOKEN]

如果secret已保存,則只需從倉庫中應用yaml manifest:

kubectl apply -f releases/v0.1.21.yml

現在無論何時啓用LoadBalancer服務,都會創建DigitalOcean LoadBalancer並將其配置爲將流量路由到該負載。此外,由於k3s默認內置了Traefik,因此也會自動爲其創建DOLB。

到目前爲止,我們僅創建了K3s master節點,對於worker節點,你只需要安裝具有以下參數的K3s即可:

curl -sfL https://get.k3s.io | K3S_TOKEN=${token} sh -s - agent \
  --server https://${master_node_ip}:6443 \
  --kubelet-arg="cloud-provider=external" \
  --kubelet-arg="provider-id=digitalocean://$worker_id"

現在,所有節點都具有合適的標籤集(公共/私有ip、DO區域等),並且通過DO LB的路由也會即刻啓動。

最後,我創建了一個簡單的bash腳本來自動化整個流程。這一解決方案可以讓你創建2分中之內在DigitalOcean上創建一個4節點(1個master節點+3個worker節點)的k3s集羣,並且帶有DO CCM:

https://github.com/DavidZisky/k3s-cloud

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