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

欢迎继续提问!🐍🚀

相关推荐
久绊A11 小时前
春节前云平台运维深度巡检-实操经验
运维·安全·容器·kubernetes·云平台
!chen12 小时前
银河麒麟v11 kubeadm部署k8s v1.35.0高可用集群
云原生·容器·kubernetes
DB!!!12 小时前
自学Kubernestes(k8s)Day1 -- 核心基础概念
云原生·容器·kubernetes
陈陈CHENCHEN14 小时前
【Kubernetes】多集群管理实践 - kubeconfig
kubernetes
hwj运维之路15 小时前
超详细ubuntu22.04部署k8s1.28高可用(二)【结合ingress实现业务高可用】
运维·云原生·容器·kubernetes
切糕师学AI15 小时前
.NET Core Web 中的健康检查端点(Health Check Endpoint)
前端·kubernetes·.netcore
Cyber4K19 小时前
【Kubernetes专项】K8s 控制器 DaemonSet 从入门到企业实战应用
云原生·容器·kubernetes
切糕师学AI19 小时前
RKE(Rancher Kubernetes Engine) 是什么?
云原生·容器·kubernetes·rancher
龙飞0520 小时前
Kubernetes 排障实战:PVC 一直 Pending 的原因与解决方案
运维·学习·云原生·容器·kubernetes
岁岁种桃花儿21 小时前
流量入口Nginx动态发现K8s Ingress Controller实操指南
nginx·架构·kubernetes