Manajer pengontrol cloud Hetzner Cloud mengintegrasikan klaster Kubernetes Anda dengan API Hetzner Cloud & Robot.
Node
Anda dengan informasi tentang server dari Cloud & Robot API.Node
yang basi saat server dihapus di API.type: LoadBalancer
dan membuat Hetzner Cloud Load Balancer untuknya, menambahkan Node Kubernetes sebagai target untuk Load Balancer.Baca selengkapnya tentang pengontrol cloud di dokumentasi 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
Contoh penerapan ini menggunakan kubeadm
untuk mem-bootstrap klaster Kubernetes, dengan flanel sebagai agen jaringan overlay. Jangan ragu untuk menyesuaikan langkah-langkah tersebut dengan metode instalasi Kubernetes pilihan Anda.
Petunjuk penerapan ini dirancang untuk memandu instalasi hcloud-cloud-controller-manager
dan sama sekali bukan tutorial mendalam tentang pengaturan cluster Kubernetes. Pengetahuan sebelumnya tentang komponen yang terlibat diperlukan.
Silakan lihat panduan pembuatan klaster kubeadm, yang mana instruksi ini dimaksudkan untuk menambah dan dokumentasi kubeadm.
Manajer pengontrol cloud menambahkan label ketika sebuah node ditambahkan ke klaster. Untuk versi Kubernetes saat ini, ini berarti kita harus menambahkan flag --cloud-provider=external
ke kubelet
. Cara Anda melakukan ini bergantung pada distribusi Kubernetes Anda. Dengan kubeadm
kamu dapat mengaturnya di konfigurasi kubeadm ( nodeRegistration.kubeletExtraArgs
) atau melalui unit drop-in systemd /etc/systemd/system/kubelet.service.d/20-hcloud.conf
:
[Service]
Environment = " KUBELET_EXTRA_ARGS=--cloud-provider=external "
Catatan: flag --cloud-provider
tidak digunakan lagi sejak K8S 1.19. Anda akan melihat pesan log mengenai hal ini. Untuk saat ini (v1.31) masih diperlukan.
Sekarang bidang kendali dapat diinisialisasi:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Konfigurasikan kubectl untuk terhubung ke 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
Terapkan plugin flanel CNI:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
Menambal penerapan kain flanel untuk menoleransi noda 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"}}] '
Buat rahasia yang berisi token Hetzner Cloud API Anda.
kubectl -n kube-system create secret generic hcloud --from-literal=token= < hcloud API token >
Terapkan hcloud-cloud-controller-manager
Menggunakan Helm (disarankan):
helm repo add hcloud https://charts.hetzner.cloud
helm repo update hcloud
helm install hccm hcloud/hcloud-cloud-controller-manager -n kube-system
Lihat bagan Helm README untuk info lebih lanjut.
Metode instalasi lama :
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
Saat Anda menggunakan Cloud Controller Manager dengan dukungan jaringan, CCM mendukung pengalokasian IP (& mengatur perutean) (Dokumen: https://kubernetes.io/docs/concepts/architecture/cloud-controller/#route- pengontrol). Plugin CNI yang Anda gunakan perlu mendukung fungsionalitas asli k8s ini (Cilium melakukannya, saya tidak tahu tentang Calico & WeaveNet), jadi pada dasarnya Anda menggunakan Hetzner Cloud Networks sebagai tumpukan jaringan yang mendasarinya.
Saat Anda menggunakan CCM tanpa dukungan Jaringan, ia hanya menonaktifkan bagian RouteController, semua bagian lainnya bekerja dengan cara yang sama. Kemudian hanya CNI yang bertugas membuat semua tumpukan jaringan. Menggunakan CCM dengan dukungan Jaringan memiliki keuntungan karena node Anda terhubung ke jaringan pribadi sehingga node tidak perlu mengenkripsi koneksi dan Anda memiliki overhead operasional yang lebih sedikit karena Anda tidak perlu mengelola Jaringan.
Jika Anda ingin menggunakan Fitur Hetzner Cloud Networks
, buka dokumentasi dukungan Penerapan dengan Jaringan.
Jika Anda mengelola jaringan sendiri, mungkin Anda masih perlu memberi tahu CCM tentang jaringan pribadi. Anda dapat melakukan ini dengan menambahkan variabel lingkungan dengan nama/ID jaringan dalam penerapan CCM.
env:
- name: HCLOUD_NETWORK
valueFrom:
secretKeyRef:
name: hcloud
key: network
Anda juga perlu menambahkan nama/ID jaringan ke rahasia: kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token> --from-literal=network=<hcloud Network_ID_or_Name>
.
Jika kube-proxy
dijalankan dalam mode IPVS, manifes Service
harus memiliki anotasi load-balancer.hetzner.cloud/hostname
di mana FQDN memutuskan ke IP HCloud LoadBalancer.
Lihat #212
Kami bertujuan untuk mendukung tiga versi terbaru Kubernetes. Ketika versi Kubernetes ditandai sebagai End Of Life , kami akan menghentikan dukungan untuk versi tersebut dan menghapus versi tersebut dari pengujian CI kami. Ini tidak berarti bahwa Cloud Controller Manager tidak lagi berfungsi dengan versi ini. Kami tidak akan memperbaiki bug yang hanya terkait dengan versi yang tidak didukung.
Rilis Kubernetes Saat Ini: https://kubernetes.io/releases/
Kubernet | Manajer Pengontrol Cloud | File Penerapan |
---|---|---|
1.31 | terbaru | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.30 | terbaru | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.29 | terbaru | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.28 | terbaru | 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 |
Kubernet | Manajer Pengontrol Cloud | File Penerapan |
---|---|---|
1.31 | terbaru | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.30 | terbaru | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.29 | terbaru | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.28 | terbaru | 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 |
Untuk menyiapkan lingkungan pengembangan, pastikan Anda menginstal alat berikut:
HCLOUD_TOKEN
di sesi shell Anda. Peringatan
Lingkungan pengembangan berjalan pada server Hetzner Cloud yang akan menimbulkan biaya.
make -C dev up
source dev/files/env.sh
kubectl get nodes -o wide
skaffold dev
Saat kode diubah, skaffold akan membangun kembali gambar, menerapkan ulang, dan mencetak semua log.
make -C dev down
Untuk menjalankan pengujian unit, pastikan Anda menginstal alat berikut:
go test ./...
Sebelum menjalankan pengujian e2e, pastikan Anda mengikuti langkah-langkah Menyiapkan lingkungan pengembangan.
source dev/files/env.sh
go test ./tests/e2e -tags e2e -v
Jika Anda ingin bekerja pada dukungan Robot, Anda perlu melakukan beberapa perubahan pada pengaturan di atas.
Ini mengharuskan Anda memiliki Server Robot di akun yang sama dengan yang Anda gunakan untuk pengembangan. Server perlu diatur dengan Ansible Playbook dev/robot/install.yml
dan dikonfigurasi di dev/robot/install.yml
.
export ROBOT_ENABLED=true
export ROBOT_USER= < Your Robot User >
export ROBOT_PASSWORD= < Your Robot Password >
Lanjutkan pengaturan lingkungan hingga Anda mencapai langkah skaffold
. Jalankan skaffold dev --profile=robot
sebagai gantinya.
Kami memiliki rangkaian pengujian lain untuk Robot. Anda dapat menjalankannya dengan:
go test ./tests/e2e -tags e2e,robot -v
Lisensi Apache, Versi 2.0