در این مقاله قرار است مفهوم kubernetes و kubeadm را بررسی کنیم و روش نصب آن را بیاموزم.
Kubernetes (کوبرنیتز) چیست؟
Kubernetes یا k8s (عنوان غیر رسمی کوبرنیتز) یک سیستم متن باز است که برای خودکار سازی، مقیاس سازی و مدیریت برنامه های کاربردی کانتینر،استفاده می شود.
مزایای کوبر نیتزها :
- نصب و راه اندازی خودکار سیستم ها: کوبر نیتز زمانی که درحال نظارت و کنترل بر سلامت برنامه ها و پیکربندی آنهاست ، به تدریج تغییراتی را ایجاد میکند تا مطمئن شود همه نمونه ها بطور همزمان از بین نروند و وقتی مشکلی پیش آمد آن تغییرات را برای ما بازیابی کند.
- کشف خدمات و تعادل بارگذاری: کوبر نیتز برای راه اندازی pods، آدرس IP و نام DNS مربوطه را به مجموعه ی pods میدهد و بارگذاری را بین آنها توزیع میکند.
- سازماندهی مخازن: کاربران میتوانند سیستم های ذخیره ساز محلی یا ابری را بطور خودکار نصب کنند.
- پکیج کردن خودکار کانتینر: کوبر نیتز به طور خودکار کانتینرها را بر اساس نیازمنابع خود و سایر محدودیت ها توزیع می کند.کانتینرهایی که منابع بهتری به آنها اختصاص داده شده عملکرد سیستم برای آنها بهتر خواهد بود.
- استفاده از پکیج ها در کوبر نیتز: کوبر نیتز در کنار خدماتی که انجام میدهد،میتواند تنظیمات پکیج شما را نیز مدیریت کند.
- خود بازیابی: کوبر نیتز وضعیت کانتینرها را کنترل میکند و زمانی که برای کانتینرها مشکلی پیش بیاید ، کانتینرهای جدید را جایگزین آنها میکند. بنابراین کانتینرهایی که در حال حاضر شکسته اند دوباره ساخته میشوند.
- Kubeadm: وظیفهkubeadm نصب و پیکربندی خودکار اجزای کوبرنیتز،API server ، کنترل مدیریت و kube Dns میباشد .
Kubeadm چیست؟
Kubeadm مجموعه ابزاری است که همراه با توزیع کوبر نتیزها ارائه میشود و بهترین روش و متد را برای ساختن یک cluster (دسته) در زیر ساخت های موجود فراهم میکند.
فرایند نصب کوبرنیتز:
پیکربندی سرورها
برای نصب کوبر نیتز از 3 سرور با مشخصات سیستمی زیر استفاده می کنیم:
- Master server – 4 CPU and 4096 RAM
- Worker1 server – 2 CPU and 4096 RAM
- Worker2 server – 2 CPU and 4096 RAM
همه سرورها، از اوبونتو 18.04 استفاده میکنند و هر کدام از IP و DNS های زیر استفاده میکنند:
- Master server – IP 192.168.50.58
- Worker1 server – IP 192.168.50.38
- Worker2 server – IP 192.168.50.178
به روز رسانی یا آپدیت
اولین حرکت مطمئن شدن از به روز بودن تمام پکیج ها در هر سرور است:
root@host:~# apt update -y && apt upgrade -y
اضافه کردن اطلاعات HOST یا میزبان
هم اکنون باید وارد هر ماشین شوید و با استفاده از دستورات زیر ، پیکربندی پرونده hosts یا etc را ویرایش کنید :
root@host:~# tee -a /etc/hosts 192.168.50.38 worker1
> 192.168.50.178 worker2
> EOF
192.168.50.58 master
192.168.50.38 worker1
192.168.50.178 worker2
root@host:~#
بعد از اجرای کد بالا می توانیم تغییرات موجود در پرونده میزبان را به صورت زیر تایید کنیم:
root@host:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 host
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.50.58 master
192.168.50.38 worker1
192.168.50.178 worker2
root@host:~#
غیرفعال کردن swap memory
برای عملکرد صحیح kubelet ، حتما باید حافظه swap را غیرفعال کنید که این تغییر بر روی همه سرورها اعمال میشود. در صورت عدم وجود فضای کافی در RAM از فضای صفحه بندی هارد دیسک برای ذخیره موقت داده ها استفاده میشود.
با استفاده از دستورات زیر میتوانید این کار را انجام دهید:
root@host:~# sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab
root@host:~# swapoff -a
نصب و راه اندازی Kubelet , kubeadm و kubectl
برای این کار باید عناصر مورد نیاز را انتخاب کنیم. برای نمونه در این آموزش ما از سه عنصر زیر استفاده میکنیم:
- Kubelet
- Kubeadm
- Kubectl
اضافه کردن مخازن
با استفاده از دستورات زیر می توان مخازن را به مدیریت پکیج ها اضافه کرد و بررسی کلیدی را بر روی آنها انجام داد.
برای اینکه منابع HTTPS خارجی بصورت ایمن به لیست منابع apt اضافه شوند، اول apt-transport-https را نصب کنید و سپس kubelet ،kubeadm وkubectl را نصب کنید.
برای شروع نصب اولیه را بر روی سرور Master انجام خواهیم داد:
root@host:~# apt-get update && apt-get install -y
root@host:~# apt-transport-https curl
سپس باید مخازن کوبرنیتز و کلید برای بررسی اینکه همه چیز با امنیت نصب شده است را اضافه کنید:
root@host:~# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add –
OK
root@host:~#
در ادامه مخازن خود را اضافه کنید:
root@host:~# echo “deb https://apt.kubernetes.io/ kubernetes-xenial main” | tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
root@host:~#
نصب
هم اکنون سرور را دوباره اپدیت کنید تا مخزن جدید را بشناسید و پکیج ها را نصب کنید.
root@host:~# apt update
root@host:~# apt -y install vim git curl wget kubelet kubeadm kubectl
تعیین حالت
Kubelet در یک حلقه آماده به کار است و منتظر اقدامات بعدی است به همین خاطر هرچند ثانیه یکبار راه اندازی میشود. با استفاده از دستورات زیر آن را در حالت آماده به کار، قرار دهید :
root@host:~# apt-mark hold kubelet kubeadm kubectl
kubelet set on hold.
kubeadm set on hold.
kubectl set on hold.
root@host:~#
تایید نصب
اکنون با استفاده از دستورات زیر نسخه اجزای نصب شده را بررسی کنید:
root@host:~# kubectl version –client && kubeadm version
Client Version: version.Info{Major:”1″, Minor:”19″, GitVersion:”v1.19.3″, GitCommit:”1e11e4a2108024935ecfcb2912226cedeafd99df”, GitTreeState:”clean”, BuildDate:”2020-10-14T12:50:19Z”, GoVersion:”go1.15.2″, Compiler:”gc”, Platform:”linux/amd64″}
kubeadm version: &version.Info{Major:”1″, Minor:”19″, GitVersion:”v1.19.3″, GitCommit:”1e11e4a2108024935ecfcb2912226cedeafd99df”, GitTreeState:”clean”, BuildDate:”2020-10-14T12:47:53Z”, GoVersion:”go1.15.2″, Compiler:”gc”, Platform:”linux/amd64″}
root@host:~#
پیکربندی فایروال
در این مرحله باید iptables پیکربندی شود تا بتواند از طریق پل شبکه ترافیک ایجاد کند.این تغییر بسیار حیاتی است زیرا وظیفه آن بررسی ترافیک هایی است که میتوانند از اتصالات عبور کنند.
حالا باید ماژول افزودنی br_netfilter را بارگیری کنید:
root@host:~# modprobe overlay
root@host:~# modprobe br_netfilter
در پیکربندی sysctl از k8s ، مقدار 1 را تعیین میکنیم که به معنی بررسی ترافیک است.
root@host:~# tee /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
root@host:~#
و دوباره sysctl را بارگذاری کنید:
root@host:~# sysctl –system
* Applying /etc/sysctl.d/10-console-messages.conf …
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf …
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf …
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf …
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf …
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf …
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
* Applying /etc/sysctl.d/10-ptrace.conf …
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf …
vm.mmap_min_addr = 65536
* Applying /usr/lib/sysctl.d/50-default.conf …
net.ipv4.conf.all.promote_secondaries = 1
net.core.default_qdisc = fq_codel
* Applying /etc/sysctl.d/99-sysctl.conf …
* Applying /etc/sysctl.d/kubernetes.conf …
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf …
root@host:~#
نصب داکر
داکر یک کانتینر، برای محصول درحال اجراست که با استفاده از مجازی سازی سطح سیستم عامل،کانتینرها را راه اندازی میکند. این کانتینر ها از یکدیگر جدا شده اند و شامل نرم افزار،کتابخانه ها و پرونده های پیکربندی مورد نیاز برای اجرای یک برنامه هستند.
گام بعدی مربوط به افزودن مخازن به مدیر پکیج ها و بررسی کلیدهاست. به یاد داشته باشید که باید تمام این وظایف بر روی هر سرور انجام شود . در ابتدا باید یک بار دیگر یک به روز رسانی سریع با دستور apt انجام دهید.
root@host:~# apt update
root@host:~# apt install -y curl gnupg2
root@host:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add –
OK
root@host:~# add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
root@host:~# apt update
root@host:~# apt install -y containerd.io docker-ce
ایجاد راهنما و پیکربندی
در این قسمت پیکربندی داکر را وارد کنید تا بتواند در پس زمینه اجرا شود:
root@host:~# mkdir -p /etc/systemd/system/docker.service.d
root@host:~# tee /etc/docker/daemon.json “exec-opts”: [“native.cgroupdriver=systemd”],
> “log-driver”: “json-file”,
> “log-opts”: {
> “max-size”: “100m”
> },
> “storage-driver”: “overlay2”
> }
> EOF
{
“exec-opts”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”
}
root@host:~#
راه اندازی مجدد داکر
حالا باید docker deamon را دوباره بارگیری و راه اندازی کنید (reload and restart) و سپس آن را فعال کنید:
root@host:~# systemctl daemon-reload
root@host:~# systemctl restart docker
root@host:~# systemctl enable docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
root@host:~#
تایید وضعیت داکر
برای تایید فعال بودن و در حال اجرا بودن داکر مانند زیر عمل کنید:
root@host:~# systemctl status docker
● docker.service – Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset:
Active: active (running) since Fri 2020-10-23 19:31:23 +03; 1min 6s ago
Docs: https://docs.docker.com
Main PID: 16856 (dockerd)
Tasks: 13
CGroup: /system.slice/docker.service
└─16856 /usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.570268584+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.570272311+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.570275888+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.570389541+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.626550911+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.650814097+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.661596420+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.661656042+03:00″
Oct 23 19:31:23 host dockerd[16856]: time=”2020-10-23T19:31:23.671493768+03:00″
Oct 23 19:31:23 host systemd[1]: Started Docker Application Container Engine.
lines 1-19/19 (END)
ایجاد Master server
در این بخش باید ماژول br_netfilter را با استفاده از دستورات زیر بارگیری کنید:
root@host:~# lsmod | grep br_netfilter
br_netfilter 28672 0
bridge 176128 1 br_netfilter
root@host:~#
شروع Kubelet
در این مرحله kubelet را فعال کنید و سپس سرور را برای مدیریت K8s مقداردهی کنید مانند etcd (پایگاه داده دسته ایی) و API server :
root@host:~# systemctl enable kubelet
root@host:~# kubeadm config images pull
[config / images] Pulled k8s.gcr.io/kube-apiserver:v1.19.3
[config / images] Pulled k8s.gcr.io/kube-controller-manager:v1.19.3
[config / images] Pulled k8s.gcr.io/kube-scheduler:v1.19.3
[config / images] Pulled k8s.gcr.io/kube-proxy:v1.19.3
[config / images] Pulled k8s.gcr.io/pause:3.2
[config / images] Pulled k8s.gcr.io/etcd:3.4.13-0
[config / images] Pulled k8s.gcr.io/coredns:1.7.0
root@host:~#
ایجاد Cluster یا دسته
از پارامترهای زیر برای ایجاد یک دسته با دستور kubeadm استفاده خواهیم کرد:
- از دستور –pod-network-cidr برای پیکربندی شبکه و تنظیم محدوده CIDR (Classless Inter-Domain Routing)
استفاده میشود که یک روش برای آدرس دهی بدون کلاس است.
- دستور –control-plane-endpoint مجموعه ایی از نقطه پایان های مشترک برای تمام گره هاست ، به شرطی که در دسته ایی با قابلیت دسترسی بالا باشد.
root@host:~# kubeadm init \
> –pod-network-cidr=10.0.0.0/16 \
> –control-plane-endpoint=master
W1023 21:29:58.178002 9474 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.19.3
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using ‘kubeadm config images pull’
[certs] Using certificateDir folder “/etc/kubernetes/pki”
[certs] Generating “ca” certificate and key
[certs] Generating “apiserver” certificate and key
[certs] apiserver serving cert is signed for DNS names [host kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local master] and IPs [10.96.0.1 192.168.50.58]
[certs] Generating “apiserver-kubelet-client” certificate and key
[certs] Generating “front-proxy-ca” certificate and key
[certs] Generating “front-proxy-client” certificate and key
[certs] Generating “etcd/ca” certificate and key
[certs] Generating “etcd/server” certificate and key
[certs] etcd/server serving cert is signed for DNS names [host localhost] and IPs [192.168.50.58 127.0.0.1 ::1]
[certs] Generating “etcd/peer” certificate and key
[certs] etcd/peer serving cert is signed for DNS names [host localhost] and IPs [192.168.50.58 127.0.0.1 ::1]
[certs] Generating “etcd/healthcheck-client” certificate and key
[certs] Generating “apiserver-etcd-client” certificate and key
[certs] Generating “sa” key and public key
[kubeconfig] Using kubeconfig folder “/etc/kubernetes”
[kubeconfig] Writing “admin.conf” kubeconfig file
[kubeconfig] Writing “kubelet.conf” kubeconfig file
[kubeconfig] Writing “controller-manager.conf” kubeconfig file
[kubeconfig] Writing “scheduler.conf” kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file “/var/lib/kubelet/kubeadm-flags.env”
[kubelet-start] Writing kubelet configuration to file “/var/lib/kubelet/config.yaml”
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder “/etc/kubernetes/manifests”
[control-plane] Creating static Pod manifest for “kube-apiserver”
[control-plane] Creating static Pod manifest for “kube-controller-manager”
[control-plane] Creating static Pod manifest for “kube-scheduler”
[etcd] Creating static Pod manifest for local etcd in “/etc/kubernetes/manifests”
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory “/etc/kubernetes/manifests”. This can take up to 4m0s
[apiclient] All control plane components are healthy after 13.004870 seconds
[upload-config] Storing the configuration used in ConfigMap “kubeadm-config” in the “kube-system” Namespace
[kubelet] Creating a ConfigMap “kubelet-config-1.19” in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see –upload-certs
[mark-control-plane] Marking the node host as control-plane by adding the label “node-role.kubernetes.io/master=””
[mark-control-plane] Marking the node host as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: bf6w4x.t6l461giuzqazuy2
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the “cluster-info” ConfigMap in the “kube-public” namespace
[kubelet-finalize] Updating “/etc/kubernetes/kubelet.conf” to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes control-plane has initialized successfully!
برای استفاده از cluster (دسته) ابتدا به اجازه و پیکربندی کاربر برای اجرای kubectl ، نیاز دارید:
root@host:~# mkdir -p $HOME/.kube
root@host:~# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@host:~# chown $(id -u):$(id -g) $HOME/.kube/config
الان قادر هستید که شبکه pod را به دسته گسترش دهید:
root@host:~# kubectl apply -f [podnetwork].yaml” with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/
پیکربندی Kubectl
برای پیکربندی kubeclt باید دستورات زیر را وارد کنید:
root@host:~# kubectl cluster-info
Kubernetes master is running at https://master:6443
KubeDNS is running at https://master:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, we use the ‘kubectl cluster-info dump command.
root@host:~#
نصب calico
افزونه calico یک پلاگین شبکه مبتنی بر میزبان برای کانتینرهاست که ماشین های مجازی برای اهداف امنیتی ، از آن استفاده میکنند. با استفاده از دستورات زیر می توانید آن را نصب کنید:
root@host:~# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
root@host:~#
تایید pod های درحال اجرا
دستور زیر به شما اجازه میدهد که وضعیت کارکرد pods را بررسی کنید:
root@host:~# watch kubectl get pods –all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-7d569d95-wfzjp 1/1 Running 0 2m52s
kube-system calico-node-jd5l6 1/1 Running 0 2m52s
kube-system coredns-f9fd979d6-hb4bt 1/1 Running 0 7m43s
kube-system coredns-f9fd979d6-tpbx9 1/1 Running 0 7m43s
kube-system etcd-host 1/1 Running 0 7m58s
kube-system kube-apiserver-host 1/1 Running 0 7m58s
kube-system kube-controller-manager-host 1/1 Running 0 7m58s
kube-system kube-proxy-gvd5x 1/1 Running 0 7m43s
kube-system kube-scheduler-host 1/1 Running 0 7m58s
root@host:~#
تایید پیکربندی
آخرین بررسی ، تایید وضعیت، آماده بودن و در دسترس بودن Master server است:
root @ host: ~ # kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
host Ready master 46m v1.19.3 192.168.50.58 Ubuntu 18.04.5 LTS 5.4.0-52-generic docker: //19.3.13
root @ host: ~ #
ایجاد Workers Nodes
بعد از تنظیم کردن Master ، باید با دستورات زیر Worker nodes را به دسته اضافه کنید که بتواند کنترل و بارگیری شود.
افزودن Worker 1 :
root @ host: ~ # kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
host Ready master 46m v1.19.3 192.168.50.58 Ubuntu 18.04.5 LTS 5.4.0-52-generic docker: //19.3.13
root @ host: ~ #
افزودن worker 2 :
root@host-node2:~# kubeadm join master:6443 –token bf6w4x.t6l461giuzqazuy2 \
> –discovery-token-ca-cert-hash sha256:8d0b3721ad93a24bb0bb518a15ea657d8b9b0876a76c353c445371692b7d064e
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster…
[preflight] FYI: You can look at this config file with ‘kubectl -n kube-system get cm kubeadm-config -oyaml’
[kubelet-start] Writing kubelet configuration to file “/var/lib/kubelet/config.yaml”
[kubelet-start] Writing kubelet environment file with flags to file “/var/lib/kubelet/kubeadm-flags.env”
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap…
This node has joined the cluster:
* Certificate signing request was sent to apiserver, and a response was received.
* The Kubelet was informed of the new secure connection details.
Run ‘kubectl get nodes’ on the control-plane to see this node join the cluster.
root@host-node2:~#
تایید عضو های دسته
اکنون باید با دستور زیر در Server master ، بررسی کنید که هر دو Worker 1 , 2 به دسته اضافه شده اند یا خیر:
root@host:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
host Ready master 55m v1.19.3
host-worker-1 Ready 4m48s v1.19.3
host-worker-2 Ready 3m5s v1.19.3
root@host:~#
اضافه کردن برنامه
برای گسترش برنامه به دسته، باید کارایی آن چک شود و شروع به تست برنامه کنید:
root@host:~# kubectl apply -f https://k8s.io/examples/pods/commands.yaml
pod / command-demo created
root@host:~#
وضعیت تایید POD
با دستورات زیر میتوانید وضعیت pod را ببینید:
root@host:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
command-demo 0/1 Completed 0 30s
root@host:~#
این مرحله فرایند نصب و پیکربندی کوبرنیتز را تکمیل میکند. برای مطالعه بیشتر در مورد داکر ها و کوبرنیتز ها می توانید به بلاگ های مرتبط زیر نیز مراجعه کنید: