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

کوبرنیتیس" 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

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

نصب پیش نیاز های 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 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: 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 <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 کار می کند. Kubernetes یک پورت تصادفی بالاتر از 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 © 2019 Pars Parva System Ltd. ParsPack Cloud Computing Technology ® , All Rights Reserved.