در این آموزش، نحوه ایجاد یک Kubernetes Cluster با استفاده از ویژگی MicroK8s ،HA را خواهید آموخت. بهجای استفاده از چندین ماشین یا public cloud برای میزبانی Cluster، یاد میگیرید که چگونه از Multipass به عنوان پایهای برای یک local cloud استفاده کنید.
Kubernetes چیست؟
Cluster های Kubernetes برنامههای بسته بندی شده را به روشی قابل اعتماد و مقیاس پذیر میزبانی میکنند. با در نظر گرفتن DevOps Kubernetes کارهای تعمیر و نگهداری مانند ارتقاء و امنیت را ساده میکند.
MicroK8s چیست؟
MicroK8s یک توزیع سبک Kubernetes دارای گواهینامه CNCF، برای ایستگاههای کاری، Cluster ها ودستگاههای اینترنت اشیاء است.
به صورت فوری بسته بندی شده و تمام خدمات Kubernetes را بومی (یعنی بدون ماشین های مجازی) اجرا میکند. مجموعهای از کتابخانهها و فایلهای باینری مورد نیاز را به همراه محبوب ترین افزونههای Kubernetes بسته بندی میکند.
آنچه در این آموزش خواهید آموخت:
نحوه نصب Multipass برای اجرای و مدیریت ماشینهای مجازی
نحوه استقرار نمونههای MicroK8s در ماشینهای مجازی
نحوه پیوستن به node های MicroK8s در یک خوشه Kubernetes
آنچه شما نیاز دارید:
دستگاهی با اوبونتو، ویندوز یا macOS با حداقل 8 گیگابایت رم

1. نصب Multipass
اگر از Windows یا macOS استفاده میکنید، میتوانید این مرحله را نادیده بگیرید، زیرا نصب کنندگان MicroK8s Windows و macOS قبلاً Multipass را به عنوان بخشی از بسته نصب نصب کردهاند.
Multipass برای ایجاد یک mini-cloud مجازی در ایستگاه کاری شما استفاده میشود. در این آموزش، ما نمونههای MicroK8s را بر روی VMهای Multipass اجرا میکنیم تا خوشه Kubernetes خود را در یک ایستگاه کاری لینوکس ایجاد کنیم.
Multipass برای لینوکس به عنوان یک بسته snap منتشر شده است که در فروشگاه Snap موجود است. به لطف آن برای اکثر توزیعهای اصلی لینوکس در دسترس است. پس از اجرای برنامههای فوری بر روی توزیع خود، نصب Multipass به آسانی به شرح زیر است:
snap install multipass
راه اندازی ماشینهای مجازی
هنگامی که Multipass را روی دستگاه خود نصب کردید، میتوانید از آن برای چرخاندن ماشینهای مجازی اوبونتو استفاده کنید. در این آموزش، ما 3 ماشین مجازی برای میزبانی node های MicroK8s خود ایجاد میکنیم.
multipass launch -m 4Gb -n <vm-name>
اگر نام VM را با استفاده از آرگومان -n مشخص نکنید، Multipass به طور خودکار یک نام تصادفی به ماشین مجازی شما اختصاص میدهد. آرگومان -m مقدار مشخصی از حافظه را به ماشین مجازی شما اختصاص میدهد. در اینجا ، برای اطمینان از اینکه VM دارای حافظه کافی برای اجرای cluster K8s شما است، ما 4 گیگابایت اختصاص میدهیم.
از دستورات پوسته VM های خود استفاده کنید
برای ورود به ماشینهای مجازی خود و استفاده از اعلان پوسته آنها، از موارد زیر استفاده کنید:
multipass shell <vm-name>
ماشینهای مجازی چندپایه شما از جدیدترین image اوبونتو استفاده میکنند. میتوانید از این موارد برای نصب MicroK8 و ایجاد خوشه Kubernetes استفاده کنید.
MicroK8s .2 را نصب کنید
روی هر یک از VM های خود اجرا کنید:
sudo snap install microk8s --classic
بسته به منابع سخت افزاری شما، نصب میتواند تا چند دقیقه طول بکشد.
برای نصب MicroK8s در سیستم عاملهای دیگر (Windows ، macOS ، Raspberry Pi و غیره) اسناد MicroK8s را ببینید.
MicroK8s یک برنامه snap است و به همین دلیل، اغلب در هر نسخه از Kubernetes به روز میشود. برای پیروی از یک سری نسخههای بالادستی خاص، ممکن است در حین نصب یک کانال را انتخاب کنید. به عنوان مثال، برای دنبال کردن سری v1.19:
sudo snap install microk8s --classic --channel=1.18/stable
برای بررسی وضعیت Node در MicroK8s خود پس از اتمام نصب میتوانید از موارد زیر استفاده کنید:
microk8s status --wait-ready
در صورت دریافت پیام مجوز کافی، باید از دستورات زیر برای افزودن کاربر ubuntu به گروه sudoers microk8s داخل VM استفاده کنید:
sudo usermod -a -G microk8s ubuntu
sudo chown -f -R ubuntu ~/.kube
برای تأیید تغییرات، میتوانید از پوسته VM خارج شده و دوباره وارد شوید.
3. یک Cluster چندگره MicroK8s ایجاد کنید
اکنون اجازه دهید روی ایجاد cluster در kubernetes متمرکز شویم. در Node اولیه، اجرا کنید:
microk8s add-node
این دستور خروجی زیر را به شما میدهد:
Join node with:
microk8s join ip-172-31-20-243:25000/DDOkUupkmaBezNnMheTBqFYHLWINGDbf
If the node you are adding is not reachable through the default interface
you can use one of the following:
microk8s join 10.1.84.0:25000/DDOkUupkmaBezNnMheTBqFYHLWINGDbf
microk8s join 10.22.254.77:25000/DDOkUupkmaBezNnMheTBqFYHLWINGDbf
دستور join را از خروجی کپی کرده و از Node بعدی MicroK8s اجرا کنید. پیوستن موفقیت آمیز ممکن است چند دقیقه طول بکشد.
این فرآیند (ایجاد یک توکن ، اجرای آن از Node متصل) را برای Node سوم تکرار کنید.
اگر میخواهید به Node های اضافی بپیوندید، باید همان روند را تکرار کنید.
4. یک نمونه برنامه containerised را Deploy کنید
اکنون یک استقرار microbot با سه pod از طریق kubectl cli ایجاد میکنیم. این را روی هر یک از Node های صفحه کنترل اجرا کنید:
microk8s kubectl create deployment microbot --image=dontrebootme/microbot:v1
microk8s kubectl scale deployment microbot --replicas=3
برای نشان دادن Deploy، باید یک سرویس ایجاد کنیم:
microk8s kubectl expose deployment microbot --type=NodePort --port=80 --name=microbot-service
پس از چند دقیقه Cluster ما به این شکل است:
> microk8s kubectl get all --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE [0/594]
kube-system pod/calico-kube-controllers-847c8c99d-mjgqn 1/1 Running 0 1m
kube-system pod/calico-node-2x7t7 1/1 Running 0 1m
kube-system pod/calico-node-vkzg8 1/1 Running 0 1m
default pod/microbot-5f5499d479-n647g 1/1 Running 0 30s
default pod/microbot-5f5499d479-x25lc 1/1 Running 0 35s
default pod/microbot-5f5499d479-xrbf2 1/1 Running 0 40s
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 1m
default service/microbot-service NodePort 10.152.183.99 <none> 80:30017/TCP 42s
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/calico-node 2 2 2 2 2 kubernetes.io/os=linux 1m
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/calico-kube-controllers 1/1 1 1 1m
default deployment.apps/microbot 3/3 3 3 40s
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system replicaset.apps/calico-kube-controllers-847c8c99d 1 1 1 1m
default replicaset.apps/microbot-5f5499d479 3 3 3 40s
در بالا، Podهای microbot را داریم، service/microbot-service
در لیست دوم خدمات است. سرویس ما دارای Cluster ، IPای است که از طریق آن میتوانیم به آن دسترسی پیدا کنیم. اما توجه داشته باشید که سرویس از نوع NodePort است. این بدان معناست که استقرار در یک پورت در دستگاه میزبان نیز موجود است. آن پورت به طور تصادفی انتخاب میشود و در این مورد، 30017 میباشد.
از مرورگر خود به برنامه دسترسی پیدا کنید
برای دسترسی به سرویس microbot از مرورگر محلی خود، باید آن را به IP یکی از ماشینهای مجازی خود و پورتی که سرویس از آن در معرض نمایش است، نشان دهید.
برای مشاهده آدرس IP آن از دستور ip در یکی از ماشینهای مجازی خود استفاده کنید:
>ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:c9:b1:2f brd ff:ff:ff:ff:ff:ff
inet 10.166.194.208/24 brd 10.166.194.255 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fec9:b12f/64 scope link
valid_lft forever preferred_lft forever
5: vxlan.calico: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1410 qdisc noqueue state UNKNOWN group default
link/ether 66:ae:23:b9:4c:ca brd ff:ff:ff:ff:ff:ff
inet 10.1.202.0/32 brd 10.1.202.0 scope global vxlan.calico
valid_lft forever preferred_lft forever
inet6 fe80::64ae:23ff:feb9:4cca/64 scope link
valid_lft forever preferred_lft forever
6: cali6d8cc5df688@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-f8c70512-4448-aa9d-4e8a-41d780c92f43
inet6 fe80::ecee:eeff:feee:eeee/64 scope link
valid_lft forever preferred_lft forever
9: cali6f43c081ad9@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-78561df6-7132-a1ba-9b60-30d1010d555a
inet6 fe80::ecee:eeff:feee:eeee/64 scope link
valid_lft forever preferred_lft forever
10: calic0bf7d8c9d3@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-61873c9a-7b3c-e0ac-ab6a-bd5ea85a0b6c
inet6 fe80::ecee:eeff:feee:eeee/64 scope link
valid_lft forever preferred_lft forever
در مورد ما، ens4 رابط شبکه تعیین شده با IP 10.166.194.208 است.
اکنون میتوانیم مرورگری را باز کنیم، آن را به 10.166.194.208:30017 اشاره کنیم و از میکروبات خود لذت ببریم.

5. جمع بندی
شما در حال حاضر دارای یک Kubernetes چند Node بسیار بالا برای تنظیم Containerهای خود هستید.
اکنون میتوانید تمام خدمات MicroK8s را متوقف کنید:
microk8s stop
یا تنظیمات Cluster خود را با موارد زیر بازنشانی کنید:
microk8s reset
جهت مطالعه دیگر مقالات مرتبط صفحه آموزشگاه را مشاهده نمائید.
منبع: www.ubuntu.com