نصب سریع کلاسترینگ کوبرنیتیس در اوبونتو ۱۶٫۰۴

اشتراک گذاری پست

کوبرنیتیس” Kubernetes ” یک سیستم مدیریت مخازن است که به صورت متن باز و رایگان ارائه داده شده است. این پروژه توسط گوگل و بر اساس تجربیات اجرای مخازن در محصولات ایجاد گردیده است. در این آموزش به صورت خلاصه و کاربردی به نصب ، راه اندازی و تنظیمات Kubernetes بوسیله ” Kubeadm ” و برنامه مدیریت تنظیمات ” Ansible ” بر روی سیستم عامل Ubuntu 16.04 می پردازیم.

نصب کلاسترینگ

برای نصب کلاسترینگ Kubernetes از سه عدد سرور Ubuntu 16.04 استفاده می کنیم که یک سرور به عنوان Master در نقش مدیریت و تنظیم کننده وظایف دو سرور دیگر عمل خواهد کرد و دو سرور دیگر به عنوان سرور Worker در کلاسترینگ استفاده می شوند.
همچنین لازم است که در این آموزش با مفاهیم Ansible و نقش Playbook ها در Ansible و مفهوم Pod در Kubernetes آشنایی داشته باشید.

تنظیم دایرکتوری فضای کار و فایل فهرست Ansible

در ابتدا نیاز است یک دایرکتوری برای Workspace و استفاده فضای کاری مورد نیازتان ایجاد نمایید. سپس در این دایرکتوری یک فایل ایجاد کنید که شامل اطلاعات و گروه های سرورها باشد.

mkdir ~/kube-cluster
cd ~/kube-cluster
nano ~/kube-cluster/hosts

 

خطوط زیر را در این فایل وارد کرده و مقادیر گفته شده را با مقادیر مناسب جایگزین نمایید. منظور مقادیر master_ip و worker_1_ip و worker_2_ip می باشد:

mkdir ~/kube-cluster
cd ~/kube-cluster
nano ~/kube-cluster/hosts

ایجاد کاربر در سرور های متصل

در این مرحله بر روی سرور ها یک کاربر جدید با سطح دسترسی sudo ایجاد کنید که سرورها با دسترسی این کاربر به یکدیگر متصل شوند. برای این کار از ” Ansible ” استفاده نمایید و یک ” Playbook ” به صورت زیر ایجاد نمایید :

– hosts: all
become: yes
tasks:
– name: create the ‘ubuntu’ user
user: name=ubuntu append=yes state=present createhome=yes shell=/bin/bash

– name: allow ‘ubuntu’ to have passwordless sudo
lineinfile:
dest: /etc/sudoers
line: ‘ubuntu ALL=(ALL) NOPASSWD: ALL’
validate: ‘visudo -cf %s’
– name: set up authorized keys for the ubuntu user
authorized_key: user=ubuntu key=”{{item}}”
with_file:
– ~/.ssh/id_rsa.pub

سپس Playbook را اجرا کنید

ansible-playbook -i hosts ~/kube-cluster/initial.yml

این دستور بین دو تا ۵ دقیقه اجرا خواهد شد.

نصب پیش نیاز های kubernetes

در این قسمت باید پکیج های مورد نیاز ” Kubernetes ” در سیستم عامل را بوسیله ” apt ” که ابزار مدیریت بسته های Ubuntu می باشد، نصب کنید. این پکیج ها به ترتیب ” Docker “، ” Kubeadm “، ” Kubelet ” و ” Kubectl ” هستند. این بسته ها باید بر روی تمامی سرور ها نصب شوند، لذا بدین منظور از ” Ansible ” با ” Playbook ” زیر استفاده نمایید :

nano ~/kube-cluster/kube-dependencies.yml

سپس play زیر را برای نصب پکیج ها در سرور ها وارد کنید :

– hosts: all
become: yes
tasks:
– name: install Docker
apt:
name: docker.io
state: present
update_cache: true

– name: install APT Transport HTTPS
apt:
name: apt-transport-https
state: present

– name: add Kubernetes apt-key
apt_key:
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
state: present

