Initial commit: k3s deployment configurations

This commit is contained in:
K3s Admin
2026-01-21 08:37:05 +00:00
commit 3616496b86
28 changed files with 1502 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
# 1. 基于 Python 基础镜像
FROM python:3.9-slim
# 2. 设置工作目录
WORKDIR /app
# 3. 复制依赖文件并安装
COPY requirements.txt .
RUN pip install -r requirements.txt
# 4. 复制业务代码
COPY main.py .
# 5. 暴露端口
EXPOSE 5000
# 6. 启动命令
CMD ["python", "main.py"]

14
k3s/kaifa/pj1test/main.py Normal file
View File

@@ -0,0 +1,14 @@
from flask import Flask
import socket
app = Flask(__name__)
@app.route('/')
def hello():
# 获取当前容器的主机名
pod_name = socket.gethostname()
return f"<h1>Hello Fei! (v2)</h1><p>Running in Pod: <b>{pod_name}</b></p>"
if __name__ == '__main__':
# 监听所有IP端口5000
app.run(host='0.0.0.0', port=5000)

View File

@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-python-ingress
namespace: demo-space
# ▼▼▼ 1. 新增:告诉 Cert-Manager 用哪个签发机构 (和之前 Registry 一样) ▼▼▼
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
# ▼▼▼ 2. 新增:开启 HTTPS 并指定证书存放的 Secret 名字 ▼▼▼
tls:
- hosts:
- dev.u9.net3w.com
secretName: my-python-tls-secret
rules:
- host: dev.u9.net3w.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-python-service
port:
number: 80

5
k3s/kaifa/pj1test/nano Normal file
View File

@@ -0,0 +1,5 @@
@app.route('/')
def hello():
pod_name = socket.gethostname()
# 修改了这里的内容:
return f"<h1>Hello Fei! (v2 from Private Registry)</h1><p>Running in Pod: <b>{pod_name}</b></p>"

105
k3s/kaifa/pj1test/note.md Normal file
View File

@@ -0,0 +1,105 @@
这里有两个问题阻碍了您的进度:
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)" 字样就大功告成了!**

View File

@@ -0,0 +1 @@
flask