نصب کلاسترینگ کوبرنتیس در اوبونتو 16.04
در این مقاله میخوانید
نحوه نصب 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 پرداختیم.