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