You are on page 1of 6

Kubernetes

 Cài đặt và triển khai cluster


ĐK: 3 node, Master tối thiểu 2vcpu, 2 GB ram

Kubernetes có thể chạy trên nhiều nền tảng khác nhau, từ Laptop đến trên các VM hay máy chủ vật lý
(bare metal server). Nếu chỉ mới tìm hiểu Kubernetes thì có thể dùng Minikube, kind hoặc Microk8s để
tạo một Kubernetes Cluster (Single-Node) cực kì đơn giản và nhanh chóng.

Tìm hiểu Kubernetes để hiểu sâu hoạt động bên trong của nó để thi chứng chỉ Certified Kubernetes
Administrator (CKA) hay vận hành một Kubernetes Cluster ở môi trường Production thì có thể dùng
kubeadm, Kops. kubeadm là công cụ giúp bootstrap một Kubernetes Cluster. kubeadm cho phép tùy
biến cao trong quá trình cài đặt Kubernetes Cluster, nó hỗ trợ multi-node thậm chí multi-master.

Kubernetes Cluster bao gồm 1 Master Node và 2 Worker Node (CentOS 7):

 BKAD-LPI-01 (192.168.137.138): Master Node


 BKAD-LPI-02 (192.168.137.140) và BKAD-LPI-03 (192.168.137.142): Worker node
1. Cài đặt các gói phần mềm và thiết lập ban đầu trên cả master và worker

Cài đặt các gói phụ thuộc cho Master Node:

Tắt swap: Nên tắt swap để kubelet hoạt động ổn định


swapoff -a

sed -i.bak /swap/s/^/#/ /etc/fstab

Tắt SELinux:
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

Update deamon Docker:


cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

 Master Node: Cài đặt kubelet, kubeadm và kubectl


cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

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

systemctl enable --now kubelet

cat <<EOF > /etc/sysctl.d/k8s.conf


net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
 Worker Node: Cài Kubelet và Kubeadm kubectl
Mở các port tương ứng sau trên firewall để Master Node và Worker Node có thể làm việc:
Master Node
Worker Node

firewall-cmd --permanent --add-port=6443/tcp


firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload

firewall-cmd --permanent --add-port=10251/tcp


firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd –reload

2. Thiết lập Kubernetes Cluster


Master Node: vùng mạng để các pod giao tiếp với nhau: 10.123.0.0/16
kubeadm init --pod-network-cidr=10.123.0.0/16 --apiserver-advertise-
address=192.168.137.138

Lưu lại dòng kubeadm join để join các máy worker vào cluster
Thiết lập trên kubectl cho user root trên Master Node nên chỉ cần export đường dẫn file config thông
qua biến môi trường KUBECONFIG:
export KUBECONFIG=/etc/kubernetes/admin.conf
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bash_profile
Cài Network addon calico:
curl https://docs.projectcalico.org/manifests/canal.yaml -O
kubectl apply -f canal.yaml
Kết quả

Join máy worker:

Để lấy thông tin chi tiết về một Node nào đó như tài nguyên bộ nhớ, CPU, các container ... sử dụng lệnh:
kubectl describe node tên-node
1. Cài dardboard cho k8s
Sử dụng Lens hoặc build

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/


recommended.yaml

kubectl proxy

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-
dashboard:/proxy/

Lấy Token đăng nhập Dashboard


Tạo một file có tên admin-user.yaml cập nhật nội dung sau:
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard

kubectl apply -f admin-user.yaml


kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-
dashboard get secret | grep admin-user | awk '{print $1}')

You might also like