baicai

白菜

一个勤奋的代码搬运工!

K3s 快速入門指南:構建多雲環境下的K3S集群

K3s 是輕量級的 Kubernetes。server 最低只需要 512M 內存即可運行。

不同帳號甚至不同雲服務商, 內網是不通的。所以要想辦法實現跨公網的容器網絡通信,保障任意一台節點上的 pod 能訪問任意節點上的 pod 和 service,和正常的 kubernetes 集群體驗一致。

參考入門指南和多雲解決方案,重新整理

目標:實現混合雲 (騰訊雲伺服器 + 甲骨文伺服器 + 微軟 Azure 伺服器) 環境下的 K3S 集群

Server 安裝#

# 局域網方案
curl -sfL https://get.k3s.io | sh -
# 多雲安裝方案
curl -sfL https://get.k3s.io | sh -s - --node-external-ip=Server公網地址 --flannel-backend=wireguard-native 

中國用戶,可以使用以下方法加速安裝:

# 局域網方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
# 多雲安裝方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn  sh -s - --node-external-ip=Server公網地址 --flannel-backend=wireguard-native --flannel-external-ip

運行此安裝後:

K3s 服務將被配置為在節點重啟後或進程崩潰或被殺死時自動重啟。
將安裝其他實用程序,包括 ```kubectl```、```crictl```、```ctr```、```k3s-killall.sh``` 和 ```k3s-uninstall.sh```。
kubeconfig 文件將寫入到 ```/etc/rancher/k3s/k3s.yaml```,由 K3s 安裝的 kubectl 將自動使用該文件。

安裝其他 Agent 節點#

安裝其他 Agent 節點並將它們添加到集群,請使用 K3S_URL 和 K3S_TOKEN 環境變量運行安裝腳本

# 局域網方案
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
# 多雲安裝方案
curl -sfL https://get.k3s.io | K3S_URL=https://Server公網地址:6443 K3S_TOKEN=mynodetoken sh -s - --node-external-ip=Agent公網地址
# 局域網方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
# 多雲安裝方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://Server公網地址:6443 K3S_TOKEN=mynodetoken sh -s - --node-external-ip=Agent公網地址

備註:
K3S_URL 參數會導致安裝程序將 K3s 配置為 Agent 而不是 Server。K3s Agent 將註冊到在 URL 上監聽的 K3s Server。K3S_TOKEN 使用的值存儲在 Server 節點上的 /var/lib/rancher/k3s/server/node-token 中。
每台主機必須具有唯一的主機名。如果你的計算機沒有唯一的主機名,請傳遞 K3S_NODE_NAME 環境變量,並為每個節點提供一個有效且唯一的主機名。

在本機訪問 k3s 集群#

安裝 kubectl

brew install kubectl

複製 Server 中 /etc/rancher/k3s/k3s.yaml 的內容

寫入本機的~/.kube/config文件.

參考 scp 複製指令:

scp server:/etc/rancher/k3s/k3s.yaml ~/.kube/config

測試指令#

查看節點狀態:

$ kubectl get node
NAME            STATUS   ROLES                  AGE   VERSION
vm-4-10-debian             Ready    <none>      35m   v1.27.6+k3s1
vm-4-9-debian   Ready    control-plane,master   39m   v1.27.6+k3s1

檢查跨網通訊:

$ kubectl get pod -A -o wide
NAMESPACE     NAME                                     READY   STATUS      RESTARTS   AGE   IP          NODE            NOMINATED NODE   READINESS GATES
kube-system   local-path-provisioner-957fdf8bc-gcgj4   1/1     Running     0          38m   10.42.0.5   vm-4-9-debian   <none>           <none>
kube-system   coredns-77ccd57875-vsxmt                 1/1     Running     0          38m   10.42.0.6   vm-4-9-debian   <none>           <none>
kube-system   helm-install-traefik-crd-sv9jh           0/1     Completed   0          38m   10.42.0.4   vm-4-9-debian   <none>           <none>
kube-system   metrics-server-5f8b4ffd8-zd4db           1/1     Running     0          38m   10.42.0.3   vm-4-9-debian   <none>           <none>
kube-system   helm-install-traefik-jp8sk               0/1     Completed   2          38m   10.42.0.2   vm-4-9-debian   <none>           <none>
kube-system   svclb-traefik-0782c5d1-wr5kd             2/2     Running     0          37m   10.42.0.7   vm-4-9-debian   <none>           <none>
kube-system   traefik-64f55bb67d-4lr2g                 1/1     Running     0          37m   10.42.0.8   vm-4-9-debian   <none>           <none>
kube-system   svclb-traefik-0782c5d1-444jv             2/2     Running     0          34m   10.42.1.2   vm-4-10-debian  <none>           <none>

查看節點資源使用情況:

$ kubectl top node
NAME            CPU(cores)   CPU%        MEMORY(bytes)   MEMORY%     
vm-4-9-debian   24m          2%          1369Mi          69%         
vm-4-10-debian             <unknown>    <unknown>   <unknown>       <unknown> 

查看 POD 資源使用情況:

$ kubectl top pod -A
NAMESPACE     NAME                                     CPU(cores)   MEMORY(bytes)   
kube-system   coredns-77ccd57875-vsxmt                 1m           20Mi            
kube-system   local-path-provisioner-957fdf8bc-gcgj4   1m           14Mi            
kube-system   metrics-server-5f8b4ffd8-zd4db           3m           24Mi            
kube-system   svclb-traefik-0782c5d1-wr5kd             0m           0Mi             
kube-system   traefik-64f55bb67d-4lr2g                 1m           33Mi

到此 k3s 集群部署完成, 如果有更多的主機,可以重複 agent 的配置步驟進行添加。

K3s Server 節點的入站規則#

協議端口目標描述
TCP2379-2380ServersServers只有具有嵌入式 etcd 的 HA 需要
TCP6443AgentsServersK3s supervisor 和 Kubernetes API Server
UDP8472所有節點所有節點只有 Flannel VXLAN 需要
TCP10250所有節點所有節點Kubelet 指標
UDP51820所有節點所有節點只有使用 IPv4 的 Flannel Wireguard 才需要
UDP51821所有節點所有節點只有使用 IPv6 的 Flannel Wireguard 才需要

所有出站流量通常都是允許的。

參考:#

快速入門指南

嵌入式 k3s 多雲解決方案

K3s 快速入門指南:構建多雲環境下的 K3S 集群

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。