2.6 KiB
2.6 KiB
这里有两个问题阻碍了您的进度:
- 构建报错 (DNS 问题):
Temporary failure in name resolution说明 Docker 在构建过程中没网,无法连接到 Python 官方源下载 Flask。这在 VPS 上很常见,通常是因为 Docker 容器没法正确读取宿主机的 DNS 设置。 - 代码未修改:您刚才
cat main.py的结果显示,代码里还是Hello Fei!。如果您不修改代码内容(比如改成 v2),即便部署成功了,网页上显示的也没变化,您就不知道到底更新成功没有。
我们来一次性解决这两个问题。
第一步:修改代码 (让 v2 显而易见)
请再次编辑 main.py,必须改一点内容,否则我们无法验证更新。
vim main.py
把 return 那一行改成下面这样(加上 v2 字样):
return f"<h1>Hello Fei! (v2)</h1><p>Running in Pod: <b>{pod_name}</b></p>"
保存并退出 (:wq)
第二步:使用“宿主网络”构建 (解决 DNS 报错)
为了解决 pip install 没网的问题,我们在 build 命令中加上 --network=host。这会让构建过程直接使用 VPS 的网络连接,不再受 Docker 网络的限制。
执行这条命令:
# 加入了 --network=host 参数
docker build --network=host -t registry.u9.net3w.com/my-python-app:v2 .
第三步:推送到私有仓库
构建成功后(不再报错 pip 失败),推送到您的私有仓库:
docker push registry.u9.net3w.com/my-python-app:v2
第四步:更新 K3s 的“拉取钥匙” (必须做!)
刚才我们为了修仓库把密码改成了 123456,但 K3s 命名空间 (demo-space) 里的钥匙可能还是旧的。如果不更新,K3s 会因为密码错误拉不到镜像。
# 1. 删掉旧钥匙
kubectl delete secret my-registry-key -n demo-space
# 2. 创建新钥匙 (密码是 123456)
kubectl create secret docker-registry my-registry-key \
--docker-server=registry.u9.net3w.com \
--docker-username=admin \
--docker-password=123456 \
--namespace=demo-space
第五步:部署上线
- 检查 YAML:确保
my-app.yaml里的 image 是 v2。
sed -i 's|image:.*|image: registry.u9.net3w.com/my-python-app:v2|' my-app.yaml
- 应用更新:
kubectl apply -f my-app.yaml
- 重启 Pod (强制拉取新镜像):
kubectl rollout restart deployment my-python-app -n demo-space
- 观察状态:
watch kubectl get pods -n demo-space
一旦看到新 Pod 跑起来,去浏览器刷新页面,看到 "(v2)" 字样就大功告成了!