ตัวจัดการตัวควบคุมคลาวด์ Hetzner Cloud ผสานรวมคลัสเตอร์ Kubernetes ของคุณเข้ากับ Hetzner Cloud & Robot API
Node
ของคุณด้วยข้อมูลเกี่ยวกับเซิร์ฟเวอร์จาก Cloud & Robot APINode
เก่าเมื่อเซิร์ฟเวอร์ถูกลบใน APItype: 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
flag ให้กับ 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
กำหนดค่า 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
แพทช์การปรับใช้ผ้าสักหลาดเพื่อทนต่อมลทิน 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
โปรดไปที่เอกสารประกอบการสนับสนุน Deployment with Networks
หากคุณจัดการเครือข่ายด้วยตัวเอง อาจยังจำเป็นต้องแจ้งให้ CCM ทราบเกี่ยวกับเครือข่ายส่วนตัว คุณสามารถทำได้โดยการเพิ่มตัวแปรสภาพแวดล้อมด้วยชื่อเครือข่าย/ID ในการปรับใช้ CCM
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 ของเรา นี่ไม่ได้หมายความว่า 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 | เวอร์ชัน 1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm-networks.yaml |
1.26 | เวอร์ชัน 1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1.25 | เวอร์ชัน 1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1.24 | เวอร์ชัน 1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm-networks.yaml |
1.23 | เวอร์ชัน 1.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 | เวอร์ชัน 1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm.yaml |
1.26 | เวอร์ชัน 1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1.25 | เวอร์ชัน 1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1.24 | เวอร์ชัน 1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm.yaml |
1.23 | เวอร์ชัน 1.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
หากคุณต้องการใช้งานการสนับสนุน Robot คุณต้องทำการเปลี่ยนแปลงการตั้งค่าข้างต้น
สิ่งนี้กำหนดให้คุณต้องมีเซิร์ฟเวอร์โรบ็อตในบัญชีเดียวกับที่คุณใช้ในการพัฒนา เซิร์ฟเวอร์จะต้องได้รับการตั้งค่าด้วย 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