Install Kubernetes
برای هر نود hostname را تنظیم میکنیم
hostnamectl set-hostname {HOSTNAME}
برای هر نود نیاز است آدرس زیر ایجاد شود
mkdir -p /home/data
برای هر نود با استفاده از دستورات زیر پکیج های rpm را نصب میکنیم
فرض می شود همه فایل های نصب در دایرکتوری ~/ قرار دارند
tar -xf ./k8s_tools.tar.gz
cd ./k8s-offline
yum install -y --cacheonly --disablerepo=* ./rpm/*.rpm
در یکی از نود های کوبرنتیز، کانتینر registry برای کوبرنتیز را ایجاد میکنیم
(بهتر است یک registry برای ایمیج های کوبرنتیز در یکی از نود های کوبرنتیز و یک registry اصلی برای سایر ایمیج ها بر روی یکی از سرورهای دیتابیس که مقدار storage بالایی دارد ایجاد شود)
cd ./images
docker load -i registry.docker
docker run -d -p 5000:5000 --restart=always --name registry -v rke-registry:/var/lib/registry registry:latest
#test:
curl -X GET http://{IP}:{PORT}/v2/_catalog
بجای IP و PORT اول مشخصات registry مخصوص کوبرنتیز و بجای IP و PORT دوم مشخصات registry اصلی را مشخص میکنیم
(این دستورات روی همه نود ها اجرا میشود)
sudo systemctl enable docker
sudo systemctl start docker
vi /etc/docker/daemon.json
{
"insecure-registries":["{IP}:{PORT}","{IP}:{PORT}"],
"group": "docker"
}
systemctl restart docker
دستورات زیر را برای همه نود ها اجرا میکنیم
adduser mydocker
passwd mydocker
sudo groupadd docker
sudo usermod -aG docker mydocker
newgrp docker
export UUUU=mydocker
sudo chmod go-w /home/$UUUU
از نود اصلی به ازای همه نود ها دستور زیر را اجرا میکنیم
ssh-keygen
cat ~/.ssh/id_rsa.pub | ssh mydocker@{IP} "mkdir -p /home/mydocker/.ssh && cat >> /home/mydocker/.ssh/authorized_keys && chmod 600 /home/mydocker/.ssh/authorized_keys"
دستورات زیر را برای همه نود ها اجرا میکنیم
export UUUU=mydocker
sudo chmod 700 /home/$UUUU/.ssh
sudo chmod 644 /home/$UUUU/.ssh/authorized_keys
sudo chown $UUUU:$UUUU /home/$UUUU/.ssh/authorized_keys
sudo chown $UUUU:$UUUU /home/$UUUU/.ssh
sudo usermod -d /home/$UUUU $UUUU
sudo systemctl restart sshd
دستورات زیر را برای همه نود ها اجرا میکنیم
nano /etc/ssh/sshd_config
PubkeyAuthentication yes
AllowAgentForwarding yes
AllowTcpForwarding yes
sudo cat /etc/ssh/sshd_config | grep -E "PubkeyAuthentication|AllowAgentForwarding|AllowTcpForwarding"
sudo systemctl restart sshd
دستورات زیر را برای باز کردن پورت های مورد نیاز برای همه نود ها اجرا میکنیم
sudo firewall-cmd --permanent --add-port=5000/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=2376/tcp
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --permanent --add-port=9099/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10254/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/udp
sudo firewall-cmd --permanent --add-port=2379/tcp
sudo firewall-cmd --permanent --add-port=2380/tcp
sudo firewall-cmd --permanent --add-port=7946/tcp
sudo firewall-cmd --permanent --add-port=7946/udp
sudo firewall-cmd --permanent --add-port=179/tcp
sudo firewall-cmd --permanent --add-port=4789/udp
sudo firewall-cmd --permanent --add-port=5473/tcp
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 99 -o cali+ -j ACCEPT
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 99 -i cali+ -j ACCEPT
sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 99 -o cali+ -j ACCEPT
sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 99 -i cali+ -j ACCEPT
sudo firewall-cmd --set-log-denied=all
sudo firewall-cmd --reload
مابقی دستورات تنها برای نود اول است:
دستور زیر اجرا می شود تا ایمیج های کوبرنتیز روی رجیستری مخصول پوش شود
(آی پی و پورت registry کوبرنتیز جایگذاری شود)
unzip ~/k8s_images.zip -d ~/
./rancher/rancher-load-images.sh --image-list ./ALL-IMG.txt --images ~/k8s_images.tar.gz --registry {IP}:{PORT} 2>&1 | tee ./load.log
دستور زیر برای نصب helm انجام می شود (به جای {VERSION} مقدار ورژن صحیح فایل موجود جایگذاری شود)
cd ./helm
tar -zxvf helm-{VERSION}.tar.gz
ll /usr/local/bin | grep helm
sudo cp linux-amd64/helm /usr/local/bin/helm
ll /usr/local/bin | grep helm
sudo chmod +x /usr/local/bin/helm
دستور زیر برای نصب kubectl اجام می شود
cd ./kubectl
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
با استفاده از دستورات زیر فایل rke را برای نصب آماده میکنیم
cd ./rke
sudo chmod +x ./rke
./rke --version
با دستور زیر وارد محیط کانفیگ rke می شویم
./rke config --name cluster.yml
برای هر نود بصورت زیر پاسخ میدهیم:
[+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Number of Hosts [1]: #تعداد نود ها
[+] SSH Address of host (1) [none]: #آی پی نود اول
[+] SSH Port of host (1) [22]: #پاسخ پیشفرض (اینتر میزنیم)
[+] SSH Private Key Path of host (10.10.10.12) [none]: #پاسخ پیشفرض (اینتر میزنیم)
[-] You have entered empty SSH key path, trying fetch from SSH key parameter
[+] SSH Private Key of host (10.10.10.12) [none]: #پاسخ پیشفرض (اینتر میزنیم)
[-] You have entered empty SSH key, defaulting to cluster level SSH key: ~/.ssh/id_rsa
[+] SSH User of host (10.10.10.12) [ubuntu]: mydocker
[+] Is host (10.10.10.12) a Control Plane host (y/n)? [y]: y # درصورتیکه نود مورد نظر مستر است y
[+] Is host (10.10.10.12) a Worker host (y/n)? [n]: y # درصورتیکه نود مورد نظر مستر است y
[+] Is host (10.10.10.12) an etcd host (y/n)? [n]: y # درصورتیکه نود مورد نظر ورکر است y
[+] Override Hostname of host (10.10.10.12) [none]: node1 # هاست نیم نود
[+] Internal IP of host (10.10.10.12) [none]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Docker socket path on host (10.10.10.12) [/var/run/docker.sock]: #پاسخ پیشفرض (اینتر میزنیم)
در نهایت جواب سوالات زیر را پاسخ میدهیم:
[+] Network Plugin Type (flannel, calico, weave, canal, aci) [canal]: canal #نوع شبکه
[+] Authentication Strategy [x509]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Authorization Mode (rbac, none) [rbac]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Kubernetes Docker image [rancher/hyperkube:v1.26.8-rancher1]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Cluster domain [cluster.local]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Service Cluster IP Range [10.43.0.0/16]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Enable PodSecurityPolicy [n]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Cluster Network CIDR [10.42.0.0/16]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Cluster DNS Service IP [10.43.0.10]: #پاسخ پیشفرض (اینتر میزنیم)
[+] Add addon manifest URLs or YAML files [no]: #پاسخ پیشفرض (اینتر میزنیم)
فایل cluster.yml ایجاد شده را با ویرایشگر باز میکنیم و موارد زیر را تغییر میدهیم:
kubelet:
extra_binds:
- "/home/data:/home/data"
--------------------
ssh_agent_auth: true
--------------------
addons: |-
---
apiVersion: v1
kind: Service
metadata:
name: custom-ingress-nginx-controller
namespace: ingress-nginx
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
selector:
app: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
sessionAffinity: None
type: LoadBalancer
همچنین آی پی و پورت registry را برای همه ایمیج ها در قسمت system_images تنظیم میکنیم (قبل از image ها /{PORT}:{IP} را جایگذاری میکنیم) بطور مثال:
system_images:
etcd: rancher/mirrored-coreos-etcd:v3.5.6 ----- تبدیل شود به ----> etcd: {IP}:{PORT}/rancher/mirrored-coreos-etcd:v3.5.6
دستور زیر را اجرا میکنیم (دستور خط 5 برای چک کردن اتصال با ssk-key به همه نود ها انجام میشود)
eval "$(ssh-agent -k)" && eval $(ssh-agent) && ssh-add ~/.ssh/id_rsa
ssh-add -l
#test:
ssh -t mydocker@{IP} "docker ps"
با استفاده از دستور زیر نصب شروع می شود
./rke up
با استفاده از دستورات زیر فایل کانفیگ کوبرنتیز نصب شده را برای استفاده در kubectl در آدرس مربوطه کپی میکنیم
mkdir -p /root/.kube/
cp ./rke/kube_config_cluster.yml /root/.kube/config
kubectl get nodes
با استفاده از دستور زیر از صحت نصب کوبرنتیز اطمینان حاصل میکنیم:
kubectl get nodes -o wide
No Comments