I. References
- https://kubernetes.io/docs/setup/production-environment/
- https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- https://www.centlinux.com/2019/04/install-kubernetes-k8s-offline-on-centos-7.html
- https://docs.genesys.com/Documentation/GCXI/9.0.0/Dep/DockerOffline
II. Setup
Yêu cầu sudo hoặc quyền root, server Centos 7+
1. Cài đặt Container Runtimes
Để chạy các container (POD) trên mỗi node, cần phải cài đặt CR (container runtime) trên mỗi node.
Có nhiều loại CR, 3 loại thường dùng cài với Kubernetes trên linux:
. Cgroup Driver
Dùng để quản lý các tài nguyên cấp cho các tiến trình, trên linux thường dùng Systemd
Trong hướng dẫn này sử dụng Docker làm CR cho K8s.
a. Hướng dẫn cài Docker, chi tiết tham khảo trang Docker
https://docs.docker.com/engine/install/#server
Tải file rpm để cài đặt trên các server offline
b. Cấu hình Docker deamon, sử dụng Systemd để quản lý container's cgroups
Chỉnh sửa file cấu hình docker deamon : /etc/docker/daemon.json
sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
Note: overlay2
is the preferred storage driver for systems running Linux kernel version 4.0 or higher, or RHEL or CentOS using version 3.10.0-514 and above.
c. Restart docker
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
Note:
For more information refer to
2. Có 3 tool được khuyến nghị bởi K8s
Trong bài viết này sẽ hướng dẫn cài Kubeadm với master single node
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
a. Bật mode bridged traffic trên iptables
. Check mode br_netfilter
lsmod | grep br_netfilter
- Nếu chưa bật thì gọi lệnh sau để bật
sudo modprobe br_netfilter
- Set các tham số forward network
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
For more details please see the Network Plugin Requirements page.
b. Mở iptables tương ứng các port sau
Protocol | Direction | Port Range | Purpose | Used By |
---|
TCP | Inbound | 6443* | Kubernetes API server | All |
TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
TCP | Inbound | 10250 | kubelet API | Self, Control plane |
TCP | Inbound | 10251 | kube-scheduler | Self |
TCP | Inbound | 10252 | kube-controller-manager | Self |
Protocol | Direction | Port Range | Purpose | Used By |
---|
TCP | Inbound | 10250 | kubelet API | Self, Control plane |
TCP | Inbound | 30000-32767 | NodePort Services† | All |
c. Cài đặt Kubeadm, Kubelet và Kubectl
Cài đặt Kubeadm, Kubelet, Kubectl trên tất cả các server vật lý.
kubeadm
: the command to bootstrap the cluster.
kubelet
: the component that runs on all of the machines in your cluster and does things like starting pods and containers.
kubectl
: the command line util to talk to your cluster.
Chuẩn bị 1 server kết nối tới internet để tải package và images phục vụ cho việc cài đặt.