Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

 

Ok, tối hôm nay rãnh rỗi làm một bài liên quan về Kubernetes, nói đến thằng này thì khá là bá đạo rồi, nhưng trước khi nói đến nó thì cần có một xíu góp ý cá nhân như sau. Nếu bạn chưa biết gì về nó và trước đó chưa biết gì về Docker thì hãy học Docker đi, đối với Docker thì học khá là nhanh chưa tới 1 tuần là chiến banh xác luôn. Ok nếu bạn đã kinh qua rồi thì tiếp theo  bên dưới đây là cách cài đặt.


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Như tiêu đề tại sao nói nghĩ chơi với Docker, vì theo nguồn mới đây rộ lên là Kubernetes sẽ bái bai Docker, cái này thì băng bọn nó kháo nhau đầy internet, trên trang chủ của kubernetes version v1.21 vẫn còn hỗ trợ Docker nhé. Nhưng nghe có biến thì tìm cách update để có cái mà chiến :)

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Trước tiên cần biết yêu cầu tối thiểu để cài Kubernetes thì cấu hình phải là 2Gb ram vs 2 CPU trở lên mới được cài. Các bước bên dưới sẽ ghi chi tiết ra để làm phát được luôn, căng chổ nào sẽ nói rõ chổ đó. :)

Giờ cài một Master vs 2 Worker.(Centos 8)

192.168.1.50 kubemaster

192.168.1.51 kubeworker01

192.168.1.52 kubeworker02

Thứ tự sẽ làm con master trước, sau khi ngon lành sẽ tiếp tục 2 con kia, step by step sẽ tốt hơn làm ào ào :)

1.Chỉnh sửa file host


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )


2. Disable selinux vaf Firewall

Đối với Firewall nên mở port cần thiết, đừng nên tắt đi, ở đây để cho nhanh nên tắt luôn, còn Selinux thì nên permissive, ở đây lười quá tắt luôn.


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

[root@kubemaster ~]# setenforce 0
[root@kubemaster ~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@kubemaster ~]# systemctl stop firewalld.service 
[root@kubemaster ~]# systemctl disable  firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@kubemaster ~]#reboot

Danh sách port yêu cầu sau

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

3.Install iproute-tc

Tại sao cài thằng này, vì trong lúc khởi tạo nếu thiếu nó thì sẽ warning liền

 yum install -y iproute-tc

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

4.Disabe swapoff 

Kubernetes nó không chấp nhận swap, nên nếu không tắt đi sẽ không khởi tạo được


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )


[root@kubemaster ~]#vi /etc/fstab #/dev/mapper/cl-swap swap swap defaults 0 0 [root@kubemaster ~]# swapoff -a


5.Cri-o

Thằng này là thằng khá quan trọng, vì sao, vì nó thay thế Docker đây. Khi bạn đã cài nó rồi thì không cần động chạm gì đến Docker nữa, và hãy quên Docker đi vì nó sẽ sẽ cân hết.

Cri-o trên Centos8 nó sử dụng mặc định systemd rồi nên không cần lăng tăng chi nhiều, nếu dùng Os khác thì chú ý phần này là ok.


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

 

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )



Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

cat <<EOF | sudo tee /etc/modules-load.d/crio.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# Set up required sysctl params, these persist across reboots.
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sudo sysctl --system


[root@kubemaster ~]# VERSION=1.20
[root@kubemaster ~]# OS=CentOS_8

[root@kubemaster ~]# sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
[root@kubemaster ~]# sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
[root@kubemaster ~]# sudo yum install cri-o
[root@kubemaster ~]# systemctl daemon-reload
[root@kubemaster ~]# systemctl enable crio --now
Ok , xong xem Cri-o nó chạy là ok, đối với Centos 8 vậy là ok rồi, nếu muốn customize gì thêm thì cứ vào /etc/crio/crio.conf để config thêm.

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )


7. Một vài cái về product_uuid, iptables để thấy bridged traffic ...


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Về UUID thì khó khi nào trùng kiểm tra cho chắc chắn, dù có dùng máy ảo clone ra mà để trùng thì thua :) tạo lại thôi :)

Còn iptables see bridged traffic thì chạy dòng sau


cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

8.Installing kubeadm, kubelet and kubectl

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Quá trình cài đặt Kubelet, kubeadm, kubectl đơn giản như sau

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF


sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

Khi cài xong nhớ enable nó lên trước khi làm drop-in file

[root@kubemaster ~]# sudo systemctl enable --now kubelet

tiếp theo config The kubelet drop-in file for systemd, là như thế nào, có nghĩa là mình đang dùng Cri-o chạy systemd, khi config kubelet drop này thì service của nó khi chạy lên sẽ kế thừa file này, thì thằng kubeadm sẽ gởi config cách chạy systemd nhw thế nào để thằng kubelet nó hiểu.

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Config này là của kubernetes cung cấp nhé, copy từ doc của nó ra thôi

[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
Cuối cùng reload và restart nó lên
systemctl daemon-reload && systemctl restart kubelet

9.Khởi tạo cluster kubernetes dùng kubeamd, khởi tạo này dành cho Master

kubeadm init --pod-network-cidr=10.244.0.0/16


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Yeah ok, đối với các worker node thì từ bước 8 trở về trước cú thế mà làm.

Khi khởi tạo thành công thì kubernetes sẽ báo những việc cần làm như thế nào thì cứ thế mà làm, làm xong thì cài thêm add-on Calico để quản lý pod network

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml


10.Đối với các node worker thì sao

Thì như gợi ý từ bước trên, cứ y  vậy mà cài, vì nó là node worker sẽ bỏ qua phần khởi tạo mà sẽ là join, khi khởi tạo ở master đã cung cấp token rồi, cứ thế mà dùng.

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )


Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Kiểm tra trên master

Hướng dẫn cài Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos8 (nghỉ chơi với Docker :) )

Ok, như vậy đã xong, việc cài đặt Kubernetes V1.21 với container runtime Cri-O(Container Runtime Interface) bằng kubeadm trên Centos 8 khá đơn giản như vậy.

Ah, thường thấy trên google cloud hay các dịch vụ có trang web UI không, đó gọi là Dashboard UI Kubernetes. Vậy cài nó như thế nào, nói chung là rất là đơn giản luôn vì người ta làm sẵn rồi kéo về dùng thôi :) bài sau sẽ hướng dẫn cài về Dashboard Kubernetes


Nhãn: