当前位置: 首页 > news >正文

Lab Deploying Multi-container Applications

Lab: Deploying Multi-container Applications

实验目标

本实验旨在通过 HelmKustomize 的结合使用,掌握多容器应用的模板化部署与多环境管理方法。

实验目标包括:

  • 基于 Helm Chart 构建可复用的多容器应用部署包;
  • 利用 Kustomize 在不同环境(如测试、生产)中自定义和管理应用配置,实现统一的版本控制与灵活的环境差异化部署。

实验

说明

  • 本实验将基于 Helm Chart 创建一个名为 flask-demo 的多容器应用,该应用依赖自建的 PostgreSQL 数据库。
  • 您将使用实验中提供的示例文件构建 Helm Chart,并通过 helm template 命令生成渲染结果。
  • 在生成的资源清单基础上,利用 Kustomize 进行多环境配置管理,实现应用在不同环境下的参数化和差异化部署。
  • 实验过程中,所有操作均在本地执行,不依赖远程 Helm 仓库。

前提条件

在开始本实验前,请确保以下环境与配置已准备就绪:

  1. kubectl-acp 已配置完成
    您的本地环境已正确安装并配置了 kubectl-acp 命令行工具,可正常访问 ACP 集群。
  2. 命名空间已创建并授权
    管理员已在 do288 项目中创建命名空间 do288-chapter7do288-satgingdo288-production,并为命名空间配置了合理的资源配额(ResourceQuota)。
  3. 存储类可用
    集群中已存在至少一个可用的 StorageClass,并且上述命名空间有权限使用该存储类来创建 PVC。

实验步骤

  1. 登录ACP平台

    1.1 在本地通过 kubectl-acp 使用 do288-user 用户登录 ACP 平台(密码为:Do288@123)

    kubectl acp login https://192.168.183.246
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    1.2 切换到目标集群的 do288-chapter7 命名空间

    kubectl acp set-cluster region -n do288-chapter7
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 基于下面的 flask-demo 应用和 PostgreSQL 数据库资源文件,构建对应的 Helm Chart 包。

    2.1 通过将应用的 Kubernetes 资源定义(如 Deployment、Service、ConfigMap、Secret、StatefulSet 等)模板化,并结合 values.yaml 文件对关键参数进行可配置化管理,实现应用的快速安装与版本化发布。

    ./flask-demo-chart
    ├── Chart.yaml
    ├── NOTES.txt
    ├── templates
    │   ├── flask-app
    │   │   ├── deployment.yaml
    │   │   └── service.yaml
    │   ├── _helpers.tpl
    │   ├── namespace.yaml
    │   ├── postgres
    │   │   ├── service.yaml
    │   │   └── statefulset.yaml
    │   └── secret.yaml
    └── values.yaml3 directories, 10 files
    

    2.2 分析 Helm Chart 的模板结构,显示所有模板文件的来源和层次关系。

    [root@region-master1 flask-demo-chart]# helm template ./ | grep "# Source:" | sort# Source: flask-demo/templates/flask-app/deployment.yaml
    # Source: flask-demo/templates/flask-app/service.yaml
    # Source: flask-demo/templates/namespace.yaml
    # Source: flask-demo/templates/postgres/service.yaml
    # Source: flask-demo/templates/postgres/service.yaml
    # Source: flask-demo/templates/postgres/statefulset.yaml
    # Source: flask-demo/templates/secret.yaml
    
  3. 使用 Helm 渲染模板并生成基础配置文件

    3.1 使用 helm template 命令对 Chart 进行本地渲染(模板解析),生成对应的 Kubernetes 资源清单文件。

    渲染完成的结果将输出至指定目录下的 kustomized-flask/base/app.yaml 文件中,作为后续 Kustomize 配置管理的基础文件。

    helm template  --skip-tests ./ > ../kustomized-flask/base/app.yaml
    
  4. 手动定义并创建 kustomized-flask 目录结构

    4.1 将所需的文件添加到 kustomized-flask 目录,以便于统一管理不同环境的部署配置。完整的目录结构如下,其中 base/app.yaml 配置文件是由 helm template 渲染的完整的部署文件。

    ./kustomized-flask
    ├── base
    │   ├── app.yaml
    │   └── kustomization.yaml
    └── overlays├── production│   ├── kustomization.yaml│   └── patches│       ├── deployment.yaml│       ├── flask-service.yaml│       └── postgres-service.yaml└── staging├── kustomization.yaml└── patches└── deployment.yaml6 directories, 8 files
    

    4.2 参考下列内容补充 base/kustomization.yaml 配置内容。

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomizationresources:
    - app.yamllabels:
    - pairs:app.kubernetes.io/name: flask-demoapp.kubernetes.io/instance: flask-demo-baseapp.kubernetes.io/version: "v4"app.kubernetes.io/component: web-applicationapp.kubernetes.io/part-of: flask-demo-projectcommonAnnotations:note: "Base configuration for Flask Demo Application"managed-by: "kustomize"environment: "base"images:
    - name: 192.168.183.215:30010/do288/flask-pg-demonewTag: v4
    - name: 192.168.183.215:30010/do288/postgresnewTag: "10.0"
    

    4.3 参考下列内容补充 overlays/staging/ 配置内容。

    overlays/staging/kustomization.yaml

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomizationnamespace: do288-stagingresources:
    - ../../basepatches:
    - path: patches/deployment.yamltarget:kind: Deploymentname: demo-app
    

    overlays/staging/patches/deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: demo-app
    spec:replicas: 2template:spec:containers:- name: demo-appenv:- name: ENVIRONMENTvalue: "staging"- name: DEBUGvalue: "true"
    

    4.4 参考下列内容补充 overlays/production/ 配置内容。

    overlays/production/kustomization.yaml

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomizationnamespace: do288-productionresources:
    - ../../basepatches:
    - path: patches/deployment.yamltarget:kind: Deploymentname: demo-app
    - path: patches/postgres-service.yamltarget:kind: Servicename: postgres
    - path: patches/flask-service.yamltarget:kind: Servicename: demo-app
    

    **overlays/production/patches/deployment.yaml **

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: demo-app
    spec:replicas: 2template:spec:containers:- name: demo-appimage: 192.168.183.215:30010/do288/flask-pg-demo:v5env:- name: ENVIRONMENTvalue: "staging"- name: DEBUGvalue: "true"
    

    overlays/production/patches/flask-service.yaml

    piVersion: v1
    kind: Service
    metadata:name: demo-app
    spec:ports:- port: 5000targetPort: 5000nodePort: 30501
    

    overlays/production/patches/postgres-service.yaml

    apiVersion: v1
    kind: Service
    metadata:name: postgres
    spec:ports:- name: postgresport: 5432protocol: TCPtargetPort: tcp-postgresnodePort: 30008
    
  5. 通过上述 Kustomize 进行快速部署 staging 环境应用

    5.1 运行以下命令,快速部署应用

    [root@region-master1 kustomized-flask]# kubectl kustomize overlays/staging/ | kubectl apply -n do288-staging -f -
    secret/postgres-secret created
    service/demo-app created
    service/postgres created
    service/postgres-headless created
    deployment.apps/demo-app created
    statefulset.apps/postgres created
    

    5.2 查看应用创建状态是否正常

    [root@region-master1 kustomized-flask]# kubectl get pods,svc -n do288-staging
    NAME                            READY   STATUS    RESTARTS   AGE
    pod/demo-app-6c8fb7c654-mll9q   1/1     Running   0          53s
    pod/demo-app-6c8fb7c654-pxw5j   1/1     Running   0          54s
    pod/postgres-0                  1/1     Running   0          54sNAME                        TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
    service/demo-app            NodePort    10.4.142.21   <none>        5000:30500/TCP   54s
    service/postgres            NodePort    10.4.152.83   <none>        5432:30007/TCP   54s
    service/postgres-headless   ClusterIP   None          <none>        5432/TCP         54s
    

    5.3 通过 ACP Web 控制台或者 kubectl exec 命令进入到容器中并创建创建测试表。

    # 进入 postgres-0 容器中
    kubectl exec -it postgres-0 -- psql -U postgres -d test# 创建users表
    CREATE TABLE users (id SERIAL PRIMARY KEY,name VARCHAR(50)
    );
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    5.4 通过 ip + nodePort 调用 flask-demo 应用来验证对 postgresql 数据库的读写操作。

    # 测试服务是否可用
    curl http://192.168.183.245:30500# 获取列表中的应用
    curl http://192.168.183.245:30500/users# 通过 curl 命令向数据库中写数据
    curl -X POST  http://192.168.183.245:30500/users  -H "Content-Type: application/json" -d '{"name":"David"}'
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    5.5 手动清理 flask-demo 应用

    [root@region-master1 kustomized-flask]# kubectl kustomize overlays/staging/ | kubectl delete -n do288-staging -f -
    secret "postgres-secret" deleted
    service "demo-app" deleted
    service "postgres" deleted
    service "postgres-headless" deleted
    deployment.apps "demo-app" deleted
    statefulset.apps "postgres" deleted
    
  6. 参考 staging 环境部署方式,进行 production 环境应用的部署

