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