K3s 学习(五)四个月的使用中出现的问题、集群的重装升级和进阶配置

从 2021 年 10 月初开始将项目迁移到 K3s 集群,掐指一算到现在也四个月了,使用过程中基本是大问题没有、小问题不断……
直到早上集群监控失效,搜索发现没有简单解法之后不得不选择重装。

复盘下操作:在一个低配置节点(2H4G 服务器)上部署新的 Docker 容器,本以为和平常一样,但是当发现服务报 Error 的时候实际上已经吃满 CPU 长达 3 到 4 分钟了,之后整个集群的监控就失效了。


使用中出现的问题

1、Rancher 页面上显示异常的容器重启次数
常见 100+ 重启次数,但是在页面刷新后就正常了。

2、监控 API 未就绪
也是我这次碰到的问题,集群监控的失效,导致无法查看各节点资源的实际占用情况,也无法新增对容器的监控。


重装集群

详细教程可以参考我这三篇文章:

  1. K3s 学习(一)高可用模式在 CentOS7 服务器上构建第一组 server + agent 节点
  2. K3s 学习(二)安装 Rancher Labs(Docker 安装,推荐)
  3. K3s 学习(三)Rancher 导入现有 K3s 集群并创建第一个容器应用

本次留下的命令和步骤仅作笔记用。

1、记录下当前集群中一些重要内容
包括:命名空间服务发现(我基本就当做 DNS 来用)PVC(我挂载了腾讯云的 COS

2、重装服务器
在云服务器厂商处建立快照,并重新安装操作系统,同时云数据库也做清空。

3、配置 server 服务器
设置数据库连接用的环境变量:

# 修改 profile 文件
vi /etc/profile
...
...
# MySQL 数据库
export K3S_DATASTORE_ENDPOINT="mysql://$username:[email protected](127.0.0.1:3306)/$database"
# 主节点的 Token
export K3S_TOKEN="K1082501c0eaxxxxxxxx77059a4fff524xxx589b9::server:1f2d8a3xxxxx7a1e2e4xxx60"

server 节点上执行以下命令获取 K3S_TOKEN

cat /var/lib/rancher/k3s/server/node-token
# 使环境变量生效
source /etc/profile

安装 server 节点:

curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server

4、配置 agent 服务器
设置 K3S_TOKENserver 节点的链接环境变量:

# 修改 profile 文件
vi /etc/profile
...
...
# 在最末尾添加 server 节点的 node-token
export K3S_TOKEN="K1082501c0eaxxxxxxxx77059a4fff524xxx589b9::server:1f2d8a3xxxxx7a1e2e4xxx60"
# server 主节点的地址,端口默认为 6443
# 必须使用 HTTPS 协议:Only https:// URLs are supported for K3S_URL ip address
export K3S_URL="https://10.0.12.0:6443"

server 节点上执行以下命令获取 K3S_TOKEN

cat /var/lib/rancher/k3s/server/node-token
# 使环境变量生效
source /etc/profile

安装 agent 节点:

curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

5、确认集群安装完成

kubectl get nodes

6、安装 Rancher 面板
在 Rancher 服务器上运行:

docker run -d --name rancher \
    --privileged \
    --restart=unless-stopped \
    -p 8080:80 -p 8443:443 \
    -v /rab/ssl/rancher.k3s.com.pem:/etc/rancher/ssl/cert.pem \
    -v /rab/ssl/rancher.k3s.com.key:/etc/rancher/ssl/key.pem \
    -v /rab/docker/rancher/rancher:/var/lib/rancher \
    -v /rab/docker/rancher/auditlog:/var/log/auditlog \
    --privileged \
    rancher/rancher:v2.6.3 \
    --no-cacerts

在主节点上更新 DNS,以保证能将现有集群添加到 Rancher 中(IP 为 Rancher 服务所在的 IP):

kubectl -n cattle-system patch  deployments cattle-cluster-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                      "hostnames":
                      [
                        "rancher.k3s.com"
                      ],
                      "ip": "10.0.12.1"
                    }
                ]
            }
        }
    }
}'

进阶配置

1、针对 Docker 容器吃满资源的情况做限制
在创建命名空间的时候设置即可,这样该空间下的所有容器都会被限制(1000 mCPUs 代表 1 核):
限制

更多的待添加……

暂时结束。