Kubernetes Installation procedure in RHEL9

Kubernetes Installation procedure in RHEL9

Step-1 Master Node Installation Procedure/Control Plane Node v1.31.1
[root@master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.29.191  master.example.com    master
192.168.29.192 worker-01.example.com  worker-01
192.168.29.193 worker-02.example.com  worker-02
[root@master ~]#
[root@master ~]# sudo dnf install kernel-devel-$(uname -r)

[root@master ~]# sudo modprobe br_netfilter
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe overlay

[root@master ~]# cat > /etc/modules-load.d/kubernetes.conf << EOF
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
overlay
EOF
[root@master ~]# cat > /etc/sysctl.d/kubernetes.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master ~]# sysctl --system
[root@master ~]# #vi /etc/fstab
[root@master ~]# vi /etc/fstab
[root@master ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Oct 14 10:37:04 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=9537bff3-0db5-4611-a8cc-88842e689066 /boot                   xfs     defaults        0 0
/dev/mapper/rhel-home   /home                   xfs     defaults        0 0
#/dev/mapper/rhel-swap   none                    swap    defaults        0 0
[root@master ~]#
[root@master ~]# #systemctl stop firewalld
[root@master ~]# #systemctl disable firewalld
[root@master ~]#
[root@master ~]# vi /etc/sysconfig/selinux | make it disabled



 [root@master ~]# sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

root@master ~]# sudo dnf makecache

[root@master ~]# sudo dnf -y install containerd.io

[root@master ~]# cat /etc/containerd/config.toml
[root@master ~]# sudo sh -c "containerd config default > /etc/containerd/config.toml" ; cat /etc/containerd/config.toml
[root@master ~]# sudo vim /etc/containerd/config.toml and change SystemdCgroup = true
[root@master ~]# sudo systemctl enable --now containerd.service
[root@master ~]# sudo systemctl reboot
[root@master ~]# sudo systemctl status containerd.service
● containerd.service - containerd container runtime
     Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; preset: disabled)
     Active: active (running) since Mon 2024-10-14 20:17:49 IST; 1h 26min ago
       Docs: https://containerd.io
   Main PID: 888 (containerd)
      Tasks: 132
     Memory: 710.1M
        CPU: 2min 17.893s
     CGroup: /system.slice/containerd.service
             ├─ 888 /usr/bin/containerd
             ├─1519 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 61e29c896043c4f4b7dc76885b340d55fc8af660109d6f3cf90d602321c>
             ├─1520 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id f2a28e4f87cd57b1f6557ad31ec131f8e910c71d4f4006c11a7001f27b3>
             ├─1535 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 99d15830983e36d50672f98e41a679e6072bd776f8c859ab5e0d505123b>
  
[root@master ~]# cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
[root@master ~]# sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
[root@master ~]# systemctl enable --now kubelet.service
[root@master ~]# sudo kubeadm config images pull

[root@master ~]# kubeadm init
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]#sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]#sudo chown $(id -u):$(id -g) $HOME/.kube/config



[root@master ~]# curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml -O
[root@master ~]# kubectl apply -f calico.yaml

[root@master ~]# kubectl get nodes
NAME                    STATUS   ROLES           AGE   VERSION
master.example.com      Ready    control-plane   91m   v1.31.1

Step2 :Worker Node 

[root@worker-01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.29.191  worker-01.example.com    worker-01
192.168.29.192 worker-01.example.com  worker-01
192.168.29.193 worker-02.example.com  worker-02
[root@worker-01 ~]#
[root@worker-01 ~]# sudo dnf install kernel-devel-$(uname -r)

[root@worker-01 ~]# sudo modprobe br_netfilter
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe overlay

[root@worker-01 ~]# cat > /etc/modules-load.d/kubernetes.conf << EOF
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
overlay
EOF
[root@worker-01 ~]# cat > /etc/sysctl.d/kubernetes.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@worker-01 ~]# sysctl --system
[root@worker-01 ~]# #vi /etc/fstab
[root@worker-01 ~]# vi /etc/fstab
[root@worker-01 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Oct 14 10:37:04 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=9537bff3-0db5-4611-a8cc-88842e689066 /boot                   xfs     defaults        0 0
/dev/mapper/rhel-home   /home                   xfs     defaults        0 0
#/dev/mapper/rhel-swap   none                    swap    defaults        0 0
[root@worker-01 ~]#
[root@worker-01 ~]# #systemctl stop firewalld
[root@worker-01 ~]# #systemctl disable firewalld
[root@worker-01 ~]#
[root@worker-01 ~]# vi /etc/sysconfig/selinux | make it disabled



 [root@worker-01 ~]# sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

root@worker-01 ~]# sudo dnf makecache

[root@worker-01 ~]# sudo dnf -y install containerd.io

[root@worker-01 ~]# cat /etc/containerd/config.toml
[root@worker-01 ~]# sudo sh -c "containerd config default > /etc/containerd/config.toml" ; cat /etc/containerd/config.toml
[root@worker-01 ~]# sudo vim /etc/containerd/config.toml and change SystemdCgroup = true
[root@worker-01 ~]# sudo systemctl enable --now containerd.service
[root@worker-01 ~]# sudo systemctl reboot
[root@worker-01 ~]# sudo systemctl status containerd.service
● containerd.service - containerd container runtime
     Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; preset: disabled)
     Active: active (running) since Mon 2024-10-14 20:17:49 IST; 1h 26min ago
       Docs: https://containerd.io
   Main PID: 888 (containerd)
      Tasks: 132
     Memory: 710.1M
        CPU: 2min 17.893s
     CGroup: /system.slice/containerd.service
             ├─ 888 /usr/bin/containerd
             ├─1519 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 61e29c896043c4f4b7dc76885b340d55fc8af660109d6f3cf90d602321c>
             ├─1520 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id f2a28e4f87cd57b1f6557ad31ec131f8e910c71d4f4006c11a7001f27b3>
             ├─1535 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 99d15830983e36d50672f98e41a679e6072bd776f8c859ab5e0d505123b>
  
[root@worker-01 ~]# cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

[root@worker-01 ~]# sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
[root@worker-01 ~]# systemctl enable --now kubelet.service 

root@worker-01 ~]# systemctl enable --now kubelet.service
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.
[root@worker-01 ~]# kubeadm join 192.168.29.191:6443 --token wfob9x.nb38lqpfwv84qgj1 \
        --discovery-token-ca-cert-hash sha256:e16b9527c30cda8ff5eaee266c264cc67b449739adb03a4c476ea16cd1031f21
[preflight] Running pre-flight checks
        [WARNING FileExisting-socat]: socat not found in system path
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[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-check] Waiting for a healthy kubelet at https://127.0.0.1:10248/healthz. This can take up to 4m0s
[kubelet-check] The kubelet is healthy after 504.45595ms
[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.

Step3:// Worker Node Join 

[root@worker-02 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.29.191  worker-02.example.com    worker-02
192.168.29.192 worker-02.example.com  worker-02
192.168.29.193 worker-02.example.com  worker-02
[root@worker-02 ~]#
[root@worker-02 ~]# sudo dnf install kernel-devel-$(uname -r)

[root@worker-02 ~]# sudo modprobe br_netfilter
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe overlay

[root@worker-02 ~]# cat > /etc/modules-load.d/kubernetes.conf << EOF
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
overlay
EOF
[root@worker-02 ~]# cat > /etc/sysctl.d/kubernetes.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@worker-02 ~]# sysctl --system
[root@worker-02 ~]# #vi /etc/fstab
[root@worker-02 ~]# vi /etc/fstab
[root@worker-02 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Oct 14 10:37:04 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=9537bff3-0db5-4611-a8cc-88842e689066 /boot                   xfs     defaults        0 0
/dev/mapper/rhel-home   /home                   xfs     defaults        0 0
#/dev/mapper/rhel-swap   none                    swap    defaults        0 0
[root@worker-02 ~]#
[root@worker-02 ~]# #systemctl stop firewalld
[root@worker-02 ~]# #systemctl disable firewalld
[root@worker-02 ~]#
[root@worker-02 ~]# vi /etc/sysconfig/selinux | make it disabled



 [root@worker-02 ~]# sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

root@worker-02 ~]# sudo dnf makecache

[root@worker-02 ~]# sudo dnf -y install containerd.io

[root@worker-02 ~]# cat /etc/containerd/config.toml
[root@worker-02 ~]# sudo sh -c "containerd config default > /etc/containerd/config.toml" ; cat /etc/containerd/config.toml
[root@worker-02 ~]# sudo vim /etc/containerd/config.toml and change SystemdCgroup = true
[root@worker-02 ~]# sudo systemctl enable --now containerd.service
[root@worker-02 ~]# sudo systemctl reboot
[root@worker-02 ~]# sudo systemctl status containerd.service
● containerd.service - containerd container runtime
     Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; preset: disabled)
     Active: active (running) since Mon 2024-10-14 20:17:49 IST; 1h 26min ago
       Docs: https://containerd.io
   Main PID: 888 (containerd)
      Tasks: 132
     Memory: 710.1M
        CPU: 2min 17.893s
     CGroup: /system.slice/containerd.service
             ├─ 888 /usr/bin/containerd
             ├─1519 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 61e29c896043c4f4b7dc76885b340d55fc8af660109d6f3cf90d602321c>
             ├─1520 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id f2a28e4f87cd57b1f6557ad31ec131f8e910c71d4f4006c11a7001f27b3>
             ├─1535 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 99d15830983e36d50672f98e41a679e6072bd776f8c859ab5e0d505123b>
  
[root@worker-02 ~]# cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

[root@worker-02 ~]# sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
[root@worker-02 ~]# systemctl enable --now kubelet.service

[root@worker-02 ~]# sudo systemctl enable --now kubelet
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.
[root@worker-02 ~]#  kubeadm join 192.168.29.191:6443 --token wfob9x.nb38lqpfwv84qgj1 \
        --discovery-token-ca-cert-hash sha256:e16b9527c30cda8ff5eaee266c264cc67b449739adb03a4c476ea16cd1031f21
[preflight] Running pre-flight checks
        [WARNING FileExisting-socat]: socat not found in system path
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[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-check] Waiting for a healthy kubelet at https://127.0.0.1:10248/healthz. This can take up to 4m0s
[kubelet-check] The kubelet is healthy after 1.017442725s
[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        
Cluster Node status 

[root@master ~]# kubectl get nodes
NAME                    STATUS   ROLES           AGE   VERSION
master.example.com      Ready    control-plane   91m   v1.31.1
worker-01.example.com   Ready    <none>          83m   v1.31.1
worker-02.example.com   Ready    <none>          73m   v1.31.1
[root@master ~]# kubectl get pods -A
NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-b8d8894fb-7hmfk      1/1     Running   0          96m
kube-system   calico-node-86g7t                            1/1     Running   0          79m
kube-system   calico-node-mdrtw                            1/1     Running   0          96m
kube-system   calico-node-qz5st                            1/1     Running   0          88m
kube-system   coredns-7c65d6cfc9-7vc82                     1/1     Running   0          96m
kube-system   coredns-7c65d6cfc9-wwlmk                     1/1     Running   0          96m
kube-system   etcd-master.example.com                      1/1     Running   0          96m
kube-system   kube-apiserver-master.example.com            1/1     Running   0          96m
kube-system   kube-controller-manager-master.example.com   1/1     Running   0          96m
kube-system   kube-proxy-5ql22                             1/1     Running   0          96m
kube-system   kube-proxy-79rpg                             1/1     Running   0          79m
kube-system   kube-proxy-qzml9                             1/1     Running   0          88m
kube-system   kube-scheduler-master.example.com            1/1     Running   0          96m
[root@master ~]#
        
Dr. Abhishek kumar Singh

Assistant Professor (Pathology) MD (IMS, BHU) MBBS (KGMU, Lucknow)

5 个月

Very informative

Vikas Mathur

? Senior Telco Cloud Deployment Consultant || Cloud-Native Architecture

5 个月

  • 该图片无替代文字
回复

要查看或添加评论,请登录

Vikas Mathur的更多文章