نصب kubernetes در لینوکس

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

نحوه نصب 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 [email protected]_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 [email protected]_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.
 

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

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

    ابر سرور

    ابر سرور

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

    هایبرید سرور

    هایبرید سرور

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

    ماکرو سرور

    ماکرو سرور

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

    هاست ابری

    هاست ابری

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

    هاست دانلود

    هاست دانلود

    سیاری از مدیران سایت‌های دانلود و یا سایت‌هایی که با ترافیک بالایی برای به اشتراک‌گذاری فایل‌های خود روبرو هستند، عمدتا با مشکلاتی مانند هزینه‌های گزاف زیرساختی و یا مصرف بالای منابع سخت‌افزاری روبرو می‌شوند. از همین رو پارس‌پک با معرفی فضای هاست دانلود برای این دسته از کاربران، محصول مناسبی را پیش‌بینی نموده است.

    مطالعه این مطالب نیز پیشنهاد می‌شود

    مقالات و نظرات اعضای تیم ما درباره تکنولوژی، روزهای کاری و چیزای دیگر…

  • کلیه حقوق برای پارس پک محفوظ می باشد.

    Copyright © 2022 ParsPack Cloud Computing Technology ® , All Rights Reserved.