تخفیف برای اولین خرید سرویس ابری با کد تخفیف: Welcome2XaaS

نصب و پیکربندی Kubernetes برروی Ubuntu...

تکنولوژی
نصب و پیکربندی Kubernetes برروی Ubuntu 18.04 LTS
تکنولوژی 1399/12/18

Kubernetes یک ابزار رایگان هماهنگ‌کننده خودکار کانتینر(Container) است و برای توسعه خودکار برنامه‌هایی که بر اساس کانتینر می‌باشند در محیط کلاستر استفاده می‌شود

نصب و پیکربندی Kubernetes بر روی Ubuntu 18.04 LTS

Kubernetes یک ابزار رایگان هماهنگ‌کننده خودکار کانتینر(Container) است و برای توسعه خودکار برنامه‌هایی که بر اساس کانتینر می‌باشند در محیط کلاستر استفاده می‌شود. جدا از آن همچنین برای مدیریت کانتینرهای داکر بر روی هاست کلاستر Kubernetes استفاده شده است. Kubernetes همچنین بعنوان K8s شناخته می‌شود.

در این مقاله خواهیم دید که چگونه دو Kubernetes Node را با استفاده از Kubeadm روی سیستم‎‌عامل‌ Ubuntu 18.04 / 18.10 نصب و پیکربندی خواهیم کرد. جزئیات زیر مربوط به راه‌اندازی کامپبوتر شخصی است.

قرار است تا از سه Ubuntu 18.04 LTS بر روی سیستم استفاده نماییم. یکی از آن‌ها به عنوان یک Kubernetes Master node و دو node دیگر بعنوان Slave مورد استفاده قرار می‎گیرند و به کلاستر Kubernetes وارد می‎شوند.

  • Kubernetes Master Node – (Hostname: k8s-master , IP : 192.168.1.70, OS : Minimal Ubuntu 18.04 LTS)
  • Kubernetes Slave Node 1 – (Hostname: k8s-worker-node1, IP: 192.168.1.80 , OS : Minimal Ubuntu 18.04 LTS)
  • Kubernetes Slave Node 2 – (Hostname: k8s-worker-node2, IP: 192.168.1.90 , OS : Minimal Ubuntu 18.04 LTS)

نکته: Kubernetes Slave همچنین به‌عنوان نود کارگر نیز شناخته می‎شوند.

حال قرار است تا وارد مراحل نصب و پیکربندی k8s شویم.

کوبرنتیز

مرحله ۱: تنظیم کردن Hostname و بروزرسانی فایل hosts

به master node لاگین کنید و با استفاده از دستور  hostnamectl مقدار hostname را پیکربندی کنید:

linuxtechi@localhost:~$ sudo hostnamectl set-hostname "k8s-master"

linuxtechi@localhost:~$ exec bash

linuxtechi@k8s-master:~$

به nodeهای Slave همان کارگر لاگین کرده و با استفاده از دستور  hostnamectl به ترتیب مقدار hostname را تغییر دهید:

linuxtechi@localhost:~$ sudo hostnamectl set-hostname k8s-worker-node1

linuxtechi@localhost:~$ exec bash

linuxtechi@k8s-worker-node1:~$

linuxtechi@localhost:~$ sudo hostnamectl set-hostname k8s-worker-node2

linuxtechi@localhost:~$ exec bash

linuxtechi@k8s-worker-node2:~$

خطوط زیر را در فایل hosts در مسیر etc برای همه سیستم‌ها اضافه نمایید.

192.168.1.70     k8s-master

192.168.1.80     k8s-worker-node1

192.168.1.90     k8s-worker-node2

مرحله ۲: نصب و شروع سرویس docker بر روی nodeهای master و slave

دستور  apt-get را برای نصب docker بر روی master node اجرا کنید:

linuxtechi@k8s-master:~$ sudo apt-get install docker.io -y

دستور  apt-get را برای نصب docker بر روی slave node اجرا کنید:

linuxtechi@k8s-worker-node1:~$ sudo apt-get install docker.io -y

linuxtechi@k8s-worker-node2:~$ sudo apt-get install docker.io -y

زمانی که پکیج‎های docker بر روی هر سه سیستم نصب شد، با استفاده از دستور systemctl سرویس docker را شروع و فعال نمایید. نیاز است تا این دستورات بر روی nodeهای master و slave اجرا شده باشند:

~$ sudo systemctl start docker

~$ sudo systemctl enable docker

Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.

Executing: /lib/systemd/systemd-sysv-install enable docker

~$

از دستور زیر برای تأیید نسخه docker نصب شده بر روی سیستم‌ها استفاده نمایید:

~$ docker --version

Docker version 18.06.1-ce, build e68fc7a

~$

مرحله ۳: پیکربندی مخزن پکیج  Kubernetes بر روی nodeهای master و slave

نکته: همه دستورات در این مرحله باید بر روی nodeهای master و slave اجرا شوند.

اجازه دهید اول بعضی از پکیج های مورد نیاز را نصب نماییم، دستورات زیر را بر روی همه nodeها مخصوصاً نود master اجرا نمایید.

~$ sudo apt-get install apt-transport-https curl -y

حالا کلید مخزن پکیج  Kubernetes را با استفاده از دستور زیر اضافه کنید:

:~$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add

OK

:~$

حالا با دستور apt مخزن Kubernetes را پیکربندی نمایید، در این زمان مخزن پکیج Kubernetes برای نسخه Ubuntu 18.04  bionic در دسترس می‎باشد؛ بنابراین ما می‌خواهیم از مخزن پکیج  Xenial برای  Kubernetes استفاده نماییم.

:~$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

مرحله ۴: غیرفعال نمودن swap و نصب  Kubeadm بر روی همه nodeها

نکته: همه دستورات در این مرحله باید بر روی همه nodeهای master و slave اجرا شود.

Kubeadm یکی از روش‌های رایج برای گسترش کلاستر  kubernetes است و یا به معنای دیگر ما می‌توانیم بگوییم برای گسترش nodeهای چندگانه روی کلاستر  kubernetes استفاده می شود.

همانطور که سایت رسمی Kubernetes توصیه کرده است، بهتر است تا swap روی همه نودها مخصوصاً نود master غیرفعال شود.

اجرای دستور زیر برای غیرفعال نمودن موقت swap می‎باشد:

:~$ sudo swapoff -a

برای غیر فعال کردن دائم swap مقدار swap یا swapfile را در فایل fstab در مسیر etc کامنت نمایید.

حالا پکیج Kubeadm را بر روی همه nodeها مخصوص master نصب نمایید:

:~$ sudo apt-get install kubeadm -y

زمانی که پکیج‎های kubeadm با موفقیت نصب شد، نسخه kubeadm را با استفاده از دستور زیر تأیید نمایید.

:~$ kubeadm version

kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:33:30Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"}

:~$

مرحله ۵: مقداردهی اولیه و شروع کلاستر  Kubernetes روی  master node با استفاده از Kubeadm

از دستور  kubeadm بر روی master node فقط جهت مقداردهی اولیه Kubernetes استفاده نمایید.

linuxtechi@k8s-master:~$ sudo kubeadm init --pod-network-cidr=192.168.10.0/24

در دستور بالا شما می‌توانید از همان شبکه pod یا شبکه pod خودتان که مناسب محیط شماست استفاده نمایید. زمانی که دستور با موفقیت اجرا شود، ما خروجی شبیه زیر می‎بینیم:

خروجی بالا تأیید می‌کند که master node با موفقیت مقداردهی شده است، بنابراین جهت شروع کلاستر دستورات زیر را به ترتیب اجرا نمایید:

linuxtechi@k8s-master:~$  mkdir -p $HOME/.kube

linuxtechi@k8s-master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

linuxtechi@k8s-master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

linuxtechi@k8s-master:~$

تأیید وضعیت master node با استفاده از دستور زیر:

linuxtechi@k8s-master:~$ kubectl get nodes

NAME         STATUS     ROLES    AGE   VERSION

k8s-master   NotReady   master   18m   v1.13.2

linuxtechi@k8s-master:~$

همانطور که ما می‌توانیم در خروجی دستور بالا ببینیم، master node ما آماده نیست، بدلیل اینکه الان ما هیچ گسترشی بر روی pod نداریم.

اجازه بدهید شبکه pod را گسترش دهیم. شبکه pod برای ارتباط nodeها با یکدیگر استفاده می‎شود. ما می‎خواهیم Flannel را بعنوان شبکه pod خودمان گسترش بدهیم، Flannel شبکه Overlay را بین nodeهای کلاستر فراهم می‎کند.

مرحله ۶: توسعه Flannel بعنوان شبکه pod از  master node و تأیید namespaces برای pod

دستور  kubectl را برای گسترش شبکه pod از  master node اجرا کنید:

linuxtechi@k8s-master:~$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

خروجی دستور بالا باید چیزی مانند زیر باشد:

clusterrole.rbac.authorization.k8s.io/flannel created

clusterrolebinding.rbac.authorization.k8s.io/flannel created

serviceaccount/flannel created

configmap/kube-flannel-cfg created

daemonset.extensions/kube-flannel-ds-amd64 created

daemonset.extensions/kube-flannel-ds-arm64 created

daemonset.extensions/kube-flannel-ds-arm created

daemonset.extensions/kube-flannel-ds-ppc64le created

daemonset.extensions/kube-flannel-ds-s390x created

linuxtechi@k8s-master:~$

حالا برای تأیید وضعیت master node و namespaces برای pod از دستور kubectl استفاده نمایید:

linuxtechi@k8s-master:~$ sudo  kubectl get nodes

NAME         STATUS   ROLES    AGE   VERSION

k8s-master   Ready    master   78m   v1.13.2

linuxtechi@k8s-master:~$

linuxtechi@k8s-master:~$ sudo  kubectl get pods --all-namespaces

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE

kube-system   coredns-86c58d9df4-px4sj             1/1     Running   0          79m

kube-system   coredns-86c58d9df4-wzdzk             1/1     Running   0          79m

kube-system   etcd-k8s-master                      1/1     Running   1          79m

kube-system   kube-apiserver-k8s-master            1/1     Running   1          79m

kube-system   kube-controller-manager-k8s-master   1/1     Running   1          79m

kube-system   kube-flannel-ds-amd64-9tn8z          1/1     Running   0          14m

kube-system   kube-proxy-cjzz2                     1/1     Running   1          79m

kube-system   kube-scheduler-k8s-master            1/1     Running   1          79m

linuxtechi@k8s-master:~$

همانطور که ما در خروجی بالا می‌بینیم وضعیت نود master خودمان به Ready تغییر کرده است و همه namespaceها برای pod در وضعیت running می‎باشند؛ بنابراین این نود master ما را تأیید می‌کند که در وضعیت سالم و آماده برای تبدیل به کلاستر است.

مرحله ۷: اضافه کردن نودهای slave و worker به کلاستر

نکته: در مرحله ۵، در خروجی دستور kubeadm ما دستور کاملی را که می‌خواهیم آن را بر روی worker node و slave برای اتصال به یک کلاستر استفاده نماییم دریافت کردیم.

به اولین slave node که «k8s-worker-node1» است لاگین و دستور زیر را برای وارد شدن به کلاستر اجرا نمایید

linuxtechi@k8s-worker-node1:~$ sudo kubeadm join 192.168.1.70:6443 --token cwxswk.hbkuu4jua82o80d1 --discovery-token-ca-cert-hash sha256:ff1b0cfe5aec94f90a42bdb45d2b8bfde34006017c0e3f3026a84388f46a5495

خروجی دستور بالا باید چیزی شبیه زیر باشد:

کوبرنتیز

به طور مشابه برای وارد شدن به worker node دوم دستور kubeadm را اجرا کنید.

linuxtechi@k8s-worker-node2:~$ sudo kubeadm join 192.168.1.70:6443 --token cwxswk.hbkuu4jua82o80d1 --discovery-token-ca-cert-hash sha256:ff1b0cfe5aec94f90a42bdb45d2b8bfde34006017c0e3f3026a84388f46a5495

خروجی بالا باید چیزی شبیه زیر باشد:

کوبرنتیز

حالا به master node بروید و دستور زیر را برای چک کردن وضعیت master node و slave node اجرا کنید:

linuxtechi@k8s-master:~$ kubectl get nodes

NAME               STATUS   ROLES    AGE    VERSION

k8s-master         Ready    master   100m   v1.13.2

k8s-worker-node1   Ready    <none>   10m    v1.13.2

k8s-worker-node2   Ready    <none>   4m6s   v1.13.2

linuxtechi@k8s-master:~$

دستور بالا تأیید می‌کند که ما با موفقیت دو worker node خودمان را در کلاستر اضافه کرده‌ایم و وضعیت آن‌ها Ready می‎باشد. حالا می‌توان نتیجه‌گیری کرد که ما کلاستر  Kubernetes را بر روی دو node بر روی سیستم با Ubuntu 18.04 با موفقیت نصب و پیکربندی کرده‎ایم.

با تشکر از همراهی شما

تیم بلاگ زس

...
...