Kubernetes یا k8s که همچنین برای سادگی Kube گفته می شود ، یک پلت فرم منبع باز ارکستراسیون کانتینر است که برای مقیاس گذاری خودکار و استقرار کانتینرها استفاده می شود. در این مقاله نحوه نصب کلاستر Kubernetes بر روی سرور اوبونتو 20.04 (Focal Fossa) با استفاده از kubeadm را نشان خواهیم داد.
من از سه سرور Ubuntu 20.04 LTS استفاده کرده ام. در زیر الزامات سیستم در هر سیستم اوبونتو آورده شده است.
حداقل 2 گیگابایت RAM
2 هسته (2 vCPU)
فضای آزاد 15 گیگابایتی روی var/
کاربر با دسترسی sudo
اتصال به اینترنت پایدار
Ubuntu 20.04 LTS Server – K8s-master – 192.168.122.40
Ubuntu 20.04 LTS Server – K8s-node-0 – 192.168.122.41
Ubuntu 20.04 LTS Server – K8s-node-1 – 192.168.122.42
مرحله 1) تنظیم Hostname و تغییر فایل etc/hosts
دستور hostnamectl را برای تنظیم نام host در هر node اجرا کنید.
sudo hostnamectl set-hostname "k8s-master" // Run this command on master node
sudo hostnamectl set-hostname "k8s-node-0" // Run this command on node-0
sudo hostnamectl set-hostname "k8s-node-1" // Run this command on node-1
ورودی های زیر را در پرونده های etc/hosts
در هر node اضافه کنید.
192.168.122.40 k8s-master
192.168.122.41 k8s-node-0
192.168.122.42 k8s-node-1
مرحله 2) نصب Docker به عنوان Container Runtime (CRI) روی node های master و worker
برای نصب docker به هر node وارد شوید و دستورات زیر را اجرا کنید.
sudo apt update
sudo apt install -y docker.io
اکنون سرویس docker را در هر node با استفاده از دستور systemctl فعال و شروع کنید.
sudo systemctl enable docker.service --now
برای تأیید وضعیت سرویس docker و نسخه آن ، دستورات زیر را اجرا کنید.
systemctl status docker
docker --version
مرحله 3) Swap را غیرفعال و IP forwarding را در همه node ها فعال کنید
Swap Space را در همه node ها از جمله node های worker غیرفعال میکنیم، دستورات زیر را اجرا میکنیم:
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
برای فعال کردن ip forwarding به طور دائم، فایل “etc/sysctl.conf
” را ویرایش کرده و به دنبال خط “net.ipv4.ip_forward = 1” بگردید و آن را از حالت کامنت خارج کنید. پس از انجام تغییرات در فایل، دستور زیر را اجرا کنید.
sudo sysctl -p
مرحله 4) Kubectl ، kubelet و kubeadm را روی همه node ها نصب کنید
دستورات زیر را بر روی همهی node ها اجرا کنید تا kubectl ، kubelet و kubeadm را نصب کنید.
sudo apt install -y apt-transport-https curl
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"
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
توجه: هنگام نوشتن این مقاله ، مخزن Kubernetes Ubuntu 16.04 (Xenial Xerus) در دسترس بود اما در آینده ، وقتی مخزن kubernetes برای اوبونتو 20.04 در دسترس قرار گرفت از مخزن اختصاصی استفاده نمایید.
مرحله ۵) راهاندازی کلاستر Kubernetes
وارد master node خود شوید و دستور زیر را اجرا کنید.
sudo kubeadm init
برای شروع استفاده از کلاستر به عنوان یک کاربر عادی، دستورات زیر را در master node اجرا کنید. دستورات زیر در خروجی دستور بالا نمایش داده میشوند.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
برای پیوستن node های worker به کلاستر، دستور مربوط به worker node ها را از خروجی کپی کرده و آن را روی هر دو worker node قرار دهید:
ubuntu@k8s-node-0:~$ sudo kubeadm join 192.168.122.40:6443 --token kgj2rx.z141xy45bm8hre2x --discovery-token-ca-cert-hash sha256:3349d12258209a4ecefe64115422c0ed8856b3a049e77bfec61e59a6958b27ad
ubuntu@k8s-node-1:~$ sudo kubeadm join 192.168.122.40:6443 --token kgj2rx.z141xy45bm8hre2x --discovery-token-ca-cert-hash sha256:3349d12258209a4ecefe64115422c0ed8856b3a049e77bfec61e59a6958b27ad
اکنون به master بروید و دستور kubectl را اجرا کنید:
ubuntu@k8s-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 10m v1.19.4
k8s-node-0 NotReady <none> 3m13s v1.19.4
k8s-node-1 NotReady <none> 3m2s v1.19.4
همانطور که می بینیم node های worker و master به کلاستر اضافه شدهاند، اما وضعیت آنها “NotReady” است. برای ایجاد وضعیت “Ready” ، باید افزونه های Pod شبکه Container Network Interface (CNI) مانند calico را مستقر کنیم.
مرحله ۶) استقرار Calico
در master node دستور kubectl را اجرا میکنیم:
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
هنگامی که pod شبکه با موفقیت استقرار یافت، وضعیت node ها به Ready تغییر میکند. برای بررسی وضعیت node ها ، دستور kubectl را دوباره اجرا کنیم.
kubectl get nodes
برای تأیید وضعیت Pod ها در همه namespace ها، دستور زیر را اجرا کنید.
kubectl get pods --all-namespaces
خروجی بالا تأیید می کند که همه Pod ها در حال کار و سالم هستند.
بیایید سعی کنیم pod، سرویس و deployment مستقر کنیم تا ببینیم کلاستر Kubernetes ما خوب کار می کند یا خیر.
توجه: برای فعال کردن bash-completion در master، موارد زیر را اجرا کنید.
echo 'source <(kubectl completion bash)' >>~/.bashrc
مرحله ۷) تست کلاستر Kubernetes
بیایید یک استقرار به نام nginx-web با ایمیج nginx در namesoace پیش فرض ایجاد کنیم، دستور kubectl زیر را در master node اجرا کنید.
kubectl create deployment nginx-web --image=nginx
برای تأیید وضعیت استقرار ، دستور زیر را اجرا کنید.
kubectl get deployments.apps
kubectl get deployments.apps -o wide
kubectl get pods
همانطور که می بینیم استقرار با موفقیت ایجاد شده است.
بیایید تعداد استقرار را افزایش دهیم، replicas را روی 4 تنظیم کنیم. دستور زیر را اجرا کنید:
kubectl scale --replicas=4 deployment nginx-web
اکنون وضعیت استقرار خود را با استفاده از دستورات زیر بررسی کنید
kubectl get deployments.apps nginx-web
kubectl describe deployments.apps nginx-web
خروجی بالا تأیید می کند که استقرار مبتنی بر nginx با موفقیت افزایش یافته است.
حالا یک تست دیگر انجام دهیم، یک Pod به نام “http-web” ایجاد کنیم و آن را از طریق سرویس با نام “http-service” با پورت 80 و NodePort به بیرون Expose کنیم.
دستور زیر را برای ایجاد Pod اجرا کنید.
kubectl run http-web --image=httpd --port=80
با استفاده از دستور زیر یک سرویس ایجاد کنید و Pod ایجاد شده با پورت 80 را expose کنید.
kubectl expose pod http-web --name=http-service --port=80 --type=NodePort
kubectl get service http-service
kubectl describe service http-service
Node IP یا hostname پاد http-web را که بر روی آن مستقر شده دریافت کنید و سپس از طریق NodePort به سرور وب دسترسی پیدا کنید (32365)
kubectl get pods http-web -o wide
curl http://k8s-node-1:32365
همانطور که انتظار می رفت خوب کار می کند. در این پست ما کلاستر Kubernetes را با موفقیت در سرور LTS اوبونتو 20.04 راه اندازی کرده ایم.
سلام
ممنون از مطلبتون
لطفا برای استفاده از ingress و loadbalancing هم بنویسید.
همچنین استفاده از istio
تشکر
سلام.
حتما در خصوص لودبالانسر ها خواهیم گفت.
سلام
اگر بخواییم 2 تا مستر مثلا داشته باشیم و باقی ورکر چیکار باید کرد؟
سلام خیلی ممنونم از توضیح کاملتون