Hetzner Cloud 雲端控制器管理器將 Kubernetes 叢集與 Hetzner Cloud 和機器人 API 整合。
Node
物件。Node
物件。type: LoadBalancer
服務並為其建立 Hetzner 雲端負載平衡器,新增 Kubernetes 節點作為負載平衡器的目標。在 Kubernetes 文件中閱讀有關雲端控制器的更多資訊。
apiVersion : v1
kind : Node
metadata :
labels :
node.kubernetes.io/instance-type : cx22
topology.kubernetes.io/region : fsn1
topology.kubernetes.io/zone : fsn1-dc8
instance.hetzner.cloud/provided-by : cloud
name : node
spec :
podCIDR : 10.244.0.0/24
providerID : hcloud://123456 # <-- Hetzner Cloud Server ID
status :
addresses :
- address : node
type : Hostname
- address : 1.2.3.4 # <-- Hetzner Cloud Server public ipv4
type : ExternalIP
此部署範例使用kubeadm
引導 Kubernetes 集群,並使用 flannel 作為覆蓋網路代理。請隨意調整這些步驟以適應您安裝 Kubernetes 的首選方法。
這些部署說明旨在指導hcloud-cloud-controller-manager
的安裝,絕不是設定 Kubernetes 叢集的深入教學。需要有關所涉及組件的先前知識。
請參閱 kubeadm 叢集建立指南(這些說明旨在增強該指南)和 kubeadm 文件。
當節點新增到叢集時,雲端控制器管理器會新增標籤。對於目前的 Kubernetes 版本,這意味著我們必須將--cloud-provider=external
標誌加入kubelet
。如何執行此操作取決於您的 Kubernetes 發行版。使用kubeadm
您可以在 kubeadm 配置 ( nodeRegistration.kubeletExtraArgs
) 中設定它,也可以透過 systemd 插入單元/etc/systemd/system/kubelet.service.d/20-hcloud.conf
進行設定:
[Service]
Environment = " KUBELET_EXTRA_ARGS=--cloud-provider=external "
注意:自 K8S 1.19 起, --cloud-provider
標誌已被棄用。您將看到一條與此相關的日誌訊息。目前(v1.31)仍然需要它。
現在可以初始化控制平面:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
設定 kubectl 以連線到 kube-apiserver:
mkdir -p $HOME /.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config
sudo chown $( id -u ) : $( id -g ) $HOME /.kube/config
部署 flannel CNI 外掛:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
修補 flannel 部署以容忍uninitialized
污點:
kubectl -n kube-system patch ds kube-flannel-ds --type json -p ' [{"op":"add","path":"/spec/template/spec/tolerations/-","value":{"key":"node.cloudprovider.kubernetes.io/uninitialized","value":"true","effect":"NoSchedule"}}] '
建立包含您的 Hetzner Cloud API 令牌的機密。
kubectl -n kube-system create secret generic hcloud --from-literal=token= < hcloud API token >
部署hcloud-cloud-controller-manager
使用 Helm(推薦):
helm repo add hcloud https://charts.hetzner.cloud
helm repo update hcloud
helm install hccm hcloud/hcloud-cloud-controller-manager -n kube-system
有關更多信息,請參閱 Helm 圖表自述文件。
舊版安裝方法:
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
當您使用具有網路支援的雲端控制器管理器時,CCM 支援指派 IP(並設定路由)(文件:https://kubernetes.io/docs/concepts/architecture/cloud-controller/#route-控制器) 。您使用的 CNI 外掛程式需要支援此 k8s 本機功能(Cilium 可以,我不知道 Calico 和 WeaveNet),所以基本上您使用 Hetzner 雲端網路作為底層網路堆疊。
當您在沒有網路支援的情況下使用 CCM 時,它只會停用 RouteController 部分,所有其他部分的工作原理完全相同。然後,只有 CNI 負責建置所有網路堆疊。使用具有網路支援的 CCM 的好處是,您的節點連接到專用網絡,因此節點不需要加密連接,並且您的營運開銷會減少一些,因為您不需要管理網路。
如果您想使用 Hetzner 雲端Networks
功能,請參閱網路部門支援文件。
如果您自己管理網絡,可能仍需要讓 CCM 了解專用網絡。您可以透過在 CCM 部署中新增帶有網路名稱/ID 的環境變數來完成此操作。
env:
- name: HCLOUD_NETWORK
valueFrom:
secretKeyRef:
name: hcloud
key: network
您還需要將網路名稱/ID 新增至金鑰: kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token> --from-literal=network=<hcloud Network_ID_or_Name>
。
如果kube-proxy
在 IPVS 模式下執行,則Service
清單需要註解load-balancer.hetzner.cloud/hostname
,其中 FQDN 解析為 HCloud LoadBalancer IP。
參見#212
我們的目標是支援 Kubernetes 的最新三個版本。當 Kubernetes 版本被標記為End Of Life時,我們將停止對其提供支持,並從 CI 測試中刪除該版本。這並不一定意味著雲端控制器管理器仍不能與此版本搭配使用。我們不會修復僅與不支援的版本相關的錯誤。
目前 Kubernetes 版本:https://kubernetes.io/releases/
庫伯內斯 | 雲端控制器管理器 | 部署文件 |
---|---|---|
1.31 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.30 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.29 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.28 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.27 | v1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm-networks.yaml |
1.26 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1.25 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1.24 | v1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm-networks.yaml |
1.23 | v1.13.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.13.2/ccm-networks.yaml |
庫伯內斯 | 雲端控制器管理器 | 部署文件 |
---|---|---|
1.31 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.30 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.29 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.28 | 最新的 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.27 | v1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm.yaml |
1.26 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1.25 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1.24 | v1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm.yaml |
1.23 | v1.13.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.13.2/ccm.yaml |
若要設定開發環境,請確保安裝了以下工具:
HCLOUD_TOKEN
。 警告
開發環境運行在Hetzner Cloud伺服器上,這會產生成本。
make -C dev up
source dev/files/env.sh
kubectl get nodes -o wide
skaffold dev
當程式碼變更時,skaffold 將重建映像、重新部署並列印所有日誌。
make -C dev down
若要執行單元測試,請確保安裝了以下工具:
go test ./...
在執行 e2e 測試之前,請確保遵循設定開發環境步驟。
source dev/files/env.sh
go test ./tests/e2e -tags e2e -v
如果您想使用機器人支持,則需要對上述設定進行一些更改。
這要求您在用於開發的相同帳戶中擁有一個機器人伺服器。伺服器需要使用 Ansible Playbook dev/robot/install.yml
設定並在dev/robot/install.yml
中配置。
export ROBOT_ENABLED=true
export ROBOT_USER= < Your Robot User >
export ROBOT_PASSWORD= < Your Robot Password >
繼續環境設置,直到到達skaffold
步驟。改為執行skaffold dev --profile=robot
。
我們還有另一套機器人測試。您可以使用以下命令運行它們:
go test ./tests/e2e -tags e2e,robot -v
Apache 許可證,版本 2.0