[DEVOPS] [K8S] Phần 2: Setup Kubernetes Cluster

Xin chào các mọi người. Hy vọng các bài viết có thể giúp ích cho mọi người. Bài viết này là Phần 2 – Setup Kubernetes Cluster I. Cài đặt một Kubernetes cluster 1.1. Cài đặt Kubernetes cluster cơ bản Đây sẽ là hướng dẫn cài đặt Kubernetes cluster với 2 node: master node và

Xin chào các mọi người. Hy vọng các bài viết có thể giúp ích cho mọi người. Bài viết này là Phần 2 – Setup Kubernetes Cluster

I. Cài đặt một Kubernetes cluster

1.1. Cài đặt Kubernetes cluster cơ bản

Đây sẽ là hướng dẫn cài đặt Kubernetes cluster với 2 node: master node và worker node. Trong trường hợp sử dụng nhiều node thì làm tương tự các bước trên worker node dưới đây.

1.1.1. Master node
Hostname: masternode
OS VMware: Ubuntu 20.04
IP: 192.168.12.13
Container runtimer: containerd
Plugin network: calico

Bước 1: Update hệ thống và cài các gói cần thiết
sudo apt -y update && sudo apt -y upgrade
sudo apt -y install curl apt-transport-https vim git wget gnupg2 software-properties-common ca-certificates

Bước 2: Cài đặt kubelet, kubeadm và kubectl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt -y update
sudo apt -y install kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

kubectl version --client && kubeadm version

Bước 3: Tắt Swap
sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
sudo nano /etc/fstab

sudo swapoff -a
sudo mount -a
free -h

sudo modprobe overlay
sudo modprobe br_netfilter

sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

Bước 4: Cài đặt container runtime

sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update
sudo apt install -y containerd.io

sudo su -
mkdir -p /etc/containerd
containerd config default>/etc/containerd/config.toml

sudo systemctl restart containerd
sudo systemctl enable containerd
systemctl status containerd

Bước 5: Cài đặt master node
lsmod | grep br_netfilter
sudo systemctl enable kubelet
sudo kubeadm config images pull

sudo kubeadm init 
  --pod-network-cidr=192.168.0.0/16 
  --cri-socket unix:///run/containerd/containerd.sock 
  --apiserver-advertise-address=192.168.12.13

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

kubectl cluster-info

Bước 6: Cài network plugin trên master node
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

watch kubectl get pods --all-namespaces

Cho phép Pod có thể chạy trên master node
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

1.1.2. Worker node
Hostname: workernode
OS VMware: Ubuntu 20.04
IP: 192.168.12.14
Container runtimer: containerd

Bước 1 -> Bước 4: Thực hiện tương tự như master node ở trên.

Bước 5: Join vào một cluster
kubeadm join 192.168.12.13:6443 --token 28tobh.qjp2ib31yr6cekzi --discovery-token-ca-cert-hash sha256:cb9cf4668ffd694c2a29dae9bf6996b88d8db981e05b4de824a4c0187d01a51c

1.2. Cài đặt cluster đặc biệt – Minikube

Cần cài đặt docker ce trước khi thực hiện các bước tiếp theo.

Hostname: host02
OS: Ubuntu 20.04 live
IP: 192.168.31.126

Bước 1: Update hệ thống
sudo apt -y update && apt -y upgrade

Bước 2: Tải gói minikube
wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64image.png

sudo cp minikube-linux-amd64 /usr/local/bin/minikube
sudo chmod 755 /usr/local/bin/minikube
image.png

Kiểm tra minikube
minikube version
image.png

Bước 3: Cài đặt plugin kubectl
Việc giao tiếp trong cluster sừ dụng plugin kubectl.
curl -LO https://storage.googleapis.com/kubernetes-release/release/' curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt' /bin/linux/amd64/kubectl

image.pngsudo chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
image.png

Kiểm tra kubectl
kubectl version -o json
image.png

Quản lý minikube
minikube start/status/stopimage.png

minikube delete

minikube ssh

minikube addons list

minikube dashboard

minikube dashboard --url

1.3. Quản lý cluster đã triển khai

kubectl get nodes
kubectl get nodes -o wide
kubectl config view
kubectl cluster-info
kubectl get nodes
kubectl get pod

II. Cài đặt Dashboard

Cài đặt giao diện quản lý cho cluster là một tùy chọn có thể sử dụng hoặc không. Việc theo tác trên giao diện hoàn toàn có thế thực hiện bằng các CLI. Vì vậy nếu muốn học sâu thì sử dụng CLI sẽ là phương án tốt nhất.

Trong bài viết này sẽ hướng dẫn cài đặt dashboard bằng Nodeport
Bước 1:
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml

kubectl get svc -n kubernetes-dashboard
kubectl --namespace kubernetes-dashboard patch svc kubernetes-dashboard -p '{"spec": {"type": "NodePort"}}'

kubectl get svc -n kubernetes-dashboard kubernetes-dashboard -o yaml

vim nodeport_dashboard_patch.yaml

spec:
  ports:
  - nodePort: 32000
    port: 443
    protocol: TCP
    targetPort: 8443

kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard --patch "$(cat nodeport_dashboard_patch.yaml)"

kubectl get deployments -n kubernetes-dashboard
kubectl get pods -n kubernetes-dashboard
kubectl get service -n kubernetes-dashboard

Bước 2: Truy cập link dashboard và tạo token login
Truy cập vào link https://ip:32000

Mình rất xin lỗi khi chưa thể update thêm các bài viết mới trong series về K8S vì khoảng thời gian gần đây mình khá bận do mình đã bắt đầu công việc mới với vị trí chuyên viên DevOps. Mặc dù mình đã có 4 5 bản nháp cho các bài tiếp theo trong series này. Mình chắc chắn sẽ quay lại làm tiếp series này trong thời gian sắp tới. Và để bù lại thì mình sẽ ra các bài tiếp theo liên quan đến Ansible, Terraform, AWS với góc nhìn là một chuyên viên DevOps. Mình xin cám ơn.

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