نشر kubernetes HA مع الحاوية

مساء الخير عزيزي هبر! في 24 مايو 2018 ، تم نشر مقال بعنوان Kubernetes Containerd Integration Goes GA على مدونة Kubernetes الرسمية ، والتي تنص على أن تكامل الحاوية مع Kubernetes جاهز للإنتاج. أيضا ، نشر رجال من شركة Flant ترجمة للمقال إلى اللغة الروسية على مدونتهم ، مضيفين القليل من التوضيح عن أنفسهم. بعد قراءة وثائق المشروع على github ، قررت تجربة الحاوية على "بشرتي".
شركتنا لديها العديد من المشاريع في مرحلة "لا تزال بعيدة جدا عن الإنتاج". لذلك سيصبحون تجريبينا ؛ بالنسبة لهم ، قررنا محاولة نشر مجموعة تجاوز الفشل من Kubernetes باستخدام الحاوية ومعرفة ما إذا كانت هناك حياة بدون عامل إرساء.
إذا كنت مهتمًا برؤية كيف فعلنا ذلك وما جاء به ، مرحبًا بك في القط.
الوصف التخطيطي والنشر

عند نشر مجموعة ، كالمعتاد ، (كتبت عن هذا في مقال سابق
keepalived - تطبيقات VRRP (Virtual Router Redundancy Protocol) لنظام Linuxتقوم Keepalived بإنشاء IP افتراضي (VIRTIP) والذي "يشير" (ينشئ واجهة فرعية) إلى IP الخاص بأحد الأساتذة الثلاثة. يراقب البرنامج الخفي الذي يتم الاحتفاظ به حالة الماكينة ، وفي حالة حدوث عطل ، يستثني الخادم الفاشل من قائمة الخوادم النشطة عن طريق تحويل VIRTIP إلى IP الخاص بخادم آخر ، وفقًا "للوزن" المحدد عند تكوين الاحتفاظ به على كل خادم.
تتواصل شياطين Keepalived عبر VRRP ، وترسل رسائل بعضها البعض إلى العنوان 224.0.0.18.
إذا لم يقم الجار بإرسال رسالته ، فعندها يعتبر ميتاً. بمجرد أن يبدأ الخادم المعطل في إرسال رسائله إلى الشبكة ، يعود كل شيء إلى مكانه
نقوم بتكوين العمل مع خادم API على عقد kubernetes على النحو التالي.
بعد تثبيت المجموعة ، قم بتكوين kube-proxy ، قم بتغيير المنفذ من 6443 إلى 16443 (التفاصيل أدناه). على كل من الأساتذة ، يتم نشر nginx ، والذي يعمل بمثابة موازن تحميل ، ويستمع على المنفذ 16443 ويقوم بعمل المنبع من جميع الأساتذة الثلاثة على المنفذ 6443 (التفاصيل أدناه).
حقق هذا النظام زيادة في التسامح مع الخطأ باستخدام Keepalived ، وكذلك باستخدام nginx ، وتم تحقيق التوازن بين خوادم API على المعالجات.
في مقال سابق ، وصفت نشر nginx و etcd في عامل الميناء. ولكن في هذه الحالة ، ليس لدينا عامل إرساء ، لذلك سيعمل nginx و etcd محليًا على masternodes.
من الناحية النظرية ، سيكون من الممكن نشر nginx و etcd باستخدام الحاوية ، ولكن في حالة وجود أي مشاكل ، فإن هذا النهج سيعقد التشخيص ، لذلك قررنا عدم تجربته وتشغيله محليًا.
وصف خوادم للنشر:
الاسم | IP | الخدمات |
---|
VIRTIP | 172.26.133.160 | ------ |
kube-master01 | 172.26.133.161 | kubeadm ، kubelet ، kubectl ، etcd ، containerd ، nginx ، keepalived |
كوبي ماستر 02 | 172.26.133.162 | kubeadm ، kubelet ، kubectl ، etcd ، containerd ، nginx ، keepalived |
كوبي ماستر 03 | 172.26.133.163 | kubeadm ، kubelet ، kubectl ، etcd ، containerd ، nginx ، keepalived |
kube-node01 | 172.26.133.164 | kubeadm ، kubelet ، kubectl ، الحاوية |
عقدة كوبي 02 | 172.26.133.165 | kubeadm ، kubelet ، kubectl ، الحاوية |
عقدة كوبي 03 | 172.26.133.166 | kubeadm ، kubelet ، kubectl ، الحاوية |
قم بتثبيت kubeadm و kubelet و kubectl والحزم ذات الصلة
تعمل جميع الأوامر من الجذر
sudo -i
apt-get update && apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectl unzip tar apt-transport-https btrfs-tools libseccomp2 socat util-linux mc vim keepalived
تثبيت conteinerd

cd / wget https://storage.googleapis.com/cri-containerd-release/cri-containerd-1.1.0-rc.0.linux-amd64.tar.gz tar -xvf cri-containerd-1.1.0-rc.0.linux-amd64.tar.gz
تكوين تكوينات الحاوية
mkdir -p /etc/containerd nano /etc/containerd/config.toml
أضف إلى الملف:
[plugins.cri] enable_tls_streaming = true
نبدأ conteinerd نتحقق من أن كل شيء على ما يرام
systemctl enable containerd systemctl start containerd systemctl status containerd ● containerd.service - containerd container runtime Loaded: loaded (/etc/systemd/system/containerd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2018-06-25 12:32:01 MSK; 7s ago Docs: https://containerd.io Process: 10725 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS) Main PID: 10730 (containerd) Tasks: 15 (limit: 4915) Memory: 14.9M CPU: 375ms CGroup: /system.slice/containerd.service └─10730 /usr/local/bin/containerd Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="Get image filesystem path "/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs"" Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=error msg="Failed to load cni during init, please check CRI plugin status before setting up network for pods" error="cni con Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="loading plugin "io.containerd.grpc.v1.introspection"..." type=io.containerd.grpc.v1 Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="Start subscribing containerd event" Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="Start recovering state" Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg=serving... address="/run/containerd/containerd.sock" Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="containerd successfully booted in 0.308755s" Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="Start event monitor" Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="Start snapshots syncer" Jun 25 12:32:01 hb-master02 containerd[10730]: time="2018-06-25T12:32:01+03:00" level=info msg="Start streaming server"
تثبيت وتشغيل وما إلى ذلك
ملاحظة مهمة ، لقد قمت بتثبيت إصدار مجموعة kubernetes 1.10. بعد يومين فقط ، عند كتابة مقال ، تم إصدار الإصدار 1.11. إذا قمت بتثبيت الإصدار 1.11 ، فقم بتعيين المتغير ETCD_VERSION = "v3.2.17" ، إذا كان 1.10 ثم ETCD_VERSION = "v3.1.12".
export ETCD_VERSION="v3.1.12" curl -sSL https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz | tar -xzv --strip-components=1 -C /usr/local/bin/
نسخ التكوينات من gitahab.
git clone https://github.com/rjeka/k8s-containerd.git cd k8s-containerd
تكوين المتغيرات في ملف التكوين.
vim create-config.sh
وصف متغيرات الملف create-config.sh
الإعدادات على الجهاز المحلي لكل عقدة (كل عقدة لها الخاصة بها)
K8SHA_IPLOCAL - عنوان IP للعقدة التي تم تكوين البرنامج النصي عليها
K8SHA_ETCDNAME - اسم الجهاز المحلي في مجموعة ETCD
K8SHA_KA_STATE - دور في Keepalived . عقدة رئيسية واحدة ، وجميع النسخ الاحتياطية الأخرى.
K8SHA_KA_PRIO - الأولوية المحجوزة ، لدى الماجستير 102 للأرقام المتبقية 101 ، 100. عندما يسقط الرئيسي ذو الرقم 102 ، تأخذ العقدة برقم 101 مكانها وهكذا.
K8SHA_KA_INTF - واجهة شبكة محفوظة . سيتم الاستماع إلى اسم الواجهة التي يتم الاحتفاظ بها.
الإعدادات العامة لجميع ماسترنودس هي نفسها:
K8SHA_IPVIRTUAL = 172.26.133.160 - IP الظاهري للكتلة.
K8SHA_IP1 ... K8SHA_IP3 - عناوين IP للسادة
K8SHA_HOSTNAME1 ... K8SHA_HOSTNAME3 - أسماء المضيفين للماسترنودز. نقطة مهمة ، بهذه الأسماء ستولد kubeadm الشهادات.
K8SHA_KA_AUTH - كلمة المرور لحفظها . يمكنك تحديد أي
K8SHA_TOKEN - رمز الكتلة. يمكن إنشاؤها باستخدام الأمر إنشاء رمز مميز kubeadm
K8SHA_CIDR - عنوان الشبكة الفرعية للمداخن . يمكنني استخدام الفانيلا حتى CIDR 0.244.0.0/16. تأكد من الشاشة - في التكوين يجب أن يكون K8SHA_CIDR = 10.244.0.0 \ / 16
قم بتشغيل البرنامج النصي الذي سيقوم بتكوين nginx و keepalived و etcd و kubeadmin
./create-config.sh
نبدأ إلخ.
وما إلى ذلك رفعت بدون TLS. إذا كنت بحاجة إلى tls ،
فسيتم كتابته بالتفصيل في
وثائق kubernetes الرسمية كيفية إنشاء شهادات لـ etcd.
systemctl daemon-reload && systemctl start etcd && systemctl enable etcd
فحص الحالة
etcdctl cluster-health member ad059013ec46f37 is healthy: got healthy result from http://192.168.5.49:2379 member 4d63136c9a3226a1 is healthy: got healthy result from http://192.168.4.169:2379 member d61978cb3555071e is healthy: got healthy result from http://192.168.4.170:2379 cluster is healthy etcdctl member list ad059013ec46f37: name=hb-master03 peerURLs=http://192.168.5.48:2380 clientURLs=http://192.168.5.49:2379,http://192.168.5.49:4001 isLeader=false 4d63136c9a3226a1: name=hb-master01 peerURLs=http://192.168.4.169:2380 clientURLs=http://192.168.4.169:2379,http://192.168.4.169:4001 isLeader=true d61978cb3555071e: name=hb-master02 peerURLs=http://192.168.4.170:2380 clientURLs=http://192.168.4.170:2379,http://192.168.4.170:4001 isLeader=false
إذا كان كل شيء على ما يرام ، فانتقل إلى الخطوة التالية.
تكوين kubeadmin
إذا كنت تستخدم الإصدار 1.11 من kubeadm ، فيمكنك تخطي هذه الخطوة
لكي تبدأ kybernetes في العمل ليس مع عامل الميناء ، ولكن مع الحاوية ، قم بتكوين kubeadmin config
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
بعد [الخدمة] أضف خطًا إلى الكتلة
Environment="KUBELET_EXTRA_ARGS=--runtime-cgroups=/system.slice/containerd.service --container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
يجب أن يبدو التكوين بالكامل كما يلي: [Service] Environment="KUBELET_EXTRA_ARGS=--runtime-cgroups=/system.slice/containerd.service --container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock" Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true" Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0" Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki" ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS
إذا قمت بتثبيت الإصدار 1.11 وتريد تجربة CoreDNS بدلاً من kube-dns واختبار التكوين الديناميكي ، قم بإلغاء تعليق الكتلة التالية في ملف التكوين kubeadm-init.yaml:
feature-gates: DynamicKubeletConfig: true CoreDNS: true
إعادة تشغيل kubelet
systemctl daemon-reload && systemctl restart kubelet
تهيئة المعالج الأول
قبل بدء kubeadm ، تحتاج إلى إعادة تشغيل Keepalived والتحقق من حالتها
systemctl restart keepalived.service systemctl status keepalived.service ● keepalived.service - Keepalive Daemon (LVS and VRRP) Loaded: loaded (/lib/systemd/system/keepalived.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2018-06-27 10:40:03 MSK; 1min 44s ago Process: 4589 ExecStart=/usr/sbin/keepalived $DAEMON_ARGS (code=exited, status=0/SUCCESS) Main PID: 4590 (keepalived) Tasks: 7 (limit: 4915) Memory: 15.3M CPU: 968ms CGroup: /system.slice/keepalived.service ├─4590 /usr/sbin/keepalived ├─4591 /usr/sbin/keepalived ├─4593 /usr/sbin/keepalived ├─5222 /usr/sbin/keepalived ├─5223 sh -c /etc/keepalived/check_apiserver.sh ├─5224 /bin/bash /etc/keepalived/check_apiserver.sh └─5231 sleep 5
تحقق مما إذا كان الأصوات VIRTIP
ping -c 4 172.26.133.160 PING 172.26.133.160 (172.26.133.160) 56(84) bytes of data. 64 bytes from 172.26.133.160: icmp_seq=1 ttl=64 time=0.030 ms 64 bytes from 172.26.133.160: icmp_seq=2 ttl=64 time=0.050 ms 64 bytes from 172.26.133.160: icmp_seq=3 ttl=64 time=0.050 ms 64 bytes from 172.26.133.160: icmp_seq=4 ttl=64 time=0.056 ms --- 172.26.133.160 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3069ms rtt min/avg/max/mdev = 0.030/0.046/0.056/0.012 ms
بعد ذلك ، قم بتشغيل kubeadmin. تأكد من تضمين الخط - skip-preflight-check. ستفشل Kubeadmin افتراضيًا في البحث عن عامل إرساء وبدون تخطي عمليات التحقق مع وجود خطأ.
kubeadm init --config=kubeadm-init.yaml --skip-preflight-checks
بعد عمل kubeadm ، احفظ الخط الذي تم إنشاؤه. ستكون هناك حاجة لإدخال عقد العمل في الكتلة.
kubeadm join 172.26.133.160:6443 --token XXXXXXXXXXXXXXXXXXXXXXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
بعد ذلك ، وضح مكان تخزين ملف admin.conf
إذا عملنا كجذر ثم:
vim ~/.bashrc export KUBECONFIG=/etc/kubernetes/admin.conf source ~/.bashrc
بالنسبة لمستخدم بسيط ، اتبع التعليمات التي تظهر على الشاشة.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
أضف معالجات أخرى إلى الكتلة. للقيام بذلك ، انسخ الشهادات من kube-master01 إلى kube-master02 و kube-master03 إلى الدليل / etc / kubernetes /. للقيام بذلك ، قمت بتكوين وصول ssh للجذر ، وبعد نسخ الملفات ، أعدت الإعدادات مرة أخرى.
scp -r /etc/kubernetes/pki 172.26.133.162:/etc/kubernetes/ scp -r /etc/kubernetes/pki 172.26.133.163:/etc/kubernetes/
بعد النسخ إلى kube-master02 و kube-master03 ، قم بتشغيل.
kubeadm init --config=kubeadm-init.yaml --skip-preflight-checks
قم بتثبيت CIDR الفانيلا
على kube-master01 تنفيذ
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
يمكن العثور على الإصدار الحالي من flanel في وثائق kubernetes .
ننتظر حتى يتم إنشاء جميع الحاويات.
watch -n1 kubectl get pods --all-namespaces -o wide NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE kube-system kube-apiserver-kube-master01 1/1 Running 0 17m 172.26.133.161 kube-master01 kube-system kube-apiserver-kube-master02 1/1 Running 0 6m 172.26.133.162 kube-master02 kube-system kube-apiserver-kube-master03 1/1 Running 0 6m 172.26.133.163 kube-master03 kube-system kube-controller-manager-kube-master01 1/1 Running 0 17m 172.26.133.161 kube-master01 kube-system kube-controller-manager-kube-master02 1/1 Running 0 6m 172.26.133.162 kube-master02 kube-system kube-controller-manager-kube-master03 1/1 Running 0 6m 172.26.133.163 kube-master03 kube-system kube-dns-86f4d74b45-8c24s 3/3 Running 0 17m 10.244.2.2 kube-master03 kube-system kube-flannel-ds-4h4w7 1/1 Running 0 2m 172.26.133.163 kube-master03 kube-system kube-flannel-ds-kf5mj 1/1 Running 0 2m 172.26.133.162 kube-master02 kube-system kube-flannel-ds-q6k4z 1/1 Running 0 2m 172.26.133.161 kube-master01 kube-system kube-proxy-9cjtp 1/1 Running 0 6m 172.26.133.163 kube-master03 kube-system kube-proxy-9sqk2 1/1 Running 0 17m 172.26.133.161 kube-master01 kube-system kube-proxy-jg2pt 1/1 Running 0 6m 172.26.133.162 kube-master02 kube-system kube-scheduler-kube-master01 1/1 Running 0 18m 172.26.133.161 kube-master01 kube-system kube-scheduler-kube-master02 1/1 Running 0 6m 172.26.133.162 kube-master02 kube-system kube-scheduler-kube-master03 1/1 Running 0 6m 172.26.133.163 kube-master03
نحن نصنع نسخة طبق الأصل من نظام أسماء النطاقات kube إلى جميع الأساتذة الثلاثة
على kube-master01 تنفيذ
kubectl scale --replicas=3 -n kube-system deployment/kube-dns
تثبيت وتكوين nginx
في كل عقدة رئيسية ، قم بتثبيت nginx كموازن لـ Kubernetes API
لدي كل آلات الكتلة على ديبيان. من حزم nginx ، لا تدعم وحدة الدفق ، لذا أضف مستودعات nginx وقم بتثبيتها من مستودعات nginx`a. إذا كان لديك نظام تشغيل مختلف ، فراجع وثائق nginx .
wget https://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key echo -e "\n#nginx\n\ deb http://nginx.org/packages/debian/ stretch nginx\n\ deb-src http://nginx.org/packages/debian/ stretch nginx" >> /etc/apt/sources.list apt-get update && apt-get install nginx -y
إنشاء تكوين nginx (إذا لم يكن قد تم إنشاؤه بالفعل)
./create-config.sh
nginx.confnginx المستخدم ؛
عمليات العمال
error_log /var/log/nginx/error.log تحذير ؛
pid /var/run/nginx.pid ؛
الأحداث {
العمال_وصلات 1024 ؛
}}
http {
تشمل /etc/nginx/mime.types ؛
تطبيق default_type / دفق ثماني بتات ؛
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;
}}
تيار {
apiserver المنبع {
الخادم 172.26.133.161:6443 الوزن = 5 max_fails = 3 fail_timeout = 30s ؛
الخادم 172.26.133.162:6443 الوزن = 5 max_fails = 3 fail_timeout = 30s ؛
الخادم 172.26.133.163:6443 الوزن = 5 max_fails = 3 fail_timeout = 30s ؛
} server { listen 16443; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass apiserver; }
}}
نتحقق من أن كل شيء على ما يرام ونطبق التكوين
nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful systemctl restart nginx systemctl status nginx ● nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-06-28 08:48:09 MSK; 22s ago Docs: http://nginx.org/en/docs/ Process: 22132 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 22133 (nginx) Tasks: 2 (limit: 4915) Memory: 1.6M CPU: 7ms CGroup: /system.slice/nginx.service ├─22133 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf └─22134 nginx: worker process
اختبار الموازن
curl -k https://172.26.133.161:16443 | wc -l % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 233 100 233 0 0 12348 0 --:--:-- --:--:-- --:--:-- 12944
تكوين وكيل kube للعمل مع الموازن
بعد تكوين الموازن ، قم بتحرير المنفذ في إعدادات kubernetes.
kubectl edit -n kube-system configmap/kube-proxy
قم بتغيير إعدادات الخادم إلى https://172.26.133.160:16443
بعد ذلك ، تحتاج إلى تكوين وكيل kube للعمل مع المنفذ الجديد
kubectl get pods --all-namespaces -o wide | grep proxy kube-system kube-proxy-9cjtp 1/1 Running 1 22h 172.26.133.163 kube-master03 kube-system kube-proxy-9sqk2 1/1 Running 1 22h 172.26.133.161 kube-master01 kube-system kube-proxy-jg2pt 1/1 Running 4 22h 172.26.133.162 kube-
نحذف جميع القرون ، بعد إزالتها ، يتم إعادة إنشائها تلقائيًا باستخدام الإعدادات الجديدة
kubectl delete pod -n kube-system kube-proxy-XXX ```bash . ```bash kubectl get pods --all-namespaces -o wide | grep proxy kube-system kube-proxy-hqrsw 1/1 Running 0 33s 172.26.133.161 kube-master01 kube-system kube-proxy-kzvw5 1/1 Running 0 47s 172.26.133.163 kube-master03 kube-system kube-proxy-zzkz5 1/1 Running 0 7s 172.26.133.162 kube-master02
إضافة عقد العمل إلى الكتلة
في كل ملاحظة جذرية ، قم بتنفيذ الأمر الذي تم إنشاؤه بواسطة kubeadm
kubeadm join 172.26.133.160:6443 --token XXXXXXXXXXXXXXXXXXXXXXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --cri-socket /run/containerd/containerd.sock --skip-preflight-checks
إذا كان الخط "مفقودًا" ، فأنت بحاجة إلى إنشاء خط جديد
kubeadm token generate kubeadm token create <generated-token> --print-join-command --ttl=0
حول عقد العمل في ملفات /etc/kubernetes/bootstrap-kubelet.conf و /etc/kubernetes/kubelet.conf
قيمة الخادم المتغيرة لدينا
vim /etc/kubernetes/bootstrap-kubelet.conf server: https://172.26.133.60:16443 vim /etc/kubernetes/kubelet.conf server: https://172.26.133.60:16443
وإعادة تشغيل الحاوية و kubernetes
systemctl restart containerd kubelet
تركيب لوحة القيادة
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
إنشاء مستخدم بامتيازات المسؤول:
kubectl apply -f kube-dashboard/dashboard-adminUser.yaml
نحصل على الرمز المميز للدخول:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
تكوين الوصول إلى لوحة القيادة عبر NodePort على VIRTIP
kubectl -n kube-system edit service kubernetes-dashboard
نستبدل قيمة النوع: ClusterIP بالنوع: NodePort وفي قسم المنفذ: أضف قيمة nodePort: 30000 (أو المنفذ في النطاق 30000 إلى 32000 الذي تريد الوصول إلى اللوحة عليه):

اللوحة متاحة الآن على https: // VIRTIP: 30000
هيبستر
بعد ذلك ، قم بتثبيت Heapster ، وهي أداة للحصول على مقاييس لمكونات الكتلة.
التثبيت:
git clone https://github.com/kubernetes/heapster.git cd heapster kubectl create -f deploy/kube-config/influxdb/ kubectl create -f deploy/kube-config/rbac/heapster-rbac.yaml
الاستنتاجات
لم ألاحظ أي مشاكل خاصة عند العمل مع الحاوية. مرة واحدة كان هناك خلل غير مفهوم مع الموقد بعد إزالة الانتشار. يعتقد Kubernetes أنه تم حذف تحت ، ولكن أصبح تحت "غيبوبة" غريبة. بقيت موجودة على العقدة ، ولكن في الوضع الممتد.
أعتقد أن Containerd أكثر توجهاً كوقت تشغيل للحاويات لـ kubernetes. على الأرجح ، في المستقبل ، كبيئة لإطلاق الخدمات الصغيرة في Kubernetes ، سيكون من الممكن والضروري استخدام بيئات مختلفة سيتم توجيهها لمهام ومشاريع مختلفة ، إلخ.
يتطور المشروع بسرعة كبيرة. بدأت Alibaba Cloud في استخدام conatinerd بنشاط وتؤكد أنها البيئة المثالية لتشغيل الحاويات.
وفقًا للمطورين ، فإن تكامل الحاوية في منصة Google السحابية Kubernetes يعادل الآن تكامل Docker.
مثال جيد لأداة وحدة التحكم crictl . سأعطيك أيضًا بعض الأمثلة من المجموعة التي تم إنشاؤها:
kubectl describe nodes | grep "Container Runtime Version:"

تفتقر Docker CLI إلى المفاهيم الأساسية لـ Kubernetes ، على سبيل المثال ، pod ومساحة الاسم ، بينما يدعم crictl هذه المفاهيم
crictl pods

وإذا لزم الأمر ، يمكننا إلقاء نظرة على الحاويات بالتنسيق المعتاد ، مثل عامل الميناء
crictl ps

يمكننا أن نرى الصور الموجودة على العقدة
crictl images

كما اتضح أن الحياة بدون عامل ميناء هي :)
من السابق لأوانه الحديث عن الأخطاء ومواطن الخلل ، تعمل المجموعة معنا لمدة أسبوع تقريبًا. في المستقبل القريب سيتم نقل الاختبار إليه ، وفي حالة النجاح ، على الأرجح موقف ديف لأحد المشاريع. هناك فكرة عن هذا لكتابة سلسلة من المقالات التي تغطي عمليات DevOps ، مثل: إنشاء مجموعة ، وإعداد وحدة تحكم في الإدخال ونقلها إلى عقد عنقودية منفصلة ، وأتمتة تجميع الصور ، والتحقق من الصور بحثًا عن نقاط الضعف ، والنشر ، إلخ. في هذه الأثناء ، سننظر في استقرار العمل ، ونبحث عن الأخطاء ونطور منتجات جديدة.
أيضًا ، هذا الدليل مناسب لنشر مجموعة تجاوز الفشل مع عامل الإرساء ، ما عليك سوى تثبيت عامل الإرساء وفقًا للتعليمات الواردة من وثائق Kubernetes الرسمية وتخطي الخطوات لتثبيت الحاوية وتكوين تهيئة kubeadm.
أو يمكنك وضع الحاوية والرسو في نفس الوقت على نفس المضيف ، وكما يؤكد المطورون ، سيعملون معًا بشكل مثالي. إن الحاوية هي بيئة إطلاق حاويات konbernetes ، والمرسى يشبه عامل الميناء تمامًا)))

يحتوي مستودع الحاوية على
دليل تشغيل غير مرغوب فيه لإعداد مجموعة أحادية المعالج. ولكن كان الأمر أكثر إثارة للاهتمام بالنسبة لي أن "أرفع" النظام بيدي لكي أفهم بمزيد من التفصيل تكوين كل مكون وفهم كيفية عمله عمليًا.
ربما في يوم من الأيام ستصل يدي ، وسأكتب كتاب اللعب الخاص بي لنشر مجموعة مع HA ، حيث قمت خلال الأشهر الستة الماضية بنشر أكثر من اثني عشر منها ، وربما حان الوقت لأتمتة العملية.
أيضا ، أثناء كتابة هذا المقال ، تم إصدار النسخة kubernetes 1.11. يمكنك أن تقرأ عن التغييرات الرئيسية في مدونة Flant أو في مدونة kubernetes الرسمية . قمنا بتحديث مجموعات الاختبار إلى الإصدار 1.11 واستبدلنا kube-dns بـ CoreDNS. بالإضافة إلى ذلك ، قمنا بتضمين وظيفة DynamicKubeletConfig لاختبار إمكانات التحديث الديناميكي للتكوينات.
المواد المستخدمة:
شكرا للقراءة حتى النهاية.
نظرًا لأن المعلومات حول kubernetes ، خاصةً حول العناقيد التي تعمل في ظروف حقيقية ، نادرة جدًا في RuNet ، فإن مؤشرات عدم الدقة موضع ترحيب ، وكذلك التعليقات على مخطط نشر المجموعة العام. سأحاول أخذها في الاعتبار وإجراء التصحيحات المناسبة. وأنا على استعداد دائم للإجابة على الأسئلة في التعليقات ، على githab وفي أي شبكات اجتماعية مذكورة في ملفي الشخصي.
مع خالص التقدير ، يوجين.