K3s 快速入门指南:构建多云环境下的K3S集群

K3s 是轻量级的 Kubernetes。server最低只需要512M内存即可运行。

不同账号甚至不同云服务商, 内网是不通的。所以要想办法实现跨公网的容器网络通信,保障任意一台节点上的pod能访问任意节点上的pod和service,和正常的kubernetes集群体验一致。

参考入门指南和多云解决方案,重新整理

目标:实现混合云(腾讯云服务器+甲骨文服务器+微软Azure服务器)境下的K3S集群

Server安装

# 局域网方案
curl -sfL https://get.k3s.io | sh -
# 多云安装方案
curl -sfL https://get.k3s.io | sh -s - --node-external-ip=Server公网地址 --flannel-backend=wireguard-native

中国用户,可以使用以下方法加速安装:

# 局域网方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
# 多云安装方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --node-external-ip=Server公网地址 --flannel-backend=wireguard-native --flannel-external-ip

运行此安装后:

K3s 服务将被配置为在节点重启后或进程崩溃或被杀死时自动重启。
将安装其他实用程序,包括 ```kubectl```、```crictl```、```ctr```、```k3s-killall.sh``` 和 ```k3s-uninstall.sh```。
kubeconfig 文件将写入到 ```/etc/rancher/k3s/k3s.yaml```,由 K3s 安装的 kubectl 将自动使用该文件。

安装其他 Agent 节点

安装其他 Agent 节点并将它们添加到集群,请使用 K3S_URL 和 K3S_TOKEN 环境变量运行安装脚本

# 局域网方案
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
# 多云安装方案
curl -sfL https://get.k3s.io | K3S_URL=https://Server公网地址:6443 K3S_TOKEN=mynodetoken sh -s - --node-external-ip=Agent公网地址
# 局域网方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
# 多云安装方案
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://Server公网地址:6443 K3S_TOKEN=mynodetoken sh -s - --node-external-ip=Agent公网地址

备注: K3S_URL 参数会导致安装程序将 K3s 配置为 Agent 而不是 Server。K3s Agent 将注册到在 URL 上监听的 K3s Server。K3S_TOKEN 使用的值存储在 Server 节点上的 /var/lib/rancher/k3s/server/node-token 中。 每台主机必须具有唯一的主机名。如果你的计算机没有唯一的主机名,请传递 K3S_NODE_NAME 环境变量,并为每个节点提供一个有效且唯一的主机名。

在本机访问k3s集群

安装kubectl

brew install kubectl

复制 Server 中 /etc/rancher/k3s/k3s.yaml 的内容

写入本机的~/.kube/config文件.

参考scp复制指令:

scp server:/etc/rancher/k3s/k3s.yaml ~/.kube/config

测试指令

查看节点状态:

$ kubectl get node
NAME STATUS ROLES AGE VERSION
vm-4-10-debian Ready <none> 35m v1.27.6+k3s1
vm-4-9-debian Ready control-plane,master 39m v1.27.6+k3s1

检查跨网通讯:

$ kubectl get pod -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system local-path-provisioner-957fdf8bc-gcgj4 1/1 Running 0 38m 10.42.0.5 vm-4-9-debian <none> <none>
kube-system coredns-77ccd57875-vsxmt 1/1 Running 0 38m 10.42.0.6 vm-4-9-debian <none> <none>
kube-system helm-install-traefik-crd-sv9jh 0/1 Completed 0 38m 10.42.0.4 vm-4-9-debian <none> <none>
kube-system metrics-server-5f8b4ffd8-zd4db 1/1 Running 0 38m 10.42.0.3 vm-4-9-debian <none> <none>
kube-system helm-install-traefik-jp8sk 0/1 Completed 2 38m 10.42.0.2 vm-4-9-debian <none> <none>
kube-system svclb-traefik-0782c5d1-wr5kd 2/2 Running 0 37m 10.42.0.7 vm-4-9-debian <none> <none>
kube-system traefik-64f55bb67d-4lr2g 1/1 Running 0 37m 10.42.0.8 vm-4-9-debian <none> <none>
kube-system svclb-traefik-0782c5d1-444jv 2/2 Running 0 34m 10.42.1.2 vm-4-10-debian <none> <none>

查看节点资源使用情况:

$ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
vm-4-9-debian 24m 2% 1369Mi 69%
vm-4-10-debian <unknown> <unknown> <unknown> <unknown>

查看POD资源使用情况:

$ kubectl top pod -A
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-system coredns-77ccd57875-vsxmt 1m 20Mi
kube-system local-path-provisioner-957fdf8bc-gcgj4 1m 14Mi
kube-system metrics-server-5f8b4ffd8-zd4db 3m 24Mi
kube-system svclb-traefik-0782c5d1-wr5kd 0m 0Mi
kube-system traefik-64f55bb67d-4lr2g 1m 33Mi

到此k3s集群部署完成, 如果有更多的主机,可以重复agent的配置步骤进行添加。

K3s Server 节点的入站规则

协议 端口 源 目标 描述 TCP 2379-2380 Servers Servers 只有具有嵌入式 etcd 的 HA 需要 TCP 6443 Agents Servers K3s supervisor 和 Kubernetes API Server UDP 8472 所有节点 所有节点 只有 Flannel VXLAN 需要 TCP 10250 所有节点 所有节点 Kubelet 指标 UDP 51820 所有节点 所有节点 只有使用 IPv4 的 Flannel Wireguard 才需要 UDP 51821 所有节点 所有节点 只有使用 IPv6 的 Flannel Wireguard 才需要

所有出站流量通常都是允许的。

参考:

快速入门指南

嵌入式 k3s 多云解决方案

文章来源:

Author:白菜
link:https://blog.baicai.me/article/2023/quick_start/