يقوم مدير وحدة التحكم السحابية Hetzner Cloud بدمج مجموعة Kubernetes الخاصة بك مع واجهات برمجة تطبيقات Hetzner Cloud & Robot.
Node
الخاصة بك بمعلومات حول الخادم من Cloud & Robot API.Node
التي لا معنى لها عند حذف الخادم في واجهة برمجة التطبيقات.type: LoadBalancer
وإنشاء Hetzner Cloud Load Balancers لهم، وإضافة عقد 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. سترى رسالة سجل بخصوص هذا. في الوقت الحالي (الإصدار 1.31) لا يزال مطلوبًا.
الآن يمكن تهيئة مستوى التحكم:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
قم بتكوين kubectl للاتصال بـ kube-apserver:
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 repo add hcloud https://charts.hetzner.cloud
helm repo update hcloud
helm install hccm hcloud/hcloud-cloud-controller-manager -n kube-system
راجع README لمخطط Helm لمزيد من المعلومات.
طريقة التثبيت القديمة :
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
عند استخدام Cloud Controller Manager مع دعم الشبكات، فإن CCM يفضل تخصيص عناوين IP (وإعداد التوجيه) (Docs: 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.
env:
- name: HCLOUD_NETWORK
valueFrom:
secretKeyRef:
name: hcloud
key: network
تحتاج أيضًا إلى إضافة اسم/معرف الشبكة إلى السر: 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، فسنتوقف عن دعمه ونزيل الإصدار من اختبارات 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
في جلسة Shell الخاصة بك. تحذير
تعمل بيئة التطوير على خوادم 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
ترخيص أباتشي، الإصدار 2.0