– name: add Kubernetes’ APT repository
apt_repository:
repo: deb https://apt.kubernetes.io/ kubernetes-xenial main
state: present
filename: ‘kubernetes’

– name: install kubelet
apt:
name: kubelet
state: present
update_cache: true

– name: install kubeadm
apt:
name: kubeadm
state: present

– hosts: master
become: yes
tasks:
– name: install kubectl
apt:
name: kubectl
state: present

بعد از اتمام کار فایل را ذخیره کرده و خارج شوید و Playbook را اجرا کنید :

ansible-playbook -i hosts ~/kube-cluster/kube-dependencies.yml

تنظیم سرور Master

در این مرحله تنظیمات سرور master را انجام دهید. هر ” Pod ” یک آدرس IP برای خود دارد و باید بتوان در سرور دیگر از طریق آدرس IP مربوطه به آن متصل شد. مخازنی که بر روی یک سرور هستند براحتی بوسیله رابط های محلی ارتباط برقرار می کنند. مشخص شدن مسیر شفاف از یک pod به یک pod در سرور دیگر نیاز به یک شبکه جداگانه دارد.
این کار توسط پلاگین شبکه pod انجام می شود. در این آموزش از ” Flannel ” استفاده می کنیم که یک گزینه پایدار و مناسب می باشد.

یک Ansible playbook با نام master.yml ایجاد کنید :

nano ~/kube-cluster/master.yml

متن play زیر را برای نصب Flannel و مقدار دهی اولیه کلاستر وارد نمایید:

– hosts: master
become: yes
tasks:
– name: initialize the cluster
shell: kubeadm init –pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt
args:
chdir: $HOME
creates: cluster_initialized.txt

– name: create .kube directory
become: yes
become_user: ubuntu
file:
path: $HOME/.kube
state: directory
mode: 0755

– name: copy admin.conf to user’s kube config
copy:
src: /etc/kubernetes/admin.conf
dest: /home/ubuntu/.kube/config
remote_src: yes
owner: ubuntu

– name: install Pod network
become: yes
become_user: ubuntu
shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml >> pod_network_setup.txt
args:
chdir: $HOME

creates: pod_network_setup.txt

در انتها فایل را ذخیره کرده و خارج شوید.

فایل playbook را به صورت Local اجرا کنید:

ansible-playbook -i hosts ~/kube-cluster/master.yml0

برای بررسی وضعیت سرور master از طریق ssh با دستور زیر به سرور متصل شوید :

ssh ubuntu@master_ip

پس از وارد شدن به سرور دستور زیر را اجرا نمایید :

kubectl get nodes

سپس باید خروجی مشابه زیر را مشاهده کنید:

Output
NAME STATUS ROLES AGE VERSION
master Ready master 1d v1.10.1

در سرور master تمامی تنظیمات و مقداردهی های اولیه انجام شده و وضعیت سرور در حالت readyمی باشد و برای اتصال به سرور های worker و ارسال وظایف به آنها از طریق API Server آماده است. حال می توانید سرور های worker را اضافه نمایید.

تنظیمات سرور های Worker

برای اضافه کردن گره worker باید دستوری که شامل جزئیات مورد نیاز کلاستر از قبیل آدرسIP ، پورت API سرور master و یک توکن امنیتی می باشد اجرا کنید. تنها سروری که توکن را قبول می کند می تواند به کلاستر متصل گردد.

به مسیر فضای کاری Workspace بروید و یک playbook به نام workers.yml ایجاد نمایید:

nano ~/kube-cluster/workers.yml

متن زیر را در فایل قرار دهید :

– hosts: master
become: yes
gather_facts: false
tasks:
– name: get join command
shell: kubeadm token create –print-join-command
register: join_command_raw

– name: set join command
set_fact:
join_command: “{{ join_command_raw.stdout_lines[0] }}”

– hosts: workers
become: yes
tasks:
– name: join cluster
shell: “{{ hostvars[‘master’].join_command }} >> node_joined.txt”
args:
chdir: $HOME
creates: node_joined.txt

فایل را ذخیره کرده و خارج شوید.

سپس فایل playbook را اجرا کنید :

ansible-playbook -i hosts ~/kube-cluster/workers.yml0

با اضافه شدن سرور های worker کلاستر شما به صورت کامل تنظیم شده و worker ها آماده اجرای بارهای کاری ارسالی هستند.

بررسی کلاستر

در این مرحله وضعیت گره ها یا سرور های متصل به سرور master را بررسی کنید. ابتدا به سرور master متصل شوید :

ssh ubuntu@master_ip

سپس جهت بررسی وضعیت سرور دستور زیر را اجرا کنید :

kubectl get nodes

خروجی باید مشابه زیر نمایش داده شود :

Output
NAME STATUS ROLES AGE VERSION
master Ready master 1d v1.10.1
worker1 Ready 1d v1.10.1
worker2 Ready 1d v1.10.1

اگر وضعیت STATUS سرور ها در حالت ready بود، به این معنی است که این قسمت از سرور به درستی کار می کند و آماده انجام کارها می باشد.
و اگر وضعیت STATUS هر سروری در حالت ” NotReady ” باشد نشان دهنده این است که تنظیمات آن سرور هنوز به اتمام نرسیده است. حدود ۵ تا ۱۰ دقیقه قبل از اجرای مجدد دستور ” kubectl get node ” صبر کنید، سپس مجددا خروجی را بررسی نمایید. اگر هنوز وضعیت سرور ها NotReady بود، باید دستورات مراحل قبل را مجددا بررسی و اجرا نمایید.

اجرای یک برنامه در کلاستر

اکنون می توانید هر برنامه ای که نیاز به مخزن دارد را اجرا کنید. برای نمونه برنامه Nginx را بر روی کلاستر اجرا می کنیم. در سرور master دستور زیر را جهت ایجاد یک deployment از nginx وارد کنید:

kubectl run nginx –image=nginx –port 80

سپس برای ایجاد یک سرویس با نام nginx به منظور در اختیار عموم قرار دادن این برنامه، دستور زیر را وارد نمایید. این کار از طریق ” NodePort ” به منظور باز کردن یک پورت دلخواه جهت اتصال به یک pod انجام می شود:

kubectl expose deploy nginx –port 80 –target-port 80 –type NodePort

در ادامه دستور زیر را اجرا کنید :

kubectl get services

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

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 1d
nginx NodePort 10.109.228.209 80:nginx_port/TCP 40m

همانطور که در خروجی مشاهده می کنید Nginx بر روی پورت ۸۰ کار می کند. Kubernetes یک پورت تصادفی بالاتر از ۳۰۰۰۰ که مطمئن است به سرویس دیگری تعلق نگرفته است را به این برنامه خواهد داد. 

برای بررسی صحت عملکرد آدرس https://worker_1_ip:nginx_port یا https://worker_2_ip:nginx_port را در مرورگر سرور محلی خود وارد نمایید. در این قسمت باید صفحه Nginx را مشاهده کنید.
برای حذف برنامه Nginx ابتدا سرویس آن را از سرور master حذف کنید :

kubectl delete service nginx

دستور زیر را وارد نمایید تا از حذف شدن برنامه مطمئن شوید :

kubectl get services

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

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 1d
و در انتها deployment را حذف نمایید:
kubectl get deployments
Output
No resources found.

مقالات مرتبط را مطالعه کنید😍

حواله یوان
حواله یوان
شاید وقتی صحبت از نقل‌وانتقالات ارزی مانند ارسال حواله یوان به چین باشد، خیلی‌ها این کار را دشوار و طاقت‌فرسا و پرریسک بدانند. در واقع
حواله روپیه
حواله روپیه به هند ارسال و دریافت حواله روپیه به هند با کمترین نرخ ارسال و دریافت حواله روپیه در کمترین زمان ممکن امکان ارسال
حواله ایران به رومانی
حواله ایران به رومانی شرکت فناوران امید استعلام نرخ ساعت 12 ظهر برای آگاهی از نرخ با پشتیبانی ما در ارتباط باشید:پشتیبان تلگرام @fanavaraneomid_supportپشتیبانی واتساپ:
0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
0
افکار شما را دوست داریم، لطفا نظر دهید.x
اسکرول به بالا