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.
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 :)
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
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.
[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
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
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
[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.
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
7. Một vài cái về product_uuid, iptables để thấy bridged traffic ...
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
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.
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
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
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
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.
Kiểm tra trên master
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