尽管 k3s 使用起来很简单,但我很难找到一个简单的指南来在两个单独的服务器上设置服务器代理配置。在这篇文章中,我希望提供该指南,而不需要您下载任何额外的依赖项或使用除 k3s 提供的脚本之外的任何其他工具。
我使用 AWS EC2 实例作为我的虚拟机,因此说明将略微特定于 AWS,但应该适用于任何两个配置为相互通信的 Linux 服务器。
虚拟机设置供应服务器
首先,我们需要配置两台 Linux 服务器。我使用了两个 t2.small 图像,即使只是运行示例应用程序,它也与您想要的一样低。
如果您计划多次使用这些服务器,还值得通过弹性 IP 为这些服务器分配一个永久 IP 地址。 AWS此处提供了执行此操作的说明。
登录每个虚拟机
hostname -i~/.bashrc
export k3sserver=<value of hostname -i on k3s server>
export k3sagent=<value of hostname -i on k3s agent>
进入全屏模式 退出全屏模式
我们还将使用这些值来配置 AWS 安全组。
更新 AWS 安全组
必须添加安全组规则以允许您通过 SSH 连接到您从 localhost 创建的虚拟机,以及与 k3s 服务器和代理进行 SSH 连接。下表提供了这样做的规则。
类型
端口范围
资源
目的
SSH
22
IP 来自http://checkip.amazonaws.com/
从 localhost 到服务器和代理的 SSH
所有流量
全部
$k3sserver 的价值
从服务器到代理的 SSH

所有流量
全部
$k3sagent 的价值
从代理到服务器的 SSH
这些规则被添加到安全组的入站规则中(可以在此处找到[的说明)。
配置SSH密钥
在 k3s 服务器和代理上,运行以下命令
cd ~/.ssh
ssh-keygen
进入全屏模式 退出全屏模式
id_rsaid_rsa.pubid_rsa.pub~/.ssh/authorized_keysid_rsa.pub~/.ssh/authorized_keys
您现在应该能够从服务器 ssh 进入代理,反之亦然。
配置虚拟机
在服务器和代理上,运行以下脚本来运行和配置 Docker。
sudo yum update -y
sudo amazon-linux-extras install -y docker
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
sudo service docker start
sudo usermod -a -G docker ec2-user
进入全屏模式 退出全屏模式
visudo:/usr/local/bin
Defaults secure_path="/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin"
进入全屏模式 退出全屏模式
/usr/local/binsudo
服务器配置
在服务器上,运行:
curl -sfL https://get.k3s.io | sh -s - --docker
sudo chmod 755 /etc/rancher/k3s/k3s.yaml
进入全屏模式 退出全屏模式
使用以下命令确认服务器已准备就绪:
k3s kubectl get nodecontrol-plane,mastersudo service k3s status
代理配置
NODE_TOKEN/var/lib/rancher/k3s/server/node-token
curl -sfL https://get.k3s.io | K3S_URL=https://$k3sserver:6443 K3S_TOKEN=$NODE_TOKEN sh -s - --docker
进入全屏模式 退出全屏模式
使用以下命令确认代理服务正在运行:
sudo service k3s-agent status
journalctl -f -u k3s-agent.service
进入全屏模式 退出全屏模式
kubectl get nodes
kubectl label node <node name from kubectl get nodes> node-role.kubernetes.io/worker=worker
进入全屏模式 退出全屏模式
kubectl get nodes
附加读数
有大量资源可用于测试 k3s。如果您正在寻找一个起点,我推荐 Digital Ocean 的Getting Started with Containers and Kubernetes: A DigitalOcean Workshop Kit用于运行一个简单的 Flask 应用程序。