آموزش نصب کوبرنتیز kubernetes با ابزار kubespray
امروز قصد داریم تا یکی از راحتترین راههای ممکن برای آموزش نصب کوبرنتیز kubernetes را به شما توضیح دهیم. در این روش با استفاده از یکی از سریعترین و بهترین ابزارهای نصب کوبرنیتز k8s که توسط تیم kubernetes ارائه شده است، میتوانیم در سریعترین زمان ممکن یک کلاستر k8s آماده به کار داشته باشیم.
اسم این ابزار kubespray بوده و با استفاده از آن میتوانیم ابزارهای بسیار زیادی در k8s را بعد از نصب در اختیار داشته باشیم. در ادامه به توضیح کلی kubespray میپردازیم. به تعریف کلی kubespray را میتوان ترکیبی از ابزارهای انسیبل دانست، که بعد از تنظیم و اجرا کلاستر k8s مورد نظر را به ما ارائه میکند.
کوبرنتیز Kubernetes چیست؟
کوبرنتیز Kubernetes یک پلتفرم قابل نصب و اجرا روی سیستم عامل های مختلف (portable)، با قابلیت های فراوان است که دراختیار همه می باشد. این پلتفرم برای مدیریت بار (load) و سرویس های کانتینر استفاده می شود و کار configuration declarative و خودکار سازی (automation) را آسان می کند. همچنین شما میتوانید در مقالهی مفاهیمی راجع به کوبرنتیز (kubernetes) اطلاعات کاملتری در مورد این پلتفرم بدست بیاورید .
پیشنهاد میکنیم برای خرید سرور مجازی مورد نظرتان به سایت ابر آراز مراجعه نمایید.مزیتهای کوبرنتیز 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 اجرا کنید.
حداقل پیشنیازهای سختافزاری
- ۱.۵ گیگابایت فضای ذخیرهسازی در مستر
- ۱ گیگابایت فضای ذخیرهسازی در هر سرور
شروع به نصب کوبرنیتز kubernetes
ابتدا باید پکیجهای معرفی شده در قسمت بالا را بر روی سرور خود نصب کنید؛ بهطور مثال برای سرور 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
در مرحله بعد برای نصب کوبرنتیز kubernetes نوبت آن است که 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 "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 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 "net.ipv4.ip_forward=1" >> /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 "remote_user=ubuntu" >> 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
امیدوارم اطلاعات منتشر شده در این مقاله توانسته باشد کمکی به شما کرده باشد.
لطفا در شبکههای اجتماعی ما را دنبال کنید.
با سلام
ممنون از مطالبی که برای نصب کوبرنیتز قرار دادید .
متاسفانه بعداز نصب مراحل بالا برای این دستور این پیام را می دهد لطف میکنید راهنمایی نمایید :
kubectl get nods#
Error from server (InternalError): an error on the server (“dial tcp 127.0.0.1:8080: socket: too many open files”) has prevented the request from succeeding
با سلام و خسته نباشید خدمت شما.
ارور مطرحه به دلیل کم بودن محدودیت باز شدن فایلهای داخل سیستم میباشد و شما میتوانید این تعداد را افزایش دهید.
برای کسب اطلاعات بیشتر بنده شما را به یک مشکل مطرح شده در استک اور فلو ارجاع میدهم تا مشکل خود را کاملا رفع نمایید.
https://stackoverflow.com/questions/32325343/go-tcp-too-many-open-files-debug
با تشکر از زمانی که گذاشتید و مقاله بنده را مطالعه کردید.
سلام ممنون بابت توضیحات کامل و جامعتون
یه سوالی داشتم اگه ما یبار اینو مثلا با 4 نود نصب کردیم و بعدش خواستیم گسترشش بدیم و مثلا 2 تا مستر دیگه به کلاستر اضافه کنیم چطور میشه؟
فکر میکنم اضافه کردن ورکر با همون توکنی که کوبرنتیس بعد نصب میده میشه راحت اضافه کرد ولی مستر چطور؟ ممنون میشم اگه حتی ورکر هم توضیح بدید یعنی چطور مستر و ورکر به کلاستری که در حال ران هست اضافه کنیم؟
به طور کلی گسترده کردن کلاستر کوبرنیتز از سمت مستر ها باید فرد تا باشه و به جهت معماری HA دیتابیس etcd نباید چهار یا دو مستر داشته باشید و بین ۳ و ۵ مستر کافی خواهد بود.
همینطور باید بگم که گسترش کلاستر کوبرنیتز با استفاده از کیوب اسپری کاملا کار راحتی بوده و هم مستر و هم ورکر رو با دوباره ران کردن و در ورژنهای جدید با پلیبوکهای جدید این امکان رو در اختیار شما قرار خواهد داد.
ممنون که مقالههای ما رو دنبال کردین و اگه موضوعی مورد نظرتون هست که میتونه بیشتر به شما کمک کنه خوشحال میشم که باما در میون بزارید.
من میخواهم با استفاده از کوبرنتیس پلتفرمی که طراحی کردم رو راه اندازی کنم و مشکل session sticky دارم ممنون میشم راهنمایی کنید چه جوری میتونم بگم که سشن ها بره رو یه کلاستر که ما در زمان تولید انستدهای مختلف مشکل نخوریم
سلام و خسته نباشید خدمت شما.
بعد از تگ زدن پادها و استفاده سرور برای مدیریت لود بر روی اینستنس ها این مشکل حل میشود.
در نظر داشته باشید که اپلیکیشن باید کلود نیتیو و ایستیت لس باشد تا بتوان آن را در دیپلوینت کوبرنیتز قرار داد.