跳到主要内容

K3s 安装其他的 Agent 节点

在 K3s 中,你可以非常容易地将其他节点加入到你的集群中。K3s 的设计使得在服务器节点和代理节点之间传递令牌非常简单,从而使得节点可以快速加入集群。

下面是添加 Agent 节点到你的 K3s 集群的步骤:

1. 获取 K3s 服务器节点的令牌

首先,你需要在你的 K3s 服务器节点上获取节点令牌。你可以使用以下命令来获取令牌:

sudo cat /var/lib/rancher/k3s/server/node-token

这个命令会返回一个令牌,你需要在接下来的步骤中使用它来将 Agent 节点加入到集群。

2. 在 Agent 节点上安装 K3s

接下来,你需要在你想要添加为 Agent 节点的机器上安装 K3s。你可以使用以下命令来安装 K3s 并将其加入到你的集群:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

在这个命令中,你需要将 <server-node-ip> 替换为你的 K3s 服务器节点的 IP 地址或主机名,将 <node-token> 替换为你在第一步中获取的令牌。

这个脚本会自动下载和安装 K3s,并将这个节点配置为集群的 Agent 节点。

验证安装:

systemctl status k3s-agent

如果 Active: active (running) 说明启动成功

3. 验证节点加入集群

一旦安装完成,你可以返回到你的 K3s 服务器节点,并运行以下命令来查看所有的节点,确保你的新 Agent 节点已经成功加入到集群:

kubectl get nodes

你应该能够看到你的 Agent 节点列在输出结果中,并且它的状态应该是 Ready

这样,你就成功地将一个新的 Agent 节点添加到了你的 K3s 集群!

错误处理

IP 连接错误

如果 k3s agent 节点报错 "Waiting to retrieve kube-proxy configuration; server is not ready: failed to get CA certs: Get "https://127.0.0.1:6444/cacerts\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)"

sudo journalctl -u k3s-agent

这里是因为他们不在一个公有云导致的,参考文档 https://docs.k3s.io/zh/installation/network-options#%E5%88%86%E5%B8%83%E5%BC%8F%E6%B7%B7%E5%90%88%E6%88%96%E5%A4%9A%E4%BA%91%E9%9B%86%E7%BE%A4

服务端加上

--node-external-ip=<SERVER_EXTERNAL_IP> --flannel-backend=wireguard-native --flannel-external-ip

在 Agent 上:

--node-external-ip=<AGENT_EXTERNAL_IP>

即修改 /etc/systemd/system/k3s.service 文件,Agent 节点需要修改 /etc/systemd/system/k3s-agent.service 文件,

然后刷新配置

sudo systemctl daemon-reload
sudo systemctl restart k3s
# systemctl restart k3s-agent

Tls 错误

如果k3s已经安装在服务器上,并且你需要添加新的IP地址或域名到TLS证书中,你可以通过以下步骤来完成这个操作:

1、停止k3s服务

在服务器节点上执行以下命令来停止k3s服务:

sudo systemctl stop k3s

2、更新k3s启动参数

sudo nano /etc/systemd/system/k3s.service

或者

sudo nano /etc/systemd/system/k3s.service.d/exec

找到ExecStart行,并在该行添加--tls-san参数和你想要添加的IP地址或域名。例如:

# 	在 TLS 证书上添加其他主机名或 IPv4/IPv6 地址作为 Subject Alternative Name
ExecStart=/usr/local/bin/k3s \
server \
--tls-san 192.168.1.100 \
--tls-san example.com \
--tls-san anotherdomain.com

改完配置,还要删除之前生成的配置

sudo kubectl -n kube-system delete secrets/k3s-serving
sudo mv /var/lib/rancher/k3s/server/tls/dynamic-cert.json /tmp/dynamic-cert.json
sudo systemctl restart k3s

3、重新加载systemd并重启k3s服务

重新加载systemd来应用你所做的更改,并重启k3s服务:

sudo systemctl daemon-reload
sudo systemctl start k3s

# 然后再重启 agent
sudo systemctl restart k3s-agent

4、在agent节点上重新运行安装命令

你需要在每个agent节点上重新运行安装命令,以确保它们可以正确地连接到更新了证书的服务器节点。

请注意,这些步骤可能会导致你的k3s集群在短时间内不可用,因为你需要重启服务。确保在维护窗口期间执行这些操作,并通知所有相关方。

如果你不确定如何进行,请考虑在执行这些步骤之前备份你的系统或咨询有经验的系统管理员。

配置 metrics-server 错误

可以使用下面的命令查看服务器资源

kubectl top nodes

修改模板配置

kubectl edit deployment metrics-server -n kube-system
resources:
- https://github.com/kubernetes-sigs/metrics-server/releases/download/metrics-server-helm-chart-3.8.2/components.yaml

patchesStrategicMerge:
- |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
spec:
template:
spec:
containers:
- name: metrics-server
# Note: As `args` is an array `$patch` won't work on it.
args:
- --cert-dir=/tmp
- --secure-port=10250
# 这里的顺序很重要
- --kubelet-preferred-address-types=InternalIP,ExternalIP
- --kubelet-use-node-status-port
- --metric-resolution=15s
# 不去校验证书
- --kubelet-insecure-tls=true
ports:
- $patch: replace
- containerPort: 10250
name: https
protocol: TCP

然后给节点根据 --node-ip--node-external-ip 标志设置节点 InternalIP 和 ExternalIP 地址字段。

修改 K3S_URL 地址

K3s 是一种轻量级的 Kubernetes 发行版,它易于安装且资源占用较少。在 K3s 集群中,agent 节点需要知道服务器节点的地址,这样它们才能加入到集群中。这个地址通过 K3S_URL 环境变量来提供。

如果你需要更改 agent 节点的 K3S_URL 地址,你可以按照以下步骤进行操作:

1. 在 Agent 节点上停止 K3s 服务

你需要首先在 agent 节点上停止 K3s 服务:

sudo systemctl stop k3s-agent

2. 更新 K3S_URL 地址

更新 K3S_URL 可以通过修改 agent 服务的启动文件来实现。这个文件通常位于 /etc/systemd/system/k3s-agent.service

打开这个文件进行编辑:

sudo nano /etc/systemd/system/k3s-agent.service

找到 ExecStart 行,修改 K3S_URL 的值为新的服务器节点地址。

例如,将其从:

ExecStart=/usr/local/bin/k3s agent --server https://old-server-address:6443 --token <your-token>

更改为:

ExecStart=/usr/local/bin/k3s agent --server https://new-server-address:6443 --token <your-token>

保存并关闭文件。

3. 重新加载 Systemd 配置

在修改了 service 文件后,你需要让 systemd 重新加载配置:

sudo systemctl daemon-reload

4. 重启 K3s Agent 服务

现在你可以重新启动 K3s agent 服务:

sudo systemctl start k3s-agent

5. 验证更改

确保 agent 已经成功连接到新的服务器节点:

sudo k3s kubectl get nodes

在服务器节点上运行这个命令,你应该能够看到 agent 节点现在处于 Ready 状态,并且它已经成功连接到新的服务器地址。

这些步骤应该帮助你成功更改 K3s agent 的 K3S_URL 地址。如果在过程中遇到任何问题,你可以检查 K3s 的日志文件,通常位于 /var/log/syslog/var/log/messages,以获取更多关于发生了什么的信息。