Kubernetes 运维实战
在 Kubernetes 运维实践中,将集群外服务引入集群内、精准校验容器镜像版本,以及快捷更新应用配置是高频需求。本文总结了这三种场景的标准操作指南。
一、 外部服务接入(Service + Endpoints)
1. 核心原理
通过创建无 spec.selector 的 Service,K8s 会为其分配固定的 ClusterIP/DNS 域名。再手动创建同名 Endpoints,将集群内的流量映射至外部物理机/虚拟机的真实 IP 与端口。后续外部 IP 变更时仅需修改 Endpoints,对 Pod 内业务代码无感知,亦无需重启集群资源。
2. 资源定义配置文件
YAML
apiVersion: v1
kind: Service
metadata:
name: opt-forecast-server
namespace: tsysmart-test
spec:
type: ClusterIP
ports:
- port: 18204
targetPort: 18204
---
apiVersion: v1
kind: Endpoints
metadata:
name: opt-forecast-server
namespace: tsysmart-test
subsets:
- addresses:
- ip: 172.17.1.203
ports:
- port: 18204
3. 操作与验证指令
Bash
# 1. 应用/更新配置
kubectl apply -f external-service.yaml
kubectl edit endpoints opt-forecast-server -n tsysmart-test
# 2. 宿主机网络连通性验证
curl -v http://172.17.1.203:18204/
# 3. Pod 内 Service/DNS 解析与路由验证
kubectl exec -it <pod-name> -n tsysmart-test -- curl -v http://opt-forecast-server:18204/
二、 镜像 Manifest Digest 比对
1. 核心原理
Manifest Digest 是镜像推送到镜像仓库时生成的全局唯一、不可变的 SHA256 哈希标识。用于解决 :latest 或相同 Tag 覆盖导致的版本混淆,精准校验节点运行镜像与远程仓库源码是否一致。
2. 多端查询指令
Bash
# 1. 查看集群内 Pod 当前绑定的 Digest
kubectl describe pod <pod-name> -n <namespace> | grep "Image ID"
# 2. 查看 Worker 节点(Containerd)本地缓存的 Digest
crictl inspecti <image-name>:<tag> | grep -A 2 "repoDigests"
# 3. 免拉取远程查询镜像仓库中特定 Tag 的最新 Digest
skopeo inspect docker://<registry-url>/<repo>/<image>:<tag> | grep Digest
三、 Deployment 环境变量热更新(kubectl set env)
kubectl set env 可直接热更新 Deployment 的环境变量,执行成功后会自动触发 Pod 的滚动更新(Rolling Update)。
1. 命令基本语法
Bash
kubectl set env deployment/<deployment-name> <key>=<value> -n <namespace>
2. 高频使用场景命令
Bash
# 1. 基础添加/更新单个环境变量
kubectl set env deployment/app-manage-server ENV_TYPE=test -n tsysmart-test
# 2. 同时添加/更新多个环境变量
kubectl set env deployment/app-manage-server ENV_TYPE=test DEBUG_MODE=true -n tsysmart-test
# 3. 指定给特定容器(Container)添加环境变量(多容器场景)
kubectl set env deployment/app-manage-server ENV_TYPE=test --containers="app-container" -n tsysmart-test
# 4. 删除已有的环境变量(变量名后加“-”)
kubectl set env deployment/app-manage-server ENV_TYPE- -n tsysmart-test
# 5. 检查环境变量配置是否生效
kubectl describe deployment/app-manage-server -n tsysmart-test | grep -A 5 Environment