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

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

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

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

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

Server 安装

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

中国用户，可以使用以下方法加速安装：

Copy
# 局域网方案
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

运行此安装后：

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

安装其他 Agent 节点

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

Copy
# 局域网方案
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公网地址

Copy
# 局域网方案
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

Copy
brew install kubectl

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

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

参考 scp 复制指令：

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

测试指令

查看节点状态：

Copy
$ 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

检查跨网通讯：

Copy
$ 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>

查看节点资源使用情况：

Copy
$ 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 资源使用情况:

Copy
$ 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 多云解决方案

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