El administrador-controlador de nube de Hetzner Cloud integra su clúster de Kubernetes con las API de Hetzner Cloud & Robot.
Node
con información sobre el servidor de la API Cloud & Robot.Node
obsoletos cuando el servidor se elimina en la API.type: LoadBalancer
y crea Hetzner Cloud Load Balancers para ellos, agrega nodos de Kubernetes como objetivos para el Load Balancer.Lea más sobre los controladores de la nube en la documentación de 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
Este ejemplo de implementación utiliza kubeadm
para iniciar un clúster de Kubernetes, con franela como agente de red superpuesto. No dude en adaptar los pasos a su método preferido para instalar Kubernetes.
Estas instrucciones de implementación están diseñadas para guiar la instalación de hcloud-cloud-controller-manager
y de ninguna manera son un tutorial detallado sobre la configuración de clústeres de Kubernetes. Se requieren conocimientos previos sobre los componentes involucrados.
Consulte la guía de creación de clústeres de kubeadm, que estas instrucciones pretenden complementar y la documentación de kubeadm.
El administrador del controlador de la nube agrega las etiquetas cuando se agrega un nodo al clúster. Para las versiones actuales de Kubernetes, esto significa que tenemos que agregar el indicador --cloud-provider=external
al kubelet
. La forma de hacer esto depende de su distribución de Kubernetes. Con kubeadm
puede configurarlo en la configuración de kubeadm ( nodeRegistration.kubeletExtraArgs
) o mediante una unidad directa de systemd /etc/systemd/system/kubelet.service.d/20-hcloud.conf
:
[Service]
Environment = " KUBELET_EXTRA_ARGS=--cloud-provider=external "
Nota: el indicador --cloud-provider
está obsoleto desde K8S 1.19. Verá un mensaje de registro sobre esto. Por ahora (v1.31) todavía es necesario.
Ahora se puede inicializar el plano de control:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Configure kubectl para conectarse al 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
Implemente el complemento CNI de franela:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
Parche la implementación de franela para tolerar la contaminación 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"}}] '
Cree un secreto que contenga su token API de Hetzner Cloud.
kubectl -n kube-system create secret generic hcloud --from-literal=token= < hcloud API token >
Implementar hcloud-cloud-controller-manager
Usando Helm (recomendado):
helm repo add hcloud https://charts.hetzner.cloud
helm repo update hcloud
helm install hccm hcloud/hcloud-cloud-controller-manager -n kube-system
Consulte el archivo README del gráfico de timón para obtener más información.
Método de instalación heredado :
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
Cuando utiliza Cloud Controller Manager con soporte de redes, el CCM está a favor de asignar las IP (y configurar el enrutamiento) (Documentos: https://kubernetes.io/docs/concepts/architecture/cloud-controller/#route- controlador). El complemento CNI que usa debe ser compatible con esta funcionalidad nativa de k8s (Cilium lo hace, no sé sobre Calico y WeaveNet), por lo que básicamente usa Hetzner Cloud Networks como pila de red subyacente.
Cuando usa CCM sin soporte de redes, simplemente desactiva la parte RouteController, todas las demás partes funcionan completamente igual. Entonces sólo el CNI se encarga de hacer que todo el networking sea un stack. El uso de CCM con soporte de redes tiene la ventaja de que su nodo está conectado a una red privada, por lo que el nodo no necesita cifrar las conexiones y usted tiene un poco menos de sobrecarga operativa ya que no necesita administrar la red.
Si desea utilizar la función Hetzner Cloud Networks
, diríjase a la documentación de soporte de Implementación con redes.
Si administra la red usted mismo, es posible que aún sea necesario informar al CCM sobre las redes privadas. Puede hacer esto agregando la variable de entorno con el nombre/ID de la red en la implementación de CCM.
env:
- name: HCLOUD_NETWORK
valueFrom:
secretKeyRef:
name: hcloud
key: network
También debe agregar el nombre/ID de la red al secreto: kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token> --from-literal=network=<hcloud Network_ID_or_Name>
.
Si kube-proxy
se ejecuta en modo IPVS, el manifiesto Service
debe tener la anotación load-balancer.hetzner.cloud/hostname
donde el FQDN se resuelve en la IP de HCloud LoadBalancer.
Ver #212
Nuestro objetivo es admitir las tres últimas versiones de Kubernetes. Cuando una versión de Kubernetes está marcada como End Of Life , dejaremos de brindarle soporte y eliminaremos la versión de nuestras pruebas de CI. Esto no significa necesariamente que Cloud Controller Manager todavía no funcione con esta versión. No solucionaremos errores relacionados únicamente con una versión no compatible.
Versiones actuales de Kubernetes: https://kubernetes.io/releases/
Kubernetes | Administrador del controlador de la nube | Archivo de implementación |
---|---|---|
1.31 | el último | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.30 | el último | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.29 | el último | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.28 | el último | 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 |
Kubernetes | Administrador del controlador de la nube | Archivo de implementación |
---|---|---|
1.31 | el último | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.30 | el último | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.29 | el último | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.28 | el último | 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 |
Para configurar un entorno de desarrollo, asegúrese de haber instalado las siguientes herramientas:
HCLOUD_TOKEN
en su sesión de shell. Advertencia
El entorno de desarrollo se ejecuta en servidores Hetzner Cloud, lo que generará costes.
make -C dev up
source dev/files/env.sh
kubectl get nodes -o wide
skaffold dev
Al cambiar el código, skaffold reconstruirá la imagen, la volverá a implementar e imprimirá todos los registros.
make -C dev down
Para ejecutar las pruebas unitarias, asegúrese de haber instalado las siguientes herramientas:
go test ./...
Antes de ejecutar las pruebas e2e, asegúrese de seguir los pasos de Configuración de un entorno de desarrollo.
source dev/files/env.sh
go test ./tests/e2e -tags e2e -v
Si desea trabajar en la compatibilidad con Robot, debe realizar algunos cambios en la configuración anterior.
Esto requiere que tengas un Robot Server en la misma cuenta que utilizas para el desarrollo. El servidor debe configurarse con Ansible Playbook dev/robot/install.yml
y configurarse en dev/robot/install.yml
.
export ROBOT_ENABLED=true
export ROBOT_USER= < Your Robot User >
export ROBOT_PASSWORD= < Your Robot Password >
Continúe con la configuración del entorno hasta llegar al paso skaffold
. En su lugar, ejecute skaffold dev --profile=robot
.
Tenemos otro conjunto de pruebas para Robot. Puedes ejecutarlos con:
go test ./tests/e2e -tags e2e,robot -v
Licencia Apache, Versión 2.0