Python 版本的 Kubernetes 镜像动手实验任务

当然可以!下面是一个 Python 版本的 Kubernetes 镜像动手实验任务,使用轻量级的 Flask 框架,步骤清晰、资源占用少,非常适合学习和快速验证。


🎯 实验目标(Python 版)

  1. 编写一个返回 "Hello from K8s! 🐍" 的 Flask 应用
  2. 构建 Docker 镜像(基于 python:3.11-slim
  3. 推送镜像到 阿里云容器镜像服务 ACR
  4. 在 Kubernetes 中部署并暴露为 NodePort 服务
  5. 通过浏览器或 curl 访问验证

✅ 环境要求:

  • Linux 服务器(如阿里云 ECS)
  • 已安装 Docker
  • 已配置 kubectl 连接到 K8s 集群

📦 第一步:编写 Python Web 应用

1.1 创建项目目录

bash 复制代码
mkdir ~/k8s-python-demo && cd ~/k8s-python-demo

1.2 创建 app.py

python 复制代码
# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello():
    return "Hello from K8s! 🐍\n"

@app.route('/')
def index():
    return "Welcome to Python K8s Demo!\n"

if __name__ == '__main__':
    # 监听所有接口,端口 8080
    app.run(host='0.0.0.0', port=8080)

1.3 创建 requirements.txt

ini 复制代码
# requirements.txt
Flask==3.0.3

🐳 第二步:构建 Docker 镜像

2.1 编写 Dockerfile

bash 复制代码
# Dockerfile
FROM python:3.11-slim

WORKDIR /app

# 复制依赖文件并安装(利用 Docker 层缓存)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY app.py .

# 暴露端口
EXPOSE 8080

# 启动命令
CMD ["python", "app.py"]

💡 使用 slim 镜像减小体积,--no-cache-dir 减少镜像大小

2.2 构建镜像

erlang 复制代码
docker build -t k8s-python-app:1.0 .

2.3 本地测试

bash 复制代码
docker run -d --name test-py -p 8080:8080 k8s-python-app:1.0
curl http://localhost:8080/hello
# 输出:Hello from K8s! 🐍
docker stop test-py && docker rm test-py

☁️ 第三步:推送镜像到阿里云 ACR

3.1 前提:已在 阿里云 ACR 控制台 创建:

  • 个人版实例(如地域:cn-hangzhou
  • 命名空间(如:my-namespace

3.2 登录 ACR 并推送

perl 复制代码
# 登录(替换为你的阿里云账号密码或独立 Registry 密码)
docker login registry.cn-hangzhou.aliyuncs.com

# 打标签
docker tag k8s-python-app:1.0 \
  registry.cn-hangzhou.aliyuncs.com/my-namespace/k8s-python-app:1.0

# 推送
docker push registry.cn-hangzhou.aliyuncs.com/my-namespace/k8s-python-app:1.0

✅ 成功后可在 ACR 控制台看到镜像


🚀 第四步:在 Kubernetes 中部署

4.1 创建部署 YAML 文件

yaml 复制代码
# python-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: python-demo-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: python-demo
  template:
    metadata:
      labels:
        app: python-demo
    spec:
      containers:
        - name: flask-app
          image: registry.cn-hangzhou.aliyuncs.com/my-namespace/k8s-python-app:1.0
          ports:
            - containerPort: 8080
          imagePullPolicy: Always
          # 可选:资源限制
          resources:
            requests:
              memory: "64Mi"
              cpu: "50m"
            limits:
              memory: "128Mi"
              cpu: "100m"
---
apiVersion: v1
kind: Service
metadata:
  name: python-demo-svc
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30081  # 注意:不要和之前冲突
  selector:
    app: python-demo

4.2 部署到集群

复制代码
kubectl apply -f python-app.yaml

4.3 验证部署

csharp 复制代码
# 查看 Pod 状态
kubectl get pods -l app=python-demo

# 查看 Service
kubectl get svc python-demo-svc

# 从本地访问(替换为你的 ECS 公网 IP)
curl http://<ECS公网IP>:30081/hello
# 输出:Hello from K8s! 🐍

🔒 安全组设置 :确保阿里云 ECS 安全组已开放 30081 端口(TCP)


🧪 第五步:进阶挑战(可选)

✅ 挑战 1:用 ConfigMap 自定义欢迎语

yaml 复制代码
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  WELCOME_MSG: "Hello from ConfigMap! 🎉"

修改 app.py 支持环境变量:

python 复制代码
import os
from flask import Flask

app = Flask(__name__)
msg = os.getenv("WELCOME_MSG", "Hello from K8s! 🐍")

@app.route('/hello')
def hello():
    return msg + "\n"

在 Deployment 中注入:

yaml 复制代码
env:
  - name: WELCOME_MSG
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: WELCOME_MSG

✅ 挑战 2:添加健康检查

yaml 复制代码
livenessProbe:
  httpGet:
    path: /hello
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10
readinessProbe:
  httpGet:
    path: /hello
    port: 8080
  initialDelaySeconds: 2
  periodSeconds: 5

🗑️ 清理资源

perl 复制代码
# 删除应用
kubectl delete -f python-app.yaml

# 删除本地镜像
docker rmi k8s-python-app:1.0
docker rmi registry.cn-hangzhou.aliyuncs.com/my-namespace/k8s-python-app:1.0

📌 关键优势(Python vs Java)

项目 Python 版
镜像大小 ~120 MB(Java 通常 300MB+)
启动速度 秒级
依赖简单 只需 Flask
学习曲线 更平缓

✅ 总结流程图

perl 复制代码
app.py + requirements.txt 
       ↓
   Docker build → k8s-python-app:1.0
       ↓
   docker push → 阿里云 ACR
       ↓
kubectl apply → Deployment + Service
       ↓
curl http://ECS_IP:30081/hello → 成功!

现在你拥有了一个完整的 Python 微服务 + K8s 部署 实践案例!

需要我提供:

  • 带 Helm Chart 的版本
  • 使用 Gunicorn 提升性能的生产级 Dockerfile
  • 对接阿里云 SLB 或 Ingress 的方案

欢迎继续提问!🐍🚀

相关推荐
bukeyiwanshui8 小时前
20260626 k8sControllers介绍
云原生·容器·kubernetes
能有时光9 小时前
] K8s 核心组件使用指南
云原生·容器·kubernetes
云烟成雨TD10 小时前
Kubernetes 系列【13】控制器:可视化操作 Deployment
云原生·容器·kubernetes
运维老郭1 天前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
gs801401 天前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui1 天前
20260701 k8s Metric Server
容器·贪心算法·kubernetes
Zhu7581 天前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
摇滚侠1 天前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 51-60
java·云原生·kubernetes
bukeyiwanshui1 天前
20260703 K8s ECShop商城项目
云原生·容器·kubernetes