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 的方案

欢迎继续提问!🐍🚀

相关推荐
清风一徐20 小时前
K8S环境中通过prometheus实现flink服务监控并给flink设置服务监测自动重启
linux·运维·云原生·容器·flink·kubernetes·prometheus
稚辉君.MCA_P8_Java20 小时前
DeepSeek 使用Kubernetes部署Redisson
大数据·人工智能·redis·后端·kubernetes
生骨大头菜1 天前
阿里云K8S的rabbitmq实现持久化
阿里云·kubernetes·云计算
稚辉君.MCA_P8_Java2 天前
Sqoop 实现的功能是什么
java·服务器·架构·kubernetes·sqoop
_abcdef2 天前
Kubernetes K8s
云原生·容器·kubernetes
java_logo2 天前
Kubernetes Dashboard Docker 容器化部署指南
运维·mysql·docker·云原生·容器·kubernetes·php
j***63082 天前
使用Kubernetes部署Spring Boot项目
spring boot·容器·kubernetes
chen_note2 天前
K8s的配置存储与实战
java·容器·kubernetes·volume·k8s存储
KevinAha2 天前
Docker K8s VM 简介
docker·容器·kubernetes