- vừa được xem lúc

Cách khởi tạo cụm kubernete sử dụng kubeadm

0 0 9

Người đăng: Nguyen Tran Nhat Duc

Theo Viblo Asia

Sau 1 hồi mò mẫm cài đặt cụm kubernete cluster, ko giống như minikube cài đặt dễ dàng chỉ cần làm theo hướng dẫn, kubeadm mất 2 ngày ngồi đọc tài liệu, xem video youtube, hỏi chat GPT, stack overflow, xử lý các bug, thực sự rất lãng phí nếu không viết bài chia sẻ lại từng bước cài đặt.

Yêu cầu: cài đặt Vagrant, Virtual Box trên máy

1. Khởi tạo vagrant:

Tạo file vagrant như sau

VAGRANTFILE_API_VERSION = "2"
BOX_NAME = "generic/ubuntu2204"
PROVIDER = "virtualbox"
MEMORY = "2048"
CPUS = 2 Vagrant.configure("2") do |config| config.vm.box = BOX_NAME config.vm.provider PROVIDER do |vb| vb.memory = MEMORY vb.cpus = CPUS end config.vm.define "manager" do |manager| manager.vm.network :private_network, ip: "192.168.33.2" manager.vm.hostname = "manager" manager.vm.provider PROVIDER do |vb| vb.name = "manager" end end config.vm.define "worker" do |worker| worker.vm.network :private_network, ip: "192.168.33.2" worker.vm.hostname = "worker" worker.vm.provider PROVIDER do |vb| vb.name = "worker" end end
end

Sau đó tại thư mục chưa file Vagrant trên, chạy lệnh

vagrant up

2. update file /etc/host tại manager và worker

Mở 2 tab, ssh vào manager lẫn worker bằng lệnh sau

vagrant ssh manager
vagrant ssh worker

Chạy sudo -i để chuyển sang user root. Sau đó tại mỗi máy ảo, chạy lệnh sau

 echo '192.168.33.2 manager' >> /etc/hosts echo '192.168.33.3 worker' >> /etc/hosts

3. Cài đặt docker engine trên manager và worker

docker engine quá cơ bản rồi, chỉ cần làm theo hướng dẫn ở đây

4. Cài đặt cri-dockerd trên 2 máy ảo

Kể từ kubelet v1.24, docker engine không còn hỗ trợ cri (container runtime interface) phục vụ cho kubernetes, vì thế ta sẽ phải cài đặt cri-dockerd riêng.

B1: Cài đặt golang

apt-get update
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
source ~/.profile

B2: Clone repo cri-dockerd

git clone https://github.com/Mirantis/cri-dockerd.git

B3: Khởi tạo cri

cd cri-dockerd
apt-get install make
make cri-dockerd

Đợi 1 thời gian, sau đó chạy từng lệnh sau

mkdir -p /usr/local/bin
install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
install packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable --now cri-docker.socket

4. Cài đặt kubeadm, kubelet and kubectl ở 2 máy ảo

B1: Cài đặt "apt-transport-https" package

apt-get update && apt-get install -y apt-transport-https

B2: Download public key

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

B3: Bổ sung kubernate repo

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

B4: Cài đặt kubeadm, kubelet, kubectl

apt-get update && apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

5. Khởi tạo cluster:

Ở cả 2 máy ảo, tắt firewall, swapping bằng lệnh sau:

ufw disable
swapoff -a

Tại manager node:

kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=192.168.33.2 --cri-socket=unix:///var/run/cri-dockerd.sock

Kết quả:

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root: kubeadm join 192.168.33.2:6443 --token 8q6s6t.y3vzwjoy5rrepuui \ --discovery-token-ca-cert-hash sha256:0e560724583db3c39fac61c4e04784f24108a4873bc9c1a859d8f4a734c6cfd1 \ --control-plane Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.33.2:6443 --token 8q6s6t.y3vzwjoy5rrepuui \ --discovery-token-ca-cert-hash sha256:0e560724583db3c39fac61c4e04784f24108a4873bc9c1a859d8f4a734c6cfd1

Sau đó chạy:

export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl get po -A

Kết quả:

NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5dd5756b68-f6nt9 0/1 Pending 0 3m17s
kube-system coredns-5dd5756b68-pl8h8 0/1 Pending 0 3m17s
kube-system etcd-manager 1/1 Running 0 3m28s
kube-system kube-apiserver-manager 1/1 Running 0 3m28s
kube-system kube-controller-manager-manager 1/1 Running 0 3m28s
kube-system kube-proxy-7rlxz 1/1 Running 0 3m18s
kube-system kube-scheduler-manager 1/1 Running 0 3m28s

Lý do coredns bị pending do ta chưa cài pod networking. Có rất nhiều pod network add-on cho ta cài, ở đây mình sẽ chọn calico.

curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml -O

Vào file calico.yaml bằng nano hoặc vim, tìm kiếm đoạn text "CALICO_IPV4POOL_CIDR" và uncomment đoạn sau

# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"

Sau đó chạy lệnh

kubectl apply -f calico.yaml

Đợi 1 thời gian và kết quả:

NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-7c968b5878-n4nnz 1/1 Running 0 102s
kube-system calico-node-rcjb4 1/1 Running 0 102s
kube-system coredns-5dd5756b68-f6nt9 1/1 Running 0 16m
kube-system coredns-5dd5756b68-pl8h8 1/1 Running 0 16m
kube-system etcd-manager 1/1 Running 0 16m
kube-system kube-apiserver-manager 1/1 Running 0 16m
kube-system kube-controller-manager-manager 1/1 Running 0 16m
kube-system kube-proxy-7rlxz 1/1 Running 0 16m
kube-system kube-scheduler-manager 1/1 Running 0 16m

Tại worker node:

kubeadm join 192.168.33.2:6443 --token 8q6s6t.y3vzwjoy5rrepuui --discovery-token-ca-cert-hash sha256:0e560724583db3c39fac61c4e04784f24108a4873bc9c1a859d8f4a734c6cfd1 --cri-socket=unix:///var/run/cri-dockerd.sock
export KUBECONFIG=/etc/kubernetes/kubelet.conf

Xem kết quả tại manager node:

kubectl get nodes

Kết quả

NAME STATUS ROLES AGE VERSION
manager Ready control-plane 60m v1.28.4
worker Ready <none> 52m v1.28.4

Nguồn tham khảo:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 88

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 65

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 47

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 34

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 85

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 113