Mục lục- 1. Giới thiệu
-
- Môi trường cụm
-
- Triển khai K3S
- 3.1 Nâng cấp kernel (tất cả các node)
- 3.2 Tải xuống tệp k3s trên tất cả các node
- 3.3 Cài đặt wireguard trên tất cả các node
- 3.4 Triển khai mặt điều khiển trên master
- 3.5 Thêm node tính toán
- 3.6 Sử dụng containerd
-
- Cấu hình truy cập cụm
- Giới thiệu =====
Trang chủ chính thức: K3S | Phiên bản Kubernetes nhẹ | Giải pháp K8S cho IoT và Edge Computing AutoK3s: Tạo nhanh cụm K3s
K3S là một bản phân phối Kubernetes nhẹ nhàng, được tối ưu hóa cao cho các kịch bản như tính toán biên (edge computing), Internet vạn vật (IoT). K3S có các cải tiến sau:
- Đóng gói thành một tệp nhị phân duy nhất.
- Sử dụng cơ chế lưu trữ dựa trên sqlite3 nhẹ làm cơ chế lưu trữ mặc định. Đồng thời hỗ trợ sử dụng etcd3, MySQL và PostgreSQL làm cơ chế lưu trữ.
- Đóng gói trong một trình khởi động đơn giản, trình này xử lý nhiều tùy chọn TLS và phức tạp.
- Mặc định là bảo mật, có các giá trị mặc định hợp lý cho môi trường nhẹ.
- Thêm các tính năng "batteries-included" đơn giản nhưng mạnh mẽ, chẳng hạn như: nhà cung cấp lưu trữ cục bộ, bộ cân bằng tải dịch vụ, bộ điều khiển Helm và bộ điều khiển Traefik Ingress.
- Tất cả các thành phần control-plane của Kubernetes được đóng gói trong một tệp nhị phân và tiến trình duy nhất, cho phép K3S tự động hóa và quản lý các hoạt động cụm phức tạp bao gồm cả phân phát chứng chỉ.
- Giảm thiểu tối đa các phụ thuộc bên ngoài, K3S chỉ yêu cầu kernel và mount cgroup. Các phần phụ thuộc mà gói K3S cần bao gồm:
- containerd
- Flannel
- CoreDNS
- CNI
- Công cụ máy chủ (iptables, socat, v.v.)
- Bộ điều khiển Ingress (Traefik)
- Bộ cân bằng tải dịch vụ nhúng (embedded service load balancer)
- Bộ điều khiển chính sách mạng nhúng (embedded network policy controller)
- Môi trường cụm =======
| Node | Vai trò | IP |
|---|---|---|
| master | master | 192.168.10.20 |
| node01 | node01 | 192.168.10.30 |
| node02 | node02 | 192.168.10.40 |
| Các thao tác khởi tạo cài đặt K3S tương tự như K8S: |
Tắt tường lửa và SELinux
Tắt NetworkManager
Tắt Swap
yum -y install ntpdate && ntpdate time.windows.com
Thay đổi tên máy chủ
Thêm mục hosts
- Triển khai K3S =========
Triển khai cụm K3S trên nhiều nhà cung cấp điện toán đám mây
3.1 Nâng cấp kernel (tất cả các node)
- Plugin mạng mặc định của k3s là
flannel, chế độ mặc định làvxlan, nên sử dụng chế độwireguard.- wireguard yêu cầu kernel cao hơn, trong khi kernel mặc định của
CentOS 7.xkhông đáp ứng được yêu cầu, cần nâng cấp kernel (nếu hệ điều hành của bạn là CentOS 7.x).- Nâng cấp kernel cho CentOS7
3.2 Tải xuống tệp k3s trên tất cả các node
# Cần tải tệp nhị phân này trên tất cả các node
wget http://49.232.8.65/k3s/k3s -O /usr/local/bin/k3s
chmod +x /usr/local/bin/k3s
3.3 Cài đặt wireguard trên tất cả các node
yum -y install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum -y install yum-plugin-elrepo
yum -y install kmod-wireguard wireguard-tools
3.4 Triển khai mặt điều khiển trên master
Tạo tệp Service Unit
- Thay
<public_ip>bằng IP công khai của node điều khiển.- flannel sử dụng giao thức
wireguardđể giao tiếp giữa các máy chủ.- kube-proxy sử dụng chế độ
ipvs.
touch /etc/systemd/system/k3s.service.env
cat > /etc/systemd/system/k3s.service <<EOF
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
# Có giới hạn Limit*s khác không sẽ gây ra các vấn đề hiệu suất do chi phí kế toán trong kernel.
# Chúng tôi khuyên sử dụng cgroups để kế toán cục bộ trong container.
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s \
server \
--tls-san <public_ip> \
--node-ip <public_ip> \
--node-external-ip <public_ip> \
--no-deploy servicelb \
--flannel-backend wireguard \
--kube-proxy-arg "proxy-mode=ipvs" "masquerade-all=true" \
--kube-proxy-arg "metrics-bind-address=0.0.0.0"
EOF
Khởi chạy mặt điều khiển k3s và thiết lập tự khởi động
systemctl enable k3s --now
Sử dụng kubectl
[root@c7-1 /usr/local/bin]#find / -name containerd
/run/containerd
/run/k3s/containerd
/var/lib/rancher/k3s/data/744a8a403c240a6fbd91df8ded5090391c52d7c7d12bcb1437b0a67b281d58ae/bin/containerd
/var/lib/rancher/k3s/agent/etc/containerd
/var/lib/rancher/k3s/agent/containerd
/usr/local/bin/containerd
[root@c7-1 /usr/local/bin]#ln -s ./containerd ./kubectl
Kiểm tra trạng thái sức khỏe của các thành phần cụm
[root@c7-1 ~]#kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
Ở đây không có đầu ra
etcd, vì cơ chế lưu trữ dữ liệu mặc định của k3s làSqlite, rất thân thiện với các cơ sở dữ liệu nhỏ. Các thay đổi xảy ra trong control-plane của Kubernetes chủ yếu liên quan đến việc cập nhật triển khai thường xuyên, lên lịch Pod, v.v., do đó đối với một cụm nhỏ với vài node, cơ sở dữ liệu không gây ra tải quá lớn, giúp tiết kiệm nhiều tài nguyên.
3.5 Thêm node tính toán
Tạo tệp biến môi trường
$ touch /etc/systemd/system/k3s-agent.service.env
# Thêm hai biến môi trường
K3S_URL=https://192.168.10.20:6443
K3S_TOKEN=K10f74cfb2bc766f3674659630fc3c01482db5fd1e06b9e38a117038de4f0660aac::server:9a67adc15a897502e22f7a11c446f460
# ----------------------- #
K3S_URL : URL của API Server, thường có định dạng: https://<master_ip>:6443. Trong đó <master_ip> là IP công khai của node điều khiển.
K3S_TOKEN : Token cần thiết để tham gia cụm, có thể xem trong tệp /var/lib/rancher/k3s/server/node-token trên node điều khiển.
Tạo tệp Service Unit trên node tính toán
# Thay <public_ip> bằng IP của master
$ cat > /etc/systemd/system/k3s-agent.service <<EOF
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=exec
EnvironmentFile=/etc/systemd/system/k3s-agent.service.env
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s agent \
--node-external-ip <public_ip> \
--node-ip <public_ip> \
--kube-proxy-arg "proxy-mode=ipvs" "masquerade-all=true" \
--kube-proxy-arg "metrics-bind-address=0.0.0.0"
EOF
Khởi chạy k3s-agent và thiết lập tự khởi động
systemctl enable k3s-agent --now
systemctl status k3s-agent
# Nếu thất bại, thực hiện systemctl restart k3s-agent, đợi một lúc rồi kiểm tra lại
Kiểm tra cụm trên master
[root@c7-1 ~]#kubectl get nodes
NAME STATUS ROLES AGE VERSION
c7-3 Ready <none> 3m50s v1.17.6+k3s1
c7-1 Ready master 29m v1.17.6+k3s1
c7-2 Ready <none> 3m53s v1.17.6+k3s1
3.6 Sử dụng containerd
[root@c7-1 ~]#cd /usr/local/bin/
[root@c7-1 /usr/local/bin]#ls
containerd k3s kubectl
[root@c7-1 /usr/local/bin]#ll -h
Tổng cộng 157M
-rwxr-xr-x 1 root root 106M 6月 21 18:27 containerd
-rwxr-xr-x 1 root root 51M 6月 21 17:31 k3s
lrwxrwxrwx 1 root root 12 6月 21 18:27 kubectl -> ./containerd
[root@c7-1 /usr/local/bin]#find / -name ctr
/var/lib/rancher/k3s/data/744a8a403c240a6fbd91df8ded5090391c52d7c7d12bcb1437b0a67b281d58ae/bin/ctr
[root@c7-1 /usr/local/bin]#ln -s containerd ctr
[root@c7-1 /usr/local/bin]#ls
containerd ctr k3s kubectl
[root@c7-1 /usr/local/bin]#ctr
......
[root@c7-1 /usr/local/bin]#ctr image ls
......
[root@c7-1 /usr/local/bin]#ctr container ls
......
Sử dụng containerd - Hướng lập trình viên (manongjc.com)
- Cấu hình truy cập cụm =========
Tệp kubeconfig được lưu tại /etc/rancher/k3s/k3s.yaml được sử dụng để truy cập cụm K8S/K3S. Nếu bạn đã cài đặt các công cụ dòng lệnh của Kubernetes gốc như kubectl hoặc helm, bạn cần cấu hình chúng với đường dẫn kubeconfig chính xác. Điều này có thể thực hiện bằng cách xuất biến môi trường KUBECONFIG hoặc sử dụng cờ dòng lệnh --kubeconfig. Chi tiết tham khảo ví dụ dưới đây.
Sử dụng biến môi trường KUBECONFIG:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/kubelet.conf $HOME/.kube/config # Tệp cụm k8s được gọi là admin.conf
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml # Viết vào tệp /etc/profile, source lại, trong môi trường sản xuất cần thoát và đăng nhập lại
kubectl get pods --all-namespaces
helm ls --all-namespaces
Hoặc chỉ định đường dẫn tệp kubeconfig trong lệnh:
kubectl --kubeconfig /etc/rancher/k3s/k3s.yaml get pods --all-namespaces
helm --kubeconfig /etc/rancher/k3s/k3s.yaml ls --all-namespaces
Sử dụng kubectl từ bên ngoài để truy cập cụm:
Sao chép /etc/rancher/k3s/k3s.yaml vào tệp ~/.kube/config trên máy tính bên ngoài cụm. Sau đó thay thế "localhost" bằng IP hoặc tên máy chủ K3s của bạn. Bây giờ kubectl có thể quản lý cụm K3s của bạn.
[root@master ~]#chmod g-rw ~/.kube/config
[root@master ~]#chmod o-r ~/.kube/config
Truy cập cụm