Files
k3s-configs/k3s/kaifa/pj1test/note.md
2026-01-21 08:37:05 +00:00

106 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
这里有两个问题阻碍了您的进度:
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)" 字样就大功告成了!**