更新 K3s 服务镜像
本页为完整操作手册(附件)。日常速查请看:K3s 常用命令。
在 K3s 上把 Deployment 的容器镜像切到新版本。前提:新镜像已构建并推送到私有仓库。
流程概览
text
构建镜像 → 推送 Registry → 查命名空间 / Deployment / 容器名 → kubectl set image → 验证滚动更新总览与架构见 首页。
前置:生成并推送 Docker 镜像
在构建机完成镜像构建、打 tag、推送到私有仓库(示例仓库:`{ip:port}`)。
bash
# 示例:构建、打标签、推送(按实际 Dockerfile / 镜像名调整)
docker build -t solarsense/python-executor:3.11-fileopen-artifact-20260720 .
docker tag solarsense/python-executor:3.11-fileopen-artifact-20260720 \
{ip:port}/solarsense/python-executor:3.11-fileopen-artifact-20260720
docker push {ip:port}/solarsense/python-executor:3.11-fileopen-artifact-20260720确认各 K3s 节点能拉取该仓库(通常通过 /etc/rancher/k3s/registries.yaml 配置)。
第一步:获取命名空间
bash
# 查看所有命名空间
kubectl get namespaces第二步:获取 Deployment 名
bash
# 所有命名空间的 Deployment
kubectl get deployments --all-namespaces
# 指定命名空间
kubectl get deployments -n {命名空间}
# 含节点等详细信息
kubectl get deployments -n {命名空间} -o wide第三步:获取容器名
bash
# 方法 1:从 Deployment 读容器名
kubectl get deployment {deployment名} -n {命名空间} \
-o jsonpath='{.spec.template.spec.containers[*].name}'
# 方法 2:从 Pod 列出容器名(更直观)
kubectl get pods -n {命名空间} \
-o=custom-columns=POD:.metadata.name,CONTAINERS:.spec.containers[*].name
# 方法 3:容器名 + 当前镜像一次看清
kubectl get pods -n {命名空间} \
-o=custom-columns=POD:.metadata.name,CONTAINER:.spec.containers[*].name,IMAGE:.spec.containers[*].image
# 方法 4:按 label 取某 Deployment 下 Pod 的容器名
kubectl get pods -n {命名空间} -l app={label值} \
-o jsonpath='{.items[0].spec.containers[*].name}'进入pod运行 k3s kubectl exec -n {NAMESPACE} --stdin --tty {POD_NAME} -- /bin/bash
查看pod日志 k3s kubectl logs -n {NAMESPACE} --tail=100 {POD_NAME} -f
第四步:更新镜像
bash
kubectl set image deployment/{deployment名} {容器名}={新镜像} -n {命名空间}实操示例
bash
kubectl set image deployment/python-executor-311 \
executor={ip:port}/solarsense/python-executor:3.11-fileopen-artifact-20260720 \
-n solarsense-wuhu对应关系:
| 占位符 | 示例值 |
|---|---|
{deployment名} | python-executor-311 |
{容器名} | executor |
{ip:port} | *.*.*.*:5001(私有仓库) |
{新镜像} | {ip:port}/solarsense/python-executor:3.11-fileopen-artifact-20260720 |
{命名空间} | solarsense-wuhu |
第五步:验证更新
bash
# 等待滚动更新完成
kubectl rollout status deployment/{deployment名} -n {命名空间}
# 查看 Pod 与镜像是否已切换
kubectl get pods -n {命名空间} -o wide
kubectl get deployment {deployment名} -n {命名空间} \
-o jsonpath='{.spec.template.spec.containers[*].image}{"\n"}'
# 如有问题,回滚到上一版本
kubectl rollout undo deployment/{deployment名} -n {命名空间}快速命令速查表
| 需要的信息 | 命令 |
|---|---|
| 所有命名空间 | kubectl get ns |
| 所有 Deployment | kubectl get deployments --all-namespaces |
| 指定命名空间的 Deployment | kubectl get deployments -n {命名空间} |
| Deployment 的容器名 | kubectl get deployment {deployment名} -n {命名空间} -o jsonpath='{.spec.template.spec.containers[*].name}' |
| Deployment 的当前镜像 | kubectl get deployment {deployment名} -n {命名空间} -o jsonpath='{.spec.template.spec.containers[*].image}' |
| 一次性总览 | 见下方 |
一次性获取全部信息:
bash
kubectl get deployments --all-namespaces \
-o=custom-columns=\
NAMESPACE:.metadata.namespace,\
DEPLOYMENT:.metadata.name,\
CONTAINER:.spec.template.spec.containers[*].name,\
IMAGE:.spec.template.spec.containers[*].image说明:总览表里命名空间字段应对应
.metadata.namespace(不是 Deployment 自身的.metadata.name)。