http://www.dtcms.com/a/490305.html

相关文章:

  • 目标检测2
  • 12-用户管理
  • 合肥哪里做网站西安网站建设制作专业公司
  • 中冶东北建设网站装修网站运营
  • Nginx+Lua动态加载黑名单
  • 吕口*了多乐*-(话题)程序系统架构方案
  • Java Spring 框架的`@Autowired` 注解 以及依赖注入分析
  • [Docker集群] Docker 数据持久化
  • MCP vs. API:AI智能体如何更轻松地连接外部世界?
  • 【XR硬件系列】破局“芯”瓶颈:深入浅出解析XR专用芯片的必然性
  • 浙江省建设培训中心的网站小程序开发公司简介
  • Redis 限流解决方案:结合 Lua 脚本、AOP 和自定义注解的实现
  • 游戏画面卡顿残影?这款电竞显示器610Hz + 4K OLED
  • COLMAP原理讲解与使用教程
  • 定位守护童年,科技构筑安全屏障
  • AWS EC2 Jenkins 自动化部署与 Python 环境管理
  • Linux中快速部署Elasticsearch(基础TLS配置)
  • 2025吉比特-游戏引擎开发-一面复盘
  • java数据结构--List的介绍
  • 网站主页不收录肥城房产网
  • 计算机视觉(opencv)——基于 MediaPipe 的实时面部表情识别
  • C++设计模式_行为型模式_观察者模式Observer(发布-订阅(Publish-Subscribe))
  • 怎么解决ModuleNotFoundError: No module named ‘Cython‘
  • 电子商务网站规划流程手机主题制作网站
  • 微信小程序 Button 组件 open-type 完全指南:从用户信息获取到客服分享的实战应用
  • 阿里云白皮书-架构
  • Rokid 开发空间小程序 实战
  • RAG系统搭建指南:5种主流框架的易用性和效果对比
  • 网站后台怎么添加代码哪里有免费的域名注册建网站
  • Jetson AGX Orin+GMSL+AI视觉开发套件,支持自动驾驶,机器人,工业视觉等应用