راحت‌ترین روش نصب kubernetes

مقدمه:

امروز قصد داریم تا یکی از راحت‌ترین راه‌های ممکن برای ساخت یک کلاستر kubernetes را به شما توضیح دهیم.

در این روش با استفاده از یکی از سریع‌ترین و بهترین ابزارهای نصب k8s که توسط تیم kubernetes ارائه شده است می‌توانیم در سریع‌ترین زمان ممکن یک کلاستر k8s آماده به کار داشته باشیم.

اسم این ابزار kubespray بوده و با استفاده از آن می‌توانیم ابزار‌های بسیار زیادی در k8s را بعد از نصب در اختیار داشته باشیم.

در ادامه به توضیح کلی kubespray می‌پردازیم.


ابزار Kubespray چیست؟

به تعریف کلی kubespray را می‌توان ترکیبی از ابزار‌های انسیبل دانست که بعد از تنظیم و اجرا کلاستر k8s مورد نظر را به ما ارائه می‌کند.

مزیت‌های kubespray:

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

اجزای پشتیبانی شده توسط kubespray:

اجزای زیر در صورتی که قبل از نصب در داخل فایل‌های تنظیمات آن‌را تنظیم کرده باشید؛ بعد از نصب در دسترس خواهند بود:

هسته:

  • Kubernetes
  • Etcd
  • Docker
  • Containerd
  • Cri-o

شبکه:

  • cni-plugins
  • Calico
  • Canal
  • Cilium
  • Flanneld
  • Kube-ovn
  • Multus
  • Ovn4nfv
  • Weave

برنامه‌های اجرایی:

  • Ambassador
  • Cephfs-provisioner
  • Rbd-provisioner
  • Cert-manager
  • Coredns
  • Ingress-ngins

پیش‌نیاز‌های نصب kubernetes با kubespray:

حداقل پیش‌نیاز‌های مورد نیاز برای نصب kubernetes توسط kubespray به شرح زیر می‌باشند:

  • نصب برنامه‌های Ansible v2.9.x و Jinja 2.11+ و python-netaddr
  • نصب python-pip و python3-pip
  • نصب docker v19 و docker-compose
  • قابلیت پشتیبانی از IPv4 Forwarding
  • کیوب اسپری را به عنوان کاربر root اجرا کنید.

حداقل پیش‌نیاز‌های سخت‌افزاری:

  • ۱.۵ گیگابایت فضای ذخیره‌سازی در مستر
  • ۱ گیگابایت فضای ذخیره‌سازی در هر سرور

شروع به نصب:

ابتدا باید پکیج‌های معرفی شده در قسمت با‌لا را بر روی سرور خود نصب کنید؛ به‌طور مثال برای سرور ubuntu 18.04:

apt-get install --no-install-recommends -y python ca-certificates git make jq nmap curl uuid-runtime bc python3-pip python-pip

حال نوبت آن است که Ansible را نصب کنیم:

apt update -y
apt install software-properties-common -y
apt-add-repository --yes --update ppa:ansible/ansible
apt install ansible -y

در این قسمت داکر را با ورژنی که مطابقت با فرآیند نصب ما دارند نصب می‌کنیم.

apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository &quotdeb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot
apt-get update -y
apt-get install docker-ce=5:19.03.15~3-0~ubuntu-bionic docker-ce-cli=5:19.03.15~3-0~ubuntu-bionic containerd.io=1.3.9-1

سرویس Docker را فعال می‌کنیم:

systemctl start docker
systemctl enable docker

با دو دستور زیر ابتدا IP Forwarding را فعال کرده و سپس حافظه Swap را غیرفعال می‌کنیم.

echo &quotnet.ipv4.ip_forward=1&quot >> /etc/sysctl.conf
swapoff -a

با دستور زیر یک کلید rsa می‌سازیم تا امکان استفاده از ssh بدون نیاز به رمز عبور را برای Ansible فراهم سازیم.

ssh-keygen

و با دستور زیر کلید خود را در تمام سرور‌ها به صورت یک به یک قرار می‌دهیم. ( به جای <server name> از آیپی هر سرور برای انتقال کلید به آن استفاده کنید.

ssh-copy-id root@<server name>

وقتی تا به اینجا رسیدیم تقریبا پیش‌نیازهای نصب انجام شده و نوبت دریافت پروژه از ‌Github می‌باشد.

git clone https://github.com/kubernetes-incubator/kubespray.git

و وارد پوشه kubespray به وجود آمده می‌شویم:

cd kubespray

در این مرحله باید تمام پیش‌نیاز‌های باقی مانده با استفاده از دستور زیر نصب شده یا چک شوند:

sudo pip install -r requirements.txt

سپس برای تنظیم کاربر مورد استفاده برای انجام فرآیند نصب kubernetes از دستور زیر استفاده می‌کنیم:

echo &quotremote_user=ubuntu&quot >> ansible.cfg

در این مرحله ابتدا از پوشه اصلی نصب یک رونوشت تهیه می‌کنیم تا در صورتی که مشکلی در تنظیمات پیش‌آمد بتوانیم از فایل‌های دست نخورده منبع تهیه کرده و مشکل را برطرف کنیم:

cp -rfp inventory/sample inventory/prod

با دستور زیر فایل hosts.ini که در آن آدرس سرور‌هایی که به کلاستر اضافه می‌شوند نوشته می‌شود و از آن‌جا در دسترس قرار می‌گیرند ساخته می‌شود. (به جای IPهای داخل دستور از IPهای سرور‌های خود استفاده کنید.)

CONFIG_FILE=inventory/prod/hosts.ini python3 contrib/inventory_builder/inventory.py 192.168.1.101 192.168.1.102 192.168.1.103 192.168.1.104

بعد از استفاده از دستور بالا یک فایل با نام inventory/prod/hosts.ini ساخته می‌شود و این فایل به‌این صورت می‌باشد:

[all]
node1    ansible_host=192.168.1.101 ip=192.168.1.101
node2    ansible_host=192.168.1.102 ip=192.168.1.102
node3    ansible_host=192.168.1.103 ip=192.168.1.103
node4    ansible_host=192.168.1.104 ip=192.168.1.104

[kube-master]
node1
node2

[kube-node]
node1
node2
node3
node4

[etcd]
node1
node2
node3

[k8s-cluster:children]
kube-node
kube-master

[calico-rr]

[vault]
node1
node2
node3

تا اینجا فرآیند نصب به نیمه خود رسیده است.

در این مرحله خود شما باید در داخل آدرس inventory/prod/group_vars/ و هر دو پوشه all و k8s-cluster و تمام فایل‌های داخل را مطالعه کرده و با توجه به نیاز خود، فرآیند نصب را شخصی‌سازی کرده و ابزار‌های خود را اضافه، تغییر یا غیرفعال کنید.

تنها قسمت باقی مانده از فرآیند نصب؛ دستور زیر است که ansible را فعال کرده و وارد مرحله نصب می‌شود؛ این مرحله تقریبا ۳۰ دقیقه تا یک ساعت (حتی بیشتر) زمان میبرد.

ansible-playbook -b -v -i inventory/prod/hosts.ini cluster.yml -vvvv

در پایان بعد از اتمام کار موفق انسیبل می‌توانید با دستور زیر از صحت و سلامت کلاستر خود اطمینان حاصل فرمایید:

kubectl get nodes

امیدوارم اطلاعات منتشر شده در این مقاله توانسته باشد کمکی به شما کرده باشد.

با تشکر از تیم ابر آراز که زمان لازم برای جمع آوری این مطالب را در اختیار من قرار داد.

در صورتی که نیاز به سرویس تحت پلتفرم ابری داشتید؛ می‌توانید سرویس‌هایی با قیمت و کیفیت مناسب را از ما تهیه نمایید.

آدرس ما: arazcloud.com