با استفاده از Kubeadm، یک خوشه Kubernetes چند گره در ماشین های مجازی گوگل ابری بسازید، از ابتدا!

آوردن و به روز رسانی یک پست اولیه که دو سال پیش در نمایه دیگر من در اینجا نوشته شده است. اینها مراحل تعریف شده و معتبری هستند که می توانید برای اجرای یک خوشه گره سه، پنج، هفت… و غیره در GCP با استفاده از ماشین های مجازی لینوکس استفاده کنید.
طعم لینوکس خود را انتخاب کنید، توصیه می شود Ubuntu 22.04 (Jammy) (این روی جعبه های توسعه دهنده محلی و در ماشین های مجازی Cloud Compute با Jammy کار می کند)
در Google Cloud Web Console، پروژه مورد نظر خود را که صورتحساب آن فعال است را انتخاب کنید و ابزار cli خود (Google Cloud CLI) را راه اندازی کنید و یک VPC، زیرشبکه و فایروال ایجاد کنید تا امکان ترافیک فراهم شود.
(نام منابع را در پرانتز بدون پرانتز جایگزین کنید):
یک شبکه ابر خصوصی مجازی ایجاد کنیدgcloud compute networks create [vpc name] --subnet-mode custom
ایجاد یک زیر شبکه با یک محدوده خاص (10.0.96.0/24)gcloud compute networks subnets create [subnet name] --network [vpc name] --range 10.0.96.0/24
قانون فایروال را ایجاد کنید که به ارتباطات داخلی در تمام پروتکل ها اجازه می دهد (10.0.96.0/24، 10.0.92.0/22)gcloud compute firewall-rules create [internal network name] --allow tcp,udp,icmp --network [vpc name] --source-ranges 110.0.96.0/24, 10.0.92.0/22
یک قانون فایروال ایجاد کنید که به SSH، ICMP و HTTPS خارجی اجازه دهد:gcloud compute firewall-rules create [external network name] --allow tcp,icmp --network [vpc name] --source-ranges 0.0.0.0/0
قوانین فایروال را در شبکه VPC فهرست کنید:gcloud compute firewall-rules list --filter="network:[vpc name]"
گره های تامین:
3، 5 یا 7 نمونه محاسباتی ایجاد کنید که به ترتیب میزبان پراکسی Kubernetes، صفحه کنترل و گره های کارگر باشند (اگر در حال ایجاد 5 گره یا بیشتر هستید، یک پروکسی توصیه می شود):
گره هواپیمای پروکسی (اختیاری):gcloud compute instances create proxynode --async --boot-disk-size 50GB --can-ip-forward --image-family ubuntu-2204-lts --image-project ubuntu-os-cloud --machine-type n2-standard-2 --private-network-ip 10.0.96.10 --scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring --subnet kubevms-subnet --tags kubevms-node,proxy
گره هواپیمای کنترل اصلی:gcloud compute instances create masternode --async --boot-disk-size 200GB --can-ip-forward --image-family ubuntu-2204-lts --image-project ubuntu-os-cloud --machine-type n2-standard-2 --private-network-ip 10.0.96.11 --scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring --subnet butler-subnet --tags vms-node,controller
گره های کارگر: (10.0.96.21+ برای سایر گره های کارگر)gcloud compute instances create workernode1 --async --boot-disk-size 100GB --can-ip-forward --image-family ubuntu-2204-lts --image-project ubuntu-os-cloud --machine-type n2-standard-2 --private-network-ip 10.0.96.20 --scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring --subnet butler-subnet --tags vms-node,worker
آدرس IP داخلی و محدوده Pod CIDR را برای هر گره کارگر چاپ کنیدgcloud compute instances describe workernode1 --format 'value[separator=" "](networkInterfaces[0].networkIP,metadata.items[0].value)'
نمونه های محاسباتی را در منطقه محاسباتی پیش فرض خود فهرست کنید:gcloud compute instances list --filter="tags.items=kubeadm-cluster"
SSH را در Google Cloud VM Instance آزمایش کنیدgcloud compute ssh [compute instance name]
این نصب ها را روی همه گره ها اجرا کنید
آ. sudo -i
ب apt-get update && apt-get upgrade -y
ج apt install curl apt-transport-https vim git wget gnupg2 software-properties-common apt-transport-https ca-certificates uidmap lsb-release -y
د swapoff -a
نصب و پیکربندی پیش نیازهای زمان اجرای کانتینر روی همه گره ها
بررسی کنید که ماژول br_netfilter با اجرا بارگذاری شده است lsmod | grep br_netfilter
برای اینکه iptable های یک گره لینوکس به درستی ترافیک پل شده را مشاهده کنند، آن را تأیید کنید net.bridge.bridge-nf-call-iptables
در sysctl شما روی 1 تنظیم شده است.
cat <
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
پارامترهای sysctl که در راهاندازی لازم است، پارامترها در طول راهاندازی مجدد باقی میمانندcat <
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
پارامترهای sysctl را بدون راه اندازی مجدد اعمال کنیدsudo sysctl --system
زمان اجرای کانتینر را روی همه گره ها نصب کنید
آ. mkdir -p /etc/apt/keyrings
ب curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
ج echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
د apt-get update
ه. apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
پیکربندی درایور CGROUP برای کانتینر در همه گره ها (ما از SystemD پیشرفته تری که با اوبونتو 2204 ارائه می شود استفاده خواهیم کرد)
آ. stat -fc %T /sys/fs/cgroup/
(بررسی کنید که آیا از cgroupV2 پشتیبانی شده استفاده می کنید)
ب sudo containerd config default | sudo tee /etc/containerd/config.toml
(مطمئن شوید که config.toml با پیش فرض وجود دارد)
ج SystemDGroup = true را برای استفاده از درایور CGroup در config.toml تنظیم کنید [plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc]…
[plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]SystemdCgroup = درست است
د sudo systemctl restart containerd
(Reset ContainerD)
KUBEADM را روی همه گره ها نصب کنید
دانلود کلید امضای عمومی Google Cloud:
آ. sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
مخزن Kubernetes apt را اضافه کنید:
ب echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
ج sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
درایور CGROUP را برای MASTER NODE پیکربندی کنید (اگر از سیستم عامل پشتیبانی شده برای SystemD استفاده می کنید، بخش را به kubeadm-config.yaml اضافه کنید)
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.28.0
controlPlaneEndpoint: "masternode:6443"
networking:
podSubnet: 10.200.0.0/16
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
نام میزبان را برای گره اصلی پیکربندی کنید
باز کردن فایل: nano /ect/hosts
اضافه کردن IP Static Master Node و Hostname ترجیحی (10.0.96.11 masternode)
KUBEADM را در MASTER اولیه کنیدkubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.out
اگر هنوز ROOT هستید از ROOT خارج شوید
برای اینکه kubectl برای کاربر غیر روت شما کار کند، این دستورات را اجرا کنید، که بخشی از خروجی init kubeadm نیز هستند:mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
یک رابط شبکه POD را روی Master نصب کنید
اپراتور Tigera Calico و تعاریف منابع سفارشی را دانلود و نصب کنید.kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/tigera-operator.yaml
با ایجاد منبع سفارشی لازم، Calico را دانلود و نصب کنید.
قبل از نصب به یاد داشته باشید که CALICO_IPV4POOL_CIDR را به POD_CIDR (10.200.0.0/16) تغییر دهید.kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/custom-resources.yaml
برای کنترل هواپیما به گره های کارگر بپیوندید
دستور زیر را در داخل هر گره کارگر با توکنی که از cli دریافت کردید، هنگام تنظیم اولیه kubeadm در Master Node اجرا کنید:kubeadm join masternode:6443 --token n0smf1.ixdasx8uy109cuf8 --discovery-token-ca-cert-hash sha256:f6bce2764268ece50e6f9ecb7b933258eac95b525217b8debb647ef41d49a898