Initial commit: k3s deployment configurations
This commit is contained in:
18
k3s/kaifa/pj1test/Dockerfile
Normal file
18
k3s/kaifa/pj1test/Dockerfile
Normal 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
14
k3s/kaifa/pj1test/main.py
Normal 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)
|
||||
25
k3s/kaifa/pj1test/my-app.yaml
Normal file
25
k3s/kaifa/pj1test/my-app.yaml
Normal 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
5
k3s/kaifa/pj1test/nano
Normal 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
105
k3s/kaifa/pj1test/note.md
Normal 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)" 字样就大功告成了!**
|
||||
1
k3s/kaifa/pj1test/requirements.txt
Normal file
1
k3s/kaifa/pj1test/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
flask
|
||||
Reference in New Issue
Block a user