Hetzner Cloud 클라우드 컨트롤러 관리자는 Kubernetes 클러스터를 Hetzner Cloud & Robot API와 통합합니다.
Node
객체를 업데이트합니다.Node
개체를 정리합니다.type: LoadBalancer
인 서비스를 감시하고 이를 위해 Hetzner Cloud Load Balancer를 생성하고 Kubernetes 노드를 Load Balancer의 대상으로 추가합니다.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 클러스터를 부트스트랩합니다. 원하는 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 "
참고: --cloud-provider
플래그는 K8S 1.19부터 더 이상 사용되지 않습니다. 이에 대한 로그 메시지가 표시됩니다. 현재(v1.31)에는 여전히 필요합니다.
이제 제어 평면을 초기화할 수 있습니다.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
kube-apiserver에 연결하도록 kubectl을 구성합니다.
mkdir -p $HOME /.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config
sudo chown $( id -u ) : $( id -g ) $HOME /.kube/config
플란넬 CNI 플러그인을 배포합니다.
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
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 차트 README를 참조하세요.
기존 설치 방법 :
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
네트워크 지원과 함께 Cloud Controller Manager를 사용하는 경우 CCM은 IP 할당(및 라우팅 설정)을 선호합니다(문서: https://kubernetes.io/docs/concepts/architecture/cloud-controller/#route- 제어 장치). 사용하는 CNI 플러그인은 이 k8s 기본 기능을 지원해야 하므로(Cilium이 지원하지만 Calico 및 WeaveNet에 대해서는 잘 모르겠습니다) 기본적으로 Hetzner Cloud Networks를 기본 네트워킹 스택으로 사용합니다.
네트워크 지원 없이 CCM을 사용하면 RouteController 부분만 비활성화되고 다른 모든 부분은 완전히 동일하게 작동합니다. 그런 다음 CNI만이 모든 네트워킹 스택을 만드는 일을 담당합니다. 네트워크 지원과 함께 CCM을 사용하면 노드가 개인 네트워크에 연결되어 노드가 연결을 암호화할 필요가 없고 네트워크를 관리할 필요가 없으므로 운영 오버헤드가 약간 줄어든다는 이점이 있습니다.
Hetzner Cloud 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
매니페스트에는 FQDN이 HCloud LoadBalancer IP로 확인되는 load-balancer.hetzner.cloud/hostname
주석이 있어야 합니다.
#212 참조
우리는 Kubernetes의 최신 세 가지 버전을 지원하는 것을 목표로 합니다. Kubernetes 버전이 End Of Life 로 표시되면 해당 버전에 대한 지원을 중단하고 CI 테스트에서 해당 버전을 제거합니다. 이는 반드시 Cloud Controller Manager가 이 버전에서 작동하지 않는다는 의미는 아닙니다. 지원되지 않는 버전에만 관련된 버그는 수정하지 않습니다.
현재 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