نصب کلاسترینگ کوبرنتیس در اوبونتو 16.04

Avatar
نویسنده: دریا آزادخواه
چهارشنبه 19 تیر 1398
مطالعه: ۹ دقیقه ۰ نظر ۳۷۹ بازدید

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

خرید سرویس لینوکس برای نصب کلاسترینگ کوبرنتیس

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

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

برای نصب   از سه عدد سرور لینوکس 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

 

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

نصب پیش نیاز های کوبرنتیس در لینوکس

در این قسمت باید پکیج های مورد نیاز کوبرنتیس در سیستم عامل را بوسیله ” 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 http://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: copy admin.conf to user's kube config
copy:
src: /etc/kubernetes/admin.conf
dest: /home/ubuntu/.kube/config
remote_src: yes
owner: ubuntu

 

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 <none> 1d v1.10.1
worker2 Ready <none> 1d v1.10.1

 

اگر وضعیت STATUS سرور ها در حالت ready بود، به این معنی است که این قسمت از سرور به درستی کار می کند و آماده انجام کارها می باشد.

و اگر وضعیت STATUS هر سروری در حالت ” NotReady ” باشد نشان دهنده این است که تنظیمات آن سرور هنوز به اتمام نرسیده است. حدود 5 تا 10 دقیقه قبل از اجرای مجدد دستور ” 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 <none> 443/TCP 1d
nginx NodePort 10.109.228.209 <none> 80:nginx_port/TCP 40m

 

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

برای بررسی صحت عملکرد آدرس http://worker_1_ip:nginx_port یا http://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 <none> 443/TCP 1d
و در انتها deployment را حذف نمایید:
kubectl get deployments
Output
No resources found.

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

با خدمات ابری پارس پک آشنا شوید

اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم