Skip to content

日常运维

常用别名速查

部署完成后,以下别名已写入 /root/.bashrc

bash
kpa  = kubectl get pod -A -o wide          # 查看所有 Pod
kp   = kubectl get pod -o wide             # 查看当前 namespace Pod
kci  = k3s ctr image import               # 导入镜像
k    = kubectl                              # 缩写
ke   = kubectl exec -it                    # 进入容器
kd   = kubectl describe                    # 查看详情

进入运维容器

bash
# 进入 ops 容器(所有 kubectl/helm 操作在此执行)
docker exec -it yidun-ops bash
cd /deploy/k3s

日常巡检

早晨巡检清单

bash
# 1. 节点状态
kubectl get node

# 2. 异常 Pod(非 Running/Completed 的)
kubectl get pod -A | grep -v -E "Running|Completed|STATUS"

# 3. 最近异常事件
kubectl get events -A --sort-by='.lastTimestamp' \
  | grep -E "Warning|Error" | tail -20

# 4. 磁盘使用
df -h /data   # K3s 数据盘

# 5. 中间件状态
kubectl get pod -n yidun-infra
kubectl get pod -n tidb

关键服务可用性检查

bash
# Elasticsearch
curl -s http://localhost:30092/_cluster/health | jq .status

# MinIO
curl -s http://localhost:31311/minio/health/live

# Kafka(检查 Pod 状态)
kubectl get pod -n yidun-infra -l app.kubernetes.io/name=kafka

# MySQL
kubectl exec -it mysql-yidun-0 -n tidb -- \
  mysql -u admin -p'eHSkDv7c77*j' -e "SELECT 1" 2>/dev/null

应用升级

单模块升级

bash
# 1. 更新 values.yaml 中的镜像版本
vim k3s-yidun-apps/yidun-text/values.yaml

# 2. 执行升级
cd k3s-yidun-apps/yidun-text
bash install.sh upgrade

# 3. 查看滚动更新进度
kubectl rollout status deployment -n yidun-text

# 4. 验证
kubectl get pod -n yidun-text

滚动升级所有平台模块

bash
cd k3s-yidun-apps/yidun-platform/01-app
bash install-all.sh upgrade

回滚

bash
# 回滚到上一版本
helm rollback yidun-text -n yidun-text

# 查看历史版本
helm history yidun-text -n yidun-text

扩容

增加 Worker 节点

  1. 确保新节点满足系统要求
  2. 配置 SSH 免密
  3. auto-docker.confk8s_worker_ip 中添加新节点 IP
  4. 重新运行 bootstrap 初始化:
bash
# 更新 Ansible 配置
cd bootstrap
ansible-playbook -i inventory/dev/hosts.ini nodes.yml -b \
  --limit <新节点IP>

# 执行 K3s 安装(仅针对新节点)
cd k3s_ansible
ansible-playbook -i inventory/dev/host.ini cluster.yml -b \
  --limit <新节点主机>

为新节点打标签

bash
# 如果新节点需要承载某些中间件
kubectl label node <new-node> kafka=true
kubectl label node <new-node> elasticsearch=true

镜像管理

导入新镜像

bash
# 方法 1:通过 K3s ctr 直接导入(无需 registry)
k3s ctr image import <image.tar>

# 方法 2:通过 Docker + Registry
docker load -i <image.tar>
docker tag <old-name> private-registry.yidun.internal/<repo>/<name>:<tag>
docker push private-registry.yidun.internal/<repo>/<name>:<tag>

清理无用镜像

bash
# 清理 K3s 未使用镜像
k3s crictl rmi --prune

# 查看所有镜像
k3s crictl images

# 清理 Docker 镜像(宿主机)
docker image prune -a --filter "until=720h"

证书与密钥

K3s 证书续期

K3s 证书默认 1 年有效期,需要提前续期:

bash
# 查看证书到期时间
openssl x509 -in /data/k3s/server/tls/serving-kube-apiserver.crt \
  -noout -enddate

# K3s 证书自动轮转(K3s 1.21.1+ 支持)
systemctl restart k3s  # 每次重启时自动检查并续期

数据备份

MySQL 定期备份

bash
# 创建备份脚本 /etc/cron.daily/mysql-backup
#!/bin/bash
BACKUP_DIR=/data/backups/mysql
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR

kubectl exec mysql-yidun-0 -n tidb -- \
  mysqldump -u admin -p'eHSkDv7c77*j' \
  --all-databases --single-transaction \
  > $BACKUP_DIR/all-databases-$DATE.sql

# 保留最近 7 天
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete

Elasticsearch 快照

bash
# 注册 snapshot repository(使用 MinIO 作为后端)
curl -X PUT "http://localhost:30092/_snapshot/backup_repo" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "s3",
    "settings": {
      "endpoint": "http://<minio-ip>:31311",
      "bucket": "es-snapshots",
      "access_key": "admin",
      "secret_key": "Minio@2020"
    }
  }'

# 创建快照
curl -X PUT "http://localhost:30092/_snapshot/backup_repo/snapshot_$(date +%Y%m%d)"

K3s 集群维护

节点维护模式

bash
# 驱逐节点上的 Pod(维护前执行)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

# 维护完成后恢复调度
kubectl uncordon <node-name>

查看集群组件状态

bash
# 查看控制面组件
kubectl get cs  # componentstatuses

# 查看 etcd(HA 模式)
kubectl exec -n kube-system etcd-<master-node> -- \
  etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/data/k3s/server/tls/etcd/server-ca.crt \
  --cert=/data/k3s/server/tls/etcd/server-client.crt \
  --key=/data/k3s/server/tls/etcd/server-client.key \
  member list

安全操作

更新 registry 密码

bash
# 更新 Docker registry 认证
docker login private-registry.yidun.internal -u yidun -p<new-password>

# 同步更新各节点的 registry 配置
# K3s 的 registry 配置在:/etc/rancher/k3s/registries.yaml

审计操作日志

bash
# 查看 K8s 审计日志(如果启用)
kubectl logs -n kube-system kube-apiserver-* | grep audit

# 查看近期操作
kubectl get events -A --sort-by='.lastTimestamp' | tail -50

内部使用文档,请勿外传