راهنمای نصب کوبرنتیز برای مبتدیها
این راهنما برای مبتدیهاست. مثل من.
این سادهترین روش نصب کوبرنتیز روی VM شماست که من از آن برای نصب کلاستر خودم استفاده کردم. ۸ ساعت وقت صرف تحقیق و نصب آن کردم.
پیشنیازها
- یک VM تازه با اوبونتو نصب شده
- یک دامنه (اجباری نیست ولی پیشنهاد میشود)
ایجاد یک ماشین آماده برای کلاستر
قدم ۱: مطمئن شوید که VM تازهای دارید
اگر ندارید، ممکن است با خطاهایی مواجه شوید. من این مشکلات را داشتم و تصمیم گرفتم روی VM تازهای انجام دهم.
قدم ۲: مخازن و بستهها را بهروزرسانی کنید
sudo apt update && sudo apt upgrade -y
قدم ۳: swap را غیرفعال کرده و پیکربندیهای kernel لازم را فعال کنید
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
این پیکربندیهای kernel برای کارکرد صحیح کوبرنتیز ضروری هستند.
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.ipv4.ip_unprivileged_port_start=0
EOF
sudo sysctl --system
net.ipv4.ip_unprivileged_port_start=0
برای استفاده از traefik مهم به نظر میرسد. در غیر این صورت خطای bind to:80/443 دریافت خواهید کرد.وقتی داشتم کلاستر خودم را پیکربندی میکردم، با این مشکل مواجه شدم. traefik نمیتوانست به پورتهای ۸۰/۴۴۳ متصل شود.
مجبور شدم
net.ipv4.ip_unprivileged_port_start=0
را تنظیم کنم و سپس همه چیز درست کار کرد.
قدم ۴: مخازن مورد نیاز را اضافه کنید
همیشه مخازن خود را بهروزرسانی کرده و بستههای مورد نیاز را نصب کنید.
sudo apt update -y
سپس curl
، software-properties-common
، apt-transport-https
و ca-certificates
را نصب کنید.
sudo apt install -y curl software-properties-common apt-transport-https ca-certificates
حالا مخازن kubernetes، docker و containerd را اضافه کنید.
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
مخازن را بهروزرسانی کنید.
sudo apt update -y
قدم ۵: containerd را نصب و پیکربندی کنید
ابتدا آن را نصب کنید
sudo apt install -y containerd.io
سپس پیکربندی را در /etc/containerd/config.toml
بنویسید و SystemdCgroup = true
را تنظیم کنید
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
containerd را فعال کنید
sudo systemctl restart containerd
sudo systemctl enable containerd
قدم ۶: بستههای kubernetes را نصب کنید
sudo apt install -y kubelet kubeadm kubectl
از apt-mark
استفاده کنید تا از بهروزرسانی، حذف یا تغییر آنها جلوگیری کنید.
sudo apt-mark hold kubelet kubeadm kubectl
ماشین را ریبوت کنید.
sudo reboot
ایجاد کلاستر
قدم ۱: گره را مقداردهی اولیه کنید
ابتدا آدرس IP ماشین را دریافت کنید.
export MACHINE_IP=$(hostname -I | awk '{print $1}')
سپس گره را مقداردهی اولیه کنید. (میتوانید فقط با sudo kubeadm init
مقداردهی اولیه کنید اما من چند flag اضافه کردم تا عیبیابی آسانتر باشد)
sudo kubeadm init --pod-network-cidr=10.96.0.0/12 --control-plane-endpoint=${MACHINE_IP} --v=5
نگران join token نباشید، میتوانیم بعداً دوباره آن را ایجاد کنیم :)
example.sh
sudo kubeadm token create --print-join-command
قدم ۲: فایل kubeconfig را ایجاد کنید
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
قدم ۳: پیکربندی شبکه را اعمال کنید
من ترجیح میدهم از calico برای پیکربندی شبکه استفاده کنم. میتوانید از هر پلاگین شبکه دیگری که میخواهید استفاده کنید. مثل flannel، cilium و غیره.
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
قدم ۴: منتظر آماده شدن گرهها باشید (باید منتظر آماده شدن podهای شبکه باشید)
watch kubectl get nodes -A
تبریک! شما اولین کلاستر کوبرنتیز خود را ایجاد کردید.
اگر میخواهید گرههای بیشتری اضافه کنید (همیشه باید تعداد فرد باشد)، باید فرآیند مقداردهی اولیه را روی گره جدید تکرار کنید. سپس از دستور join که قبلاً ایجاد کردیم استفاده کنید تا گره جدید را به کلاستر اضافه کنید.
نصب helm، ingress و ابزارهای دیگر
قدم ۱: helm را نصب کنید
من ترجیح میدهم helm را با apt نصب کنم. هر طور که میخواهید میتوانید انجام دهید.
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
سپس package manager را بهروزرسانی کنید
sudo apt update
سپس helm را نصب کنید
sudo apt install helm
قدم ۲: ingress را نصب کنید
من ترجیح میدهم از traefik برای ingress استفاده کنم. میتوانید از هر ingress controller دیگری که میخواهید استفاده کنید. مثل nginx و غیره.
helm install traefik traefik/traefik --namespace traefik --create-namespace -f traefik-values.yaml
من ترجیح میدهم از فایل values خودم برای traefik استفاده کنم. میتوانید از فایل values پیشفرض استفاده کنید.
ports:
web:
port: 80
websecure:
port: 443
service:
type: LoadBalancer
additionalArguments:
- "--api.dashboard=true"
قدم ۳: longhorn را برای مدیریت ذخیرهسازی نصب کنید
helm install longhorn longhorn-system/longhorn-manager --namespace longhorn-system --create-namespace
قدم ۴: Rancher را نصب کنید
میتوانید از rancher هر طور که میخواهید استفاده کنید. اما این روشی است که من استفاده میکنم:
ابتدا مخزن rancher را اضافه کنید
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
سپس یک namespace ایجاد کنید
kubectl create namespace cattle-system
سپس ممکن است به cert-manager نیاز داشته باشیم اگر از قبل نداریم، میتوانیم دستور زیر را برای نصب آن اعمال کنیم
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.3/cert-manager.yaml
مخزن آن را اضافه کنید
helm repo add jetstack https://charts.jetstack.io
سپس آن را نصب کنید
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace
سپس chart rancher را نصب کنید
helm install rancher rancher-stable/rancher \
--namespace cattle-system --create-namespace \
--set hostname=${RANCHER_DOMAIN} \
--set ingress.tls.source=secret \
--set ingress.tls.secretName=rancher-cert-tls \
--set bootstrapPassword=admin
${RANCHER_DOMAIN}
را با نام دامنه خود جایگزین کنید.
و سپس یک گواهینامه اعمال کنید
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: rancher-cert
namespace: cattle-system
spec:
secretName: rancher-cert-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- ${RANCHER_DOMAIN}
EOF
منتظر آماده شدن rancher باشید، سپس به https://${RANCHER_DOMAIN}/dashboard?setup=admin
بروید و با admin
و admin
وارد شوید.
سپس صفحهای خواهید دید که میگوید You have access to the dashboard
.
روی آن کلیک کنید و صفحهای خواهید دید که میگوید You have access to the dashboard
.
اگر از کلاستر تکگره استفاده میکنید، گره خود را UnTaint کنید
گره را untainted تنظیم کنید
export NODE_NAME=$(hostname)
kubectl taint nodes ${NODE_NAME} node-role.kubernetes.io/control-plane-
اگر بخواهید دوباره گره را taint کنید، میتوانید از دستور زیر استفاده کنید:
kubectl taint nodes ${NODE_NAME} node-role.kubernetes.io/control-plane:NoSchedule
آیا واقعاً باید از کوبرنتیز استفاده کنید؟
خب، نه.
کوبرنتیز سیستم پیچیدهای است که نیاز به منابع زیادی برای نگهداری دارد.
اگر VMهای متعددی دارید و نیاز به مدیریت آنها و سرویسهای زیادی دارید، آنگاه بله، باید از کوبرنتیز استفاده کنید.
اما اگر یک VM دارید و نیاز به مدیریت چند سرویس دارید، آنگاه نیازی به استفاده از کوبرنتیز ندارید.
و یادتان باشد، همیشه آسانتر است که یک مهندس DevOps برای راهاندازی کلاستر خود بگیرید. سپس تنها کاری که باید انجام دهید مدیریت آن است :)