سرویس کوبرنتیس (Kubernetes) یک سرویس مدیریت اپن سورس رایگان هست که پلتفرم توسعه خودکار، مقیاس پذیری و عملیات مدیریت اپلیکشن های مبتنی بر کانتینر را در میان کلاستری از کامپیوترها انجام می دهد. شاید به عبارتی ساده تر، از کوبرنتیس بتوان به عنوان یک سرویس مدیریتی برای زیرساخت کانتینرها نام برد که نقشی شبیه vCenter در مدیریت زیرساخت مجازی و ماشین های مجازی را برعهده دارد. کوبرنتیس یک سیستم قدرتمند متن باز است که گوگل آن را برای مدیریت اپلیکشن های کانتینرشده خود توسعه داد. با کمک آن، روش های بهتری جهت مدیریت اجزاء مرتبط و همچنین سایر سرویس ها در زیرساخت های متنوع فراهم می شود. لازم است تا درک کاملی از معماری و اجزاء تشکیل دهنده این سرویس داشته باشید که در مقالات دیگری به آنها اشاره خواهم کرد، اما فعلا کوبرنتیس را به عنوان سیستمی جهت اجرا و همکاری اپلیکشن های کانتینری در یک محیط کلاستر شده در نظر بگیرید که قرار است قابلیت های مهمی همچون مقیاس پذیری، پیش بینی و تعادل بار، دسترسی بالا و برخی پایش های دیگر را بصورت خودکار و بهینه مدیریت نماید. در این مقاله، صرفا به مراحل نصب و پیکربندی اولیه کوبرنتیس Kubernetes در سیستم عامل لینوکس اوبونتو Ubuntu 18.04 پرداخته ام. 

نصب و پیکربندی سرویس کوبرنتیس در لینوکس Ubuntu 18.04

بر اساس سناریوی پیشنهادی، سه سرور با سیستم عامل لینوکس ubuntu 18.04 نصب شده است. یکی از سرورها، به عنوان نود master و دو سرور دیگر به عنوان نود slave خواهند بود. البته، نصب و پیکربندی کوبرنتیس می تواند به چند روش مختلف انجام شود. جهت درک بهتر، مراحل نصب و راه اندازی سرویس Kubernetes را به چند گام مختلف تفکیک و در ادامه مقاله به شرح آنها پرداخته ام: 

  • نصب اولیه داکر 
  • پیکربندی اولیه کوبرنتیس 
  • نصب سرویس کوبرنتیس 
  • آماده سازی نود مستر کوبرنتیس
  • پیکربندی اولیه شبکه پاد و توسعه flannel
  • اتصال نودهای ورکر به کلاستر کوبرنتیس

در اولین گام، آدرسهای IP و نام سرورهای خود را تغییر داده و پیکربندی فایل hosts را نیز انجام دهید. برای این کار، به ترتیب وارد هرکدام از سرورها شده و عملیات تغییر نام را در خط فرمان لینوکس اجرا کنید.   

$ sudo hostnamectl set-hostname k8s-master
$ sudo hostnamectl set-hostname k8s-node-01
$ sudo hostnamectl set-hostname k8s-node-02

فایل hosts نیز باید روی تمام نودها با پیکربندی زیر انجام شود. در صورتیکه تنظیمات زیر وجود ندارد فایل را با vi ویرایش کنید.

$ cat /etc/hosts
192.168.2.2   k8s-master 
192.168.2.3   k8s-node-01 
192.168.2.4   k8s-node-02

 

مرحله نصب اولیه داکر

برای نصب اولیه داکر، لازم است تا پیش نیازهای لازم روی لینوکس را انجام و به روزرسانی موردنیاز صورت گیرد. برای ادامه نصب داکر از دستورات زیر استفاده کنید.

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

برای نصب داکر، بایستی به روزرسانی بسته های Apt را انجام و سپس نوع بسته و نسخه ای از داکر که قصد دارید روی سیستم های شما نصب شود را انتخاب کنید. در این سناریو، از نسخه CE جهت نصب داکر استفاده کرده ایم.

$ sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io

نصب داکر انجام شد و اکنون می توانید یک ایمیج داکر را جهت تست سرویس اجرا کنید یا از دستورات داکر مانند docker –version جهت اطمینان از نصب صحیح آن استفاده کنید. در نظر داشته باشید پکیج های داکر بایستی روی تمام نودهای این سناریو نصب شود.

$ sudo docker run hello-world

مرحله پیکربندی کوبرنتیس 

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

ممکن است در روند نصب کوبرنتیس لازم باشد تا پکیج های ضروری آن نصب شود. در ادامه به روزرسانی انجام شده، کلید ریپازیتوری مربوط به بسته کوبرنتیس اضافه می شود و آخرین دستور apt-add-repository جهت اضافه کردن مخزن بسته کوبرنتیس هست. در نظر داشته باشید که با توجه به عدم ارائه Ubuntu 18.04  bionic، در این دستور از پکیج Xenial برای کوبرنتیس استفاده شده است. 

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

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

$ sudo apt-add-repository “deb http://apt.kubernetes.io/ kubernetes-xenial main”

نصب کوبرنتیس

Kubeadm یکی از متدهای توسعه و گسترش کلاسترهای کوبرنتیس تعیین شده است که می توان از این فرمان برای گسترش چندین نود در کلاسترکوبرنتیس استفاده کرد. در این مرحله بایستی پکیج کوبرنتیس نصب شود. پیش از آن، پیشنهاد شده است که Swap روی همه نودها غیرفعال شود. البته دستوری که در این سناریو اجرا شده است، بصورت موقت این کار را انجام می دهد و پس از ریستارت سیستم، Swap فعال می باشد. جهت غیرفعال کردن دائمی آن بایستی پیکربندی لازم در فایل fstab صورت گیرد.

$ sudo swapoff a

$ sudo aptget install kubeadm y

$ kubeadm version

زمانی که بسته kubeadm با موفقیت نصب شد، میتوانید از دستور kubeadm version جهت صحت عملکرد آن استفاده کنید. بایستی خروجی شبیه به عبارات زیر را داشته باشید.

kubeadm version: &version.Info{Major:”1″, Minor:”17″, GitVersion:”v1.17.0″, GitCommit:”70132b0f130acc0bed193d9ba59dd186f0e634cf”, GitTreeState:”clean”, BuildDate:”2019-12-07T21:17:50Z”, GoVersion:”go1.13.4″, Compiler:”gc”, Platform:”linux/amd64″}

آماده سازی اولیه کلاستر کوبرنتیس روی نود مستر

جهت مقداردهی و initialize کردن کلاستر کوبرنتیس، بایستی از دستور kubeadm روی ند مستر خود استفاده کنید. در این مرحله می توان، از همان رنج شبکه pod یا شبکه خودتان استفاده کنید. در این سناریو، رنج داخلی شبکه من 192.168.2.0/24 تعیین شده است.

$ sudo kubeadm init –pod-network-cidr=192.168.2.0/24

در صورت اجرای صحیح فرمان فوق، بایستی خروجی با پیام موفقیت آمیز بودن این دستور را مشاهده کنید. البته گاها ممکن است با هشداری در خصوص سرویس systemdنیز مواجه شوید که فرآیند ایجاد نود مستر را با مشکل مواجه کند. در این صورت امکان اجرای دستورات زیر نیز وجود دارد.

apt-mark hold kubelet kubeadm kubectl
kubeadm init --apiserver-advertise-address=192.168.2.2 --pod-network-cidr=192.168.2.0/24

در این مرحله بایستی ملاحظات مربوط به مقداردهی نودمستر را در نظر گرفته و از دستورات ذکر شده در خروجی، جهت تکمیل و شروع کلاستر استفاده کنید.

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 192.168.2.2:6443 --token 9y4vc8.h7jdjle1xdovrd0z --discovery-token-ca-cert-hash sha256:cff9d1444a56b24b4a

همانطور که در خروجی بالا مشاهده می کنید، موفقیت آمیز بودن اجرای دستور قبلی مشخص می باشد. همانطور که در پیام ها مشهود است، بایستی جهت استفاده و شروع کلاستر از سه دستور ذکر شده استفاده کنید. پس دستورات زیر را به ترتیب روی نود مستر اجرا کنید:

$ mkdir -p $HOME/.kube

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

فرآیند مقداردهی اولیه نود مستر انجام شده و لازم است تنظیمات شبکه ای پاد را در ادامه جهت نهایی کردن کلاستر اجرا کنیم. در این مرحله اگر از دستور kubectl get nodes استفاده کنید، نام نود مستر را در خروجی دستور در وضعیت NotReady مشاهده می کنید که پس از اجرای دستورات زیر بایستی به حالت Ready تغییر یابد.

جهت رفع مشکل، شبکه Pod که برای ارتباط بین نودهای کلاستر استفاده می شود را بایستی توسعه داد. از این رو، از flannel بعنوان شبکه پاد استفاده میکنیم.  flannel شبکه overlay در بین نودهای کلاستر را ارائه می کند. 

گسترش flannel به عنوان شبکه pod در نود مستر

جهت گسترش flannel به عنوان شبکه پاد بایستی روی نود مستر دستور زیر را اجرا کنید.

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

پس از اجرا دستور بالا، چند کامپوننت و سرویس flannel به ترتیب ایجاد می شوند. برای تایید وضعیت نود مستر و namespace ها برای پاد از دستور kubectl استفاده کنید. دو دستور زیر بایستی نود مستر را در وضعیت Ready نمایش داده و وضعیت تمام نیم اسپیس های پاد را در حالت running نمایش دهد. در صورت مشاهده چنین خروجی، نود مستر ما در وضعیت سالم و آماده می باشد و می توان ادامه مراحل را در نودهای ورکر slave دنبال کرد.

$ sudo  kubectl get nodes

$ sudo  kubectl get pods allnamespaces

اتصال نودهای ورکر Slave به کلاستر کوبرنتیس

همانطور که در مراحل قبلی و در خروجی دستور kubeadm مشاهده کردیم، توکن و رشته رمزنگاری sha256 را جهت اتصال به نود مستر داشتیم. بایستی آنرا جهت join کردن تمام نودهای ورکر به مستر اجرا کنیم. برای اتصال نودهای ورکر از دستور kubeadm join استفاده می شود. 

$ sudo kubeadm join 192.168.2.2:6443 –token p12zvg.2tfkxa9snnsk5atv \
–discovery-token-ca-cert-hash sha256:1c6b3baf67478e0e43092b5b3beab69e1ca2bffedd2a1e2fb48446ec4385be0e

پس از اجرای دستور فوق، و در صورتیکه فرآیند اتصال به نود مستر با موفقیت انجام شود، نود worker به master متصل شده و می توانید با اجرای دستور kubectl get nodes روی مستر، لیست تمام نودهای داخل کلاستر Kubernetes را مشاهده کنید.

رفع خطا 1: ممکن است در این مرحله و در زمان اتصال به نود مستر با خطا مواجه شده و کانکشن شما به دلایلی با پیام خطای refused مواجه شود. برای رفع این مشکل دستورات زیر را به ترتیب اجرا کنید.

$ sudo – i
$ swapoff -a
$ exit
$ strace -eopenat kubectl version

در نظر داشته باشید راه اندازی کوبرنتیس خیلی هم ساده نیست، و ممکن است در فرآیند نصب کوبرنتیس با خطاها و مشکلات متعددی مواجه شوید که رفع برخی از آنها نیازمند دانش لینوکسی، تجربه بالا و شناخت کافی از سرویس ها و اجزا مرتبط با آن می باشد. البته، برخی از خطاهای رایج در این روال را در مقالات دیگری پوشش داده ام. در پایان، در صورت انجام مراحل فوق بصورت موفقیت آمیز، اکنون یک کلاستر کوبرنتیس با سه نود را خواهید داشت که یک نود در نقش master و دو نود دیگر در نقش worker ایفای نقش می کنند. امیدوارم این مقاله، برای آشنایی اولیه و شروع کار با سرویس کوبرنتیس مفید باشد و در مقالات دیگری به معماری و جزئیات بیشتر کوبرنتیس و پیکربندی آن خواهم پرداخت.

رفع خطا 2: خطای دیگری که ممکن است با آن برخورد کنید در زمان اعمال کردن شبکه flannel می باشد. پس از اجرای این دستور، ممکن است ارتباط شبکه ای بین نودها و نود مستر قطع شود. دلیل این موضوع، بخاطر cidr اشتباهی هست که در زمان init کردن کلاستر وارد کرده اید. در نظر داشته باشید cidr تنظیم شده برای کلاستر بایستی آدرسی متفاوت با آدرس کارت شبکه فعلی نودها (مستر/ورکر) باشد. برای رفع مشکل، بایستی با اجرای دستور kubeadm reset تنظیمات کلاستر را ریست کرده و از ابتدا پیکربندی کلاستر را انجام دهید. در ادامه نیز از دستورات ip link delete cni0 و دستور ip link delete flannel.1 استفاده کنید تا اینترفیس های اضافه شده شبکه flannel پاکسازی شوند. با اجرای این دستورها، ارتباط پینگ بین نودهای کلاستر برقرار می شود.

 

فرستادن دیدگاه


حامیان