# job2 **Repository Path**: jaywin2u/job2 ## Basic Information - **Project Name**: job2 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-05 - **Last Updated**: 2024-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目背景 ​ 本项目遵循GitOps理念,以helm作为kubernetes的资源清单管理工具,以argoCD作为资源部署工具,以简化的YAML配置文件作为配置入口,简单完成基于GitOps理念的实践。并且,结合ApplicationSet满足不同环境下的资源和配置需求。 ## 说明 ### 如何使用模板与ArgoCD和Helm配合 项目以`myapp`应用为例子,可部署出三个环境的Deployment,以适配不同环境的资源和配置需求。它基于helm工具,通过自定义`template/deployment.yaml`和`template/service.yaml`以适配简化YAML模板的结构,而后基于argoCD以Helm管理的方式,可直接创建和部署出YAML模板定义好的资源。当前定义的资源包括: * Deployment * Service * HPA 在`myapp`中,可以看到其目录结构如下: ``` myapp |-- dev |-- prod |- staging ``` 其中三个目录分别代表三种环境,每个目录下各自定义了该环境所需的资源和配置需求。 此处将环境分为了dev、staging和prod,以表示开发、预发布和生产环境。此处做简要说明: * dev:副本数为1,且无HPA * staging:副本数为2,且无HPA * prod:副本数为2,且存在HPA,最大副本数为5 当应用到Kubernetes后,argocd将生成三个Application分别代表myapp应用的不同环境,并且会自动拉取gitee上预设好的helm资源清单并完成部署。 ### 使用流程 * 预设环境: * Kubernetes:容器编排平台 * metric-server:提供指标以实现HPA * argocd:CD工具 * helm:helm环境 * 环境初始化: * 部署ApplicationSet: ```bash kubectl apply -f appSet.yaml ``` 说明:Argo CD 中的 ApplicationSet 是一种用于自动生成和管理多个Application的机制,通过自定义Application的模板和参数可批量管理多个Application。因此,基于ApplicationSet以声明式API的方式管理Application,更加符合GitOps理念。 项目基于ApplicationSet,根据不同路径下的资源清单构建不同环境下的同一应用。 * 资源使用: * 通过修改简化YAML配置文件:`values.yaml`,并提交到gitee后即自动触发应用部署。比如修改生产环境下的配置: ```bash vim myapp/prod/values.yaml ``` 并提交到git仓库中。 ### YAML模板结构 以prod环境为例,简化YAML配置结构如下: ```yaml app: name: myapp image: yeasy/simple-web # 指定镜像标签 tag: latest # 指定副本数,注意:如果启用了autoScaling则副本数以HPA配置为准 # 参考:https://argo-cd.readthedocs.io/en/stable/user-guide/best_practices/#leaving-room-for-imperativeness replicas: 3 # 资源配额 resources: limits: cpu: 500m memory: 512Mi requests: cpu: 200m memory: 256Mi # 环境变量 env: - name: APP_ENV value: production # 指定service的端口 ports: - name: http containerPort: 80 # 探针检测 probes: liveness: path: / port: http readiness: path: / port: http # 持久存储路径,默认使用hostPath存储 volume: - name: data path: /data # 设定HPA,此处表示当CPU使用率大于50%时自动扩展副本数 autoscaling: enabled: true minReplicas: 2 maxReplicas: 5 targetCPUUtilizationPercentage: 50 ``` 后续可通过增加或者修改配置模板的结构,并调整template下的模板文件以适配多种不同的资源和配置需求。 ### 测试脚本 在本地开发时,可直接运行`test_deploy.sh`,该脚本会遍历每个环境并以dry-run方式部署一遍资源清单定义的资源,以测试资源清单的定义是否存在错误。 效果如下: * argoCD: ![argocd](./img/argocd.png) * 不同环境下的应用: ![Applications](./img/Applications.png) * HPA的Pod副本数自动扩容: ![hpa](./img/hpa.png) # 备注: 项目文件同步更新在gitee:https://gitee.com/jaywin2u/job2