O gerenciador de nuvem Hetzner Cloud integra seu cluster Kubernetes com as APIs Hetzner Cloud & Robot.
Node
com informações sobre o servidor da API Cloud & Robot.Node
obsoletos quando o servidor é excluído na API.type: LoadBalancer
e cria Hetzner Cloud Load Balancers para eles, adiciona nós Kubernetes como alvos para o Load Balancer.Leia mais sobre controladores de nuvem na documentação do 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 exemplo de implantação usa kubeadm
para inicializar um cluster Kubernetes, com flanela como agente de rede de sobreposição. Sinta-se à vontade para adaptar as etapas ao seu método preferido de instalação do Kubernetes.
Estas instruções de implantação foram projetadas para orientar a instalação do hcloud-cloud-controller-manager
e não são de forma alguma um tutorial detalhado de configuração de clusters Kubernetes. É necessário conhecimento prévio sobre os componentes envolvidos.
Consulte o guia de criação de cluster kubeadm, que estas instruções pretendem aumentar e a documentação do kubeadm.
O gerenciador do controlador de nuvem adiciona os rótulos quando um nó é incluído no cluster. Para as versões atuais do Kubernetes, isso significa que temos que adicionar o sinalizador --cloud-provider=external
ao kubelet
. Como você faz isso depende da sua distribuição do Kubernetes. Com kubeadm
você pode configurá-lo na configuração do kubeadm ( nodeRegistration.kubeletExtraArgs
) ou por meio de uma unidade drop-in do systemd /etc/systemd/system/kubelet.service.d/20-hcloud.conf
:
[Service]
Environment = " KUBELET_EXTRA_ARGS=--cloud-provider=external "
Nota: o sinalizador --cloud-provider
está obsoleto desde K8S 1.19. Você verá uma mensagem de log sobre isso. Por enquanto (v1.31) ainda é necessário.
Agora o plano de controle pode ser inicializado:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Configure o kubectl para se conectar ao 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
Implante o plugin CNI de flanela:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
Corrija a implantação de flanela para tolerar a contaminação 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"}}] '
Crie um segredo contendo seu token da API Hetzner Cloud.
kubectl -n kube-system create secret generic hcloud --from-literal=token= < hcloud API token >
Implantar 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 o README do gráfico Helm para obter mais informações.
Método de instalação legado :
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
Quando você usa o Cloud Controller Manager com suporte de redes, o CCM é a favor da alocação dos IPs (e configuração do roteamento) (Docs: https://kubernetes.io/docs/concepts/architecture/cloud-controller/#route- controlador). O plugin CNI que você usa precisa suportar essa funcionalidade nativa do k8s (Cilium faz isso, não sei sobre Calico e WeaveNet), então basicamente você usa Hetzner Cloud Networks como a pilha de rede subjacente.
Quando você usa o CCM sem suporte de redes, ele apenas desativa a parte RouteController, todas as outras partes funcionam completamente da mesma forma. Depois, só o CNI fica encarregado de fazer todas as coisas da pilha de rede. Usar o suporte CCM com redes tem a vantagem de que seu nó está conectado a uma rede privada, de modo que o nó não precisa criptografar as conexões e você tem um pouco menos de sobrecarga operacional, pois não precisa gerenciar a rede.
Se você quiser usar o recurso Hetzner Cloud Networks
, acesse a documentação de suporte de implantação com redes.
Se você mesmo gerencia a rede, ainda poderá ser necessário informar o CCM sobre redes privadas. Você pode fazer isso adicionando a variável de ambiente com o nome/ID da rede na implantação do CCM.
env:
- name: HCLOUD_NETWORK
valueFrom:
secretKeyRef:
name: hcloud
key: network
Você também precisa adicionar o nome/ID da rede ao segredo: kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token> --from-literal=network=<hcloud Network_ID_or_Name>
.
Se kube-proxy
for executado no modo IPVS, o manifesto Service
precisará ter a anotação load-balancer.hetzner.cloud/hostname
onde o FQDN resolve para o IP do HCloud LoadBalancer.
Veja #212
Nosso objetivo é oferecer suporte às três versões mais recentes do Kubernetes. Quando uma versão do Kubernetes for marcada como End Of Life , interromperemos o suporte para ela e removeremos a versão de nossos testes de CI. Isso não significa necessariamente que o Cloud Controller Manager ainda não funcione com esta versão. Não corrigiremos bugs relacionados apenas a uma versão não suportada.
Versões atuais do Kubernetes: https://kubernetes.io/releases/
Kubernetes | Gerente de controlador de nuvem | Arquivo de implantação |
---|---|---|
1.31 | mais recente | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
13h30 | mais recente | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1,29 | mais recente | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1,28 | mais recente | 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 | Gerente de controlador de nuvem | Arquivo de implantação |
---|---|---|
1.31 | mais recente | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
13h30 | mais recente | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1,29 | mais recente | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1,28 | mais recente | 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 um ambiente de desenvolvimento, certifique-se de instalar as seguintes ferramentas:
HCLOUD_TOKEN
na sua sessão shell. Aviso
O ambiente de desenvolvimento é executado em servidores Hetzner Cloud, o que induzirá custos.
make -C dev up
source dev/files/env.sh
kubectl get nodes -o wide
skaffold dev
Na alteração do código, o skaffold irá reconstruir a imagem, reimplantá-la e imprimir todos os logs.
make -C dev down
Para executar os testes de unidade, certifique-se de instalar as seguintes ferramentas:
go test ./...
Antes de executar os testes e2e, certifique-se de seguir as etapas de configuração de um ambiente de desenvolvimento.
source dev/files/env.sh
go test ./tests/e2e -tags e2e -v
Se quiser trabalhar no suporte do Robô, você precisará fazer algumas alterações na configuração acima.
Isso requer que você tenha um Robot Server na mesma conta usada para o desenvolvimento. O servidor precisa ser configurado com o Ansible Playbook dev/robot/install.yml
e configurado em dev/robot/install.yml
.
export ROBOT_ENABLED=true
export ROBOT_USER= < Your Robot User >
export ROBOT_PASSWORD= < Your Robot Password >
Continue com a configuração do ambiente até chegar à etapa skaffold
. Em vez disso, execute skaffold dev --profile=robot
.
Temos outro conjunto de testes para Robot. Você pode executá-los com:
go test ./tests/e2e -tags e2e,robot -v
Licença Apache, versão 2.0