目录
单机环境重装k3s
本文介绍关于 单机重装k3s(集群处理方式存在差异)而不影响业务数据。这个时候,我们可以选择单独重装k3s
这些情况包括不限于:
- k3s损坏
- 更换k3s存储,比如从etcd转sqlite
- (sqlite相比 etcd,sqlite能够更好地兼容某些时间段磁盘io延迟高的场景)。
- 更换k3s网段
- 更换k3s版本
- 修复k3s最新的安全漏洞
- 更换主机ip
- 更换主机名称
- 等等
操作步骤
重装k3s包括两个步骤:
- 准备阶段-打印操作步骤
- 执行阶段-重装k3s
注意:
- 卸载k3s并重新安装k3s,不会清理【业务数据】和【镜像仓数据】
准备阶段-打印操作步骤
这个步骤,主要是由脚本找到 ONES系统之前的部署情况,根据具体情况,打印重建k3s的操作步骤。可以选择在线、或离线的方式。
- 在线:
# 打印部署步骤
# 注意 help.sh 的输出结果如果忘记了,后面可以通过 cat /var/log/ones-deploy.log 重新翻看
curl -sfL https://packages.ones.cn/release/k3s/v1.29.1%2Bk3s2/linux/amd64/help.sh | bash
- 离线:
# 在可访问外网的主机,执行以下命令打包,打包后得到 offline_pkg_k3s_v1.29.1+k3s2_linux_amd64.tar ,拷贝到 离线主机的 /tmp目录下
curl -sfL https://packages.ones.cn/release/k3s/v1.29.1%2Bk3s2/linux/amd64/install.sh | OP=package bash
# 在离线主机(要部署k3s的主机)上,执行下面的命令
cd /tmp
tar -xvf offline_pkg_k3s_v1.29.1+k3s2_linux_amd64.tar
cd offline_pkg
# 打印部署步骤
# 注意 help.sh 的输出结果如果忘记了,后面可以通过 cat /var/log/ones-deploy.log 重新翻看
bash k3s/v1.29.1+k3s2/help.sh
执行 help, 会打印出用户操作的相关步骤提示,如果后面忘记了,可以通过 cat /var/log/ones-deploy.log 重新翻看
重新安装k3s-执行阶段-重装k3s
准备阶段,已经打印了具体的操作步骤,您可以按照准备阶段-打印操作步骤的输出结果,进行 k3s的重装和重新启动ONES系统。
下面是一个参考的操作示例,如果您已经非常熟悉ONES系统的部署,也可以根据自己的判断,调整和执行下面的步骤
- Stop middleware (固定步骤)
# 关闭pod,避免进程异常关闭造成的数据损坏。
kubectl -n ones scale --replicas=0 mysqlcluster mysql-cluster
kubectl -n ones rollout status sts mysql-cluster-mysql
sleep 10
kubectl -n ones scale --replicas=0 sts mysql-operator
kubectl -n ones rollout status sts mysql-operator
sleep 10
kubectl -n ones-op scale --replicas=0 sts etcd
kubectl -n ones-op rollout status sts etcd
sleep 10
- Uninstall k3s and reboot the system.(固定步骤)
# 卸载k3s并重启,避免一些设备的引用没有被释放的问题。
k3s-uninstall.sh
reboot
- Clean up unused data. (按 help.sh 的输出提示操作)
# 清理无用的数据, 以实际 help.sh 的输出为准, 可以通过 cat /var/log/ones-deploy.log 重新翻看
rm -rf $(readlink -f /etc/rancher)
rm -rf $(readlink -f /var/lib/rancher)
rm -rf $(readlink -f /var/lib/kubelet)
rm -rf $(readlink -f /var/log/containers)
rm -rf $(readlink -f /var/log/pods)
rm -rf /etc/rancher /var/lib/rancher /var/lib/kubelet /var/log/containers /var/log/pods
3.1 Create link.(如果之前有给k3s创建软链,会提示这个步骤,否则不提示这个步骤)
# 目的: 部分环境 / 目录的空间大小十分有限,不能够直接给k3s提供存储,这时,我们可以通过创建软连接的方式,把 k3s存储到另外的数据盘目录上
# ONES_DATA_DI 的获取方法:
# 方法1: help.sh 中的打印结果
# 方法2: cat /var/log/ones-deploy.log 重新翻看 help.sh 的打印结果
# 方式3: 执行 find / -name ones-installer-pkg, 输出结果为 /home/ones/ones-installer-pkg, 则 ONES_DATA_DIR=/home/ones
# K3S_DATA_DIR 习惯上,我们会放在 ONES_DATA_DIR 下的 k3s 目录中
K3S_DATA_DIR=/home/ones/k3s
mkdir -p ${K3S_DATA_DIR}
mkdir -p ${K3S_DATA_DIR}/etc/rancher
mkdir -p ${K3S_DATA_DIR}/var/lib/rancher
mkdir -p ${K3S_DATA_DIR}/var/lib/kubelet
mkdir -p ${K3S_DATA_DIR}/var/log/containers
mkdir -p ${K3S_DATA_DIR}/var/log/pods
ln -s ${K3S_DATA_DIR}/etc/rancher /etc/rancher
ln -s ${K3S_DATA_DIR}/var/lib/rancher /var/lib/rancher
ln -s ${K3S_DATA_DIR}/var/lib/kubelet /var/lib/kubelet
ln -s ${K3S_DATA_DIR}/var/log/containers /var/log/containers
ln -s ${K3S_DATA_DIR}/var/log/pods /var/log/pods
- Install k3s. (安装命令,固定步骤)
支持在线、和离线两种方式,选择其中一种方式即可。
- 在线方式
# ONES_DATA_DI 的获取方法:
# 方法1: help.sh 中的打印结果
# 方法2: cat /var/log/ones-deploy.log 重新翻看 help.sh 的打印结果
# 方式3: 执行 find / -name ones-installer-pkg, 输出结果为 /home/ones/ones-installer-pkg, 则 ONES_DATA_DIR=/home/ones
curl -sfL https://packages.ones.cn/release/k3s/v1.29.1%2Bk3s2/linux/amd64/install.sh | ONES_DATA_DIR=/home/ones bash
- 离线方式(准备阶段已经准备好了离线包,直接用即可)
cd /tmp/offline_pkg
# ONES_DATA_DI 的获取方法:
# 方法1: help.sh 中的打印结果
# 方法2: cat /var/log/ones-deploy.log 重新翻看 help.sh 的打印结果
# 方式3: 执行 find / -name ones-installer-pkg, 输出结果为 /home/ones/ones-installer-pkg, 则 ONES_DATA_DIR=/home/ones
ONES_DATA_DIR=/home/ones bash k3s/v1.29.1+k3s2/install.sh
- Rrestart ONES system. (固定步骤)
ones-ai-k8s.sh
make setup-ones-cluster-operator
make setup-tidb-operator
make setup-ones
make setup-installer-web
# Restart nginx.
# 如果没有使用自定义网关,则可以选 make setup-ingress-nginx-controller 安装ingress
make setup-ones-built-in-nginx
Note: Backup and monitoring features need to be re-enabled by referring to the ONES manual. 注意:备份和监控功能的重新打开,需要参考ONES官方手册开启备份。 Note: You can review the help logs again by using the command: cat /var/log/ones-deploy.log 注意:您可以通过 cat /var/log/ones-deploy.log 重新查看help.sh 输出的重装操作指引
常见问题及解决方法
CoreDNS Pod状态异常,存在大量报错。
- 先检查上游DNS是否可用,上游的DNS在主机的 /etc/resolv.conf 中
可以执行ping xxx.xxx.xxx.xx
检查上游DNS的ip是否能够ping通。如果不能,则检查DNS服务是否正常开启或检查网络环境问题。
如果确定没有上游DNS服务、或者确定不使用上游DNS服务,则可编辑 coreDNS 配置,关闭上游。
# 编辑 configmap coredns,并移除 'forward . /etc/resolv.conf' 和 "loop" 这个两行
kubectl -n kube-system edit configmap coredns
- 先检查防火墙是否被开启?
如果是可以关闭防火墙,或调整防火墙规则,以便于 k3s 的service和pod网段、及相关端口能够正常工作。
5000端口被占用, registry安装失败
在重装k3s的过程中,调整步骤 4, 增加参数 K3S_DEFAULT_REGISTRY_PORT, 改为其他端口, 下面是调整后的步骤4示例
- Install k3s. (安装命令,固定步骤)
支持在线、和离线两种方式,选择其中一种方式即可。
- 在线方式
# ONES_DATA_DI 的获取方法:
# 方法1: help.sh 中的打印结果
# 方法2: cat /var/log/ones-deploy.log 重新翻看 help.sh 的打印结果
# 方式3: 执行 find / -name ones-installer-pkg, 输出结果为 /data/ones/ones-installer-pkg, 则 ONES_DATA_DIR=/data/ones
curl -sfL https://packages.ones.cn/release/k3s/v1.29.1%2Bk3s2/linux/amd64/install.sh | ONES_DATA_DIR=/data/ones K3S_DEFAULT_REGISTRY_PORT=5001 bash
- 离线方式(准备阶段已经准备好了离线包,直接用即可)
cd /tmp/offline_pkg
# ONES_DATA_DI 的获取方法:
# 方法1: help.sh 中的打印结果
# 方法2: cat /var/log/ones-deploy.log 重新翻看 help.sh 的打印结果
# 方式3: 执行 find / -name ones-installer-pkg, 输出结果为 /data/ones/ones-installer-pkg, 则 ONES_DATA_DIR=/data/ones
ONES_DATA_DIR=/data/ones K3S_DEFAULT_REGISTRY_PORT=5001 bash k3s/v1.29.1+k3s2/install.sh
根盘空间不足,如何给k3s安排另外的存储路径
在安装k3s之前,通过下面的方式创建软连接
# 目的: 部分环境 / 目录的空间大小十分有限,不能够直接给k3s提供存储,这时,我们可以通过创建软连接的方式,把 k3s存储到另外的数据盘目录上
# ONES_DATA_DI 的获取方法:
# 方法1: help.sh 中的打印结果
# 方法2: cat /var/log/ones-deploy.log 重新翻看 help.sh 的打印结果
# 方式3: 执行 find / -name ones-installer-pkg, 输出结果为 /home/ones/ones-installer-pkg, 则 ONES_DATA_DIR=/home/ones
# K3S_DATA_DIR 习惯上,我们会放在 ONES_DATA_DIR 下的 k3s 目录中
K3S_DATA_DIR=/home/ones/k3s
mkdir -p ${K3S_DATA_DIR}
mkdir -p ${K3S_DATA_DIR}/etc/rancher
mkdir -p ${K3S_DATA_DIR}/var/lib/rancher
mkdir -p ${K3S_DATA_DIR}/var/lib/kubelet
mkdir -p ${K3S_DATA_DIR}/var/log/containers
mkdir -p ${K3S_DATA_DIR}/var/log/pods
ln -s ${K3S_DATA_DIR}/etc/rancher /etc/rancher
ln -s ${K3S_DATA_DIR}/var/lib/rancher /var/lib/rancher
ln -s ${K3S_DATA_DIR}/var/lib/kubelet /var/lib/kubelet
ln -s ${K3S_DATA_DIR}/var/log/containers /var/log/containers
ln -s ${K3S_DATA_DIR}/var/log/pods /var/log/pods
重装脚本还支持哪些参数?
# ONES相关的配置参数
ONES_DATA_DIR ONES的数据存储基础路径
K3S_DEFAULT_REGISTRY_PORT k3s本地私有镜像仓的端口号
# k3s安装脚本的参数
# examples:
# - INSTALL_K3S_EXEC="server --disable=traefik --cluster-cidr=10.42.0.0/16 --service-cidr=10.43.0.0/16"
# - INSTALL_K3S_EXEC="server --cluster-init"
# - INSTALL_K3S_EXEC="agent --server https://<ip or hostname of server>:6443"
# doc:
# - https://docs.k3s.io/installation/configuration#configuration-with-install-script
# - https://docs.k3s.io/reference/env-variables
# 注意:
# 如果要调整 INSTALL_K3S_EXEC, 新的INSTALL_K3S_EXEC 值建议包含下方的值
# --disable=traefik --disable metrics-server --system-default-registry=localhost:${K3S_DEFAULT_REGISTRY_PORT}
INSTALL_K3S_EXEC
K3S_TOKEN
INSTALL_K3S_SKIP_DOWNLOAD
INSTALL_K3S_SYMLINK
INSTALL_K3S_SKIP_ENABLE
INSTALL_K3S_SKIP_START
INSTALL_K3S_VERSION
INSTALL_K3S_BIN_DIR
INSTALL_K3S_BIN_DIR_READ_ONLY
INSTALL_K3S_SYSTEMD_DIR
INSTALL_K3S_NAME
INSTALL_K3S_TYPE
INSTALL_K3S_SELINUX_WARN
INSTALL_K3S_SKIP_SELINUX_RPM
INSTALL_K3S_CHANNEL_URL
INSTALL_K3S_CHANNEL