نصب و پیکربندی Kubernetes روی Ubuntu 18.04 LTS
نصب و پیکربندی 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 10m v1.13.2 k8s-worker-node2 Ready 4m6s v1.13.2 linuxtechi@k8s-master:~$
دستور بالا تأیید میکند که ما با موفقیت دو worker node خودمان را در کلاستر اضافه کردهایم و وضعیت آنها Ready میباشد. حالا میتوان نتیجهگیری کرد که ما کلاستر Kubernetes را بر روی دو node بر روی سیستم با Ubuntu 18.04 با موفقیت نصب و پیکربندی کردهایم.