نشر مجموعة Kubernetes HA على Baremetal باستخدام Kubeadm و Keepalived (دليل بسيط)

هذه المقالة عبارة عن تفسير مجاني لكتاب "إنشاء الكتل المتاحة بشكل كبير" مع البرنامج التعليمي kubeadm لعقد التحكم في مستوى التحكم . لا أحب اللغة المعقدة والأمثلة المستخدمة فيها ، لذلك كتبت دليلي.


إذا كانت لديك أي أسئلة أو كانت غير واضحة ، فاستشر الوثائق الرسمية أو اسأل Google . جميع المراحل موصوفة هنا بأبسط أشكالها وضبطها.


بيانات الإدخال


لدينا 3 عقد:


  • العقدة 1 (10.9.8.11)
  • العقدة 2 (10.9.8.12)
  • العقدة 3 (10.9.8.13)

سننشئ عنوان IP واحدًا يتحمله الخطأ:


  • 10.9.8.10

ثم قم بتثبيت مجموعة etcd و Kubernetes عليها.


إعداد الموازن


بادئ ذي بدء ، نحن بحاجة إلى تثبيت Keepalived على العقد الثلاث:


apt-get -y install keepalived 

الآن نكتب config /etc/keepalived/keepalived.conf :


 vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 100 advert_int 1 nopreempt authentication { auth_type AH auth_pass iech6peeBu6Thoo8xaih } virtual_ipaddress { 10.9.8.10 } } 

نقوم بتنشيط وتشغيل Keepalived على جميع العقد الثلاث:


 systemctl start keepalived systemctl enable keepalived 

يمكننا الآن التحقق من أن إحدى العقد تلقت العنوان 10.9.8.10 على واجهة eth0 .


نشر مجموعة Kubernetes


UPD: تمت كتابة هذه المقالة لـ v1.12 وعلى الرغم من أنها تم تكييفها لـ v1.13 ، إلا أن إجراء نشر مجموعة يبدو الآن أكثر بساطة ومنطقية.
انظر إلى هذا الدليل الأبسط .

في الوقت الحالي يمكن أن يكون كل شيء أسهل بكثير الآن


تأكد من تثبيت أحدث حزم Kubernetes على جميع العقد:


 apt-get -y install kubeadm kubelet kubectl 

قم أيضًا بإيقاف برنامج Keepalived في جميع العقد باستثناء الأخيرة .


 systemctl stop keepalived 

الملاحظة الأولى


الآن سننشئ تكوينات لـ kubeadm (لكل عقدة رئيسية نحتاج إلى تكوين منفصل):


 CLUSTER_IP=10.9.8.10 NODES=(node1 node2 node3) IPS=(10.9.8.11 10.9.8.12 10.9.8.13) POD_SUBNET="192.168.0.0/16" for i in "${!NODES[@]}"; do HOST=${IPS[$i]} NAME=${NODES[$i]} INITIAL_CLUSTER=$( for j in "${!NODES[@]}"; do echo "${NODES[$j]}=https://${IPS[$j]}:2380" done | xargs | tr ' ' , ) cat > kubeadm-config-${NODES[$i]}.yaml <<EOT apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: stable apiServer: certSANs: - "${CLUSTER_IP}" controlPlaneEndpoint: "${CLUSTER_IP}:6443" etcd: local: extraArgs: initial-cluster: "${INITIAL_CLUSTER}" initial-cluster-state: new name: ${NODES[$i]} listen-peer-urls: "https://${IPS[$i]}:2380" listen-client-urls: "https://127.0.0.1:2379,https://${IPS[$i]}:2379" advertise-client-urls: "https://${IPS[$i]}:2379" initial-advertise-peer-urls: "https://${IPS[$i]}:2380" serverCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" peerCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" networking: podSubnet: "${POD_SUBNET}" EOT done 

نبدأ etcd على العقدة الأولى ، وننشئ الشهادات وتكوين المشرف


 kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local $kubeadm init phase kubeconfig admin systemctl start kubelet 

نقوم بنسخ الشهادات التي تم إنشاؤها وتكوينات kubeadm إلى عقد مستوى التحكم المتبقية.


 NODES="node2 node3" CERTS=$(find /etc/kubernetes/pki/ -maxdepth 1 -name '*ca.*' -o -name '*sa.*') ETCD_CERTS=$(find /etc/kubernetes/pki/etcd/ -maxdepth 1 -name '*ca.*') for NODE in $NODES; do ssh $NODE mkdir -p /etc/kubernetes/pki/etcd scp $CERTS $NODE:/etc/kubernetes/pki/ scp $ETCD_CERTS $NODE:/etc/kubernetes/pki/etcd/ scp /etc/kubernetes/admin.conf $NODE:/etc/kubernetes scp kubeadm-config-$NODE.yaml $NODE: done 

العقدة الثانية


نبدأ etcd على العقدة الثانية:


 kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local systemctl start kubelet 

العقدة الثالثة


نبدأ سيد Kubernetes مع etcd على العقدة الأخيرة.


(تأكد من تعيين IP الموازن ويشير إلى هذه العقدة)


 kubeadm init --config kubeadm-config-${HOSTNAME}.yaml 

العقد الأول والثاني


الآن يمكننا بدء Kubernetes الرئيسي في أول عقدتين:


 kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase kubeconfig all $kubeadm init phase control-plane all $kubeadm init phase mark-control-plane $kubeadm init phase upload-config kubeadm 

وأيضًا تشغيل برنامج Keepalived:


 systemctl start keepalived 

Source: https://habr.com/ru/post/ar427941/


All Articles