Gitops 最佳实践
内容介绍:
一、 GitOps 概述
二、 应用中心介绍
三、 部署应用
四、 GitOps 交付实践
一、 GitOps 概述
1.什么是 GitOps
GitOps 是一种应用持续交付的方式,它的核心思想是将应用程序的声明式编排甚至基础架构编排都存放在 Git 源仓库中,实际上任何能被描述的内容都可以被存放在Git 源仓库中。
GitOps 主要应用场景是在云原生环境下应用的持续交付,相反云原生环境也为GitOps 交互模式的发挥提供了一些基础设施的条件,如下所示:
(1)使用GitOps交付模型的基础条件:
- 不可变基础设施。
- 声明式的容器编排。
2.GitOps交付模型的特性:
- Git 作为应用变更的唯一入口。
- 拉式流水线。
- 可观测性。
3.GitOps工作流程∶
- 应用管理员提交应用变更到Git.
- GitOps 引擎定期检测Git端应用更新,若有更新则开始拉式流水线。
- GitOps 引擎拉取应用更新并交付到实际运行环境。
- GitOps 引擎定期检测应用的实际运行状态和Git端描述的状态的差异性并报警或自动处理。
4.GitOps的好处︰
- 研发效能提升。
- 安全审批和审计.
- 应用运维效率提升。
- 更快的平均恢复时间。
二、应用中心介绍
应用中心是用于 Kubernetes 的声明式的 GitOps 持续交付工具,基于 开源工具Argo CD开发。
Argo CD 包括三个组件,第一个是API,第二个最主要的就是操作这个应用,负责增删改查,主要是管理这个原仓库,例如添加 git 类型的原仓库,以及可以添加HIB类型的原仓库。作为原仓库去进行管理创建删除以及配对的速度管理都在rap上。
原生的 Kubernetes 没有一个完整的应用的概念所有应用的子资源,部署下去就分散到集群里去。
Argo CD 把这些所有的子资源全部描述在一个里,这里就是一个完整的应用的概念。
1. 安装和使用
(1) 第一步安装控制器
(2) 添加集群
2.数据源仓库管理
- 阿里云应用模板
- n Git仓库
- Helm 仓库
3.集群管理
登录GitHub,打开需要部署的仓库
因为是公共的仓库,所以不需要密码直接可以登录
三、创建和部署应用
使用应用中心创建应用应包含以下几部分配置:
1.基础配置
- 应用名称,如 guestbook
- 应用同步策略,如 none 或 automated
2.源仓库配置
- 源仓库类型,如gi或 helm
- 源仓库地址,如httos:llgithub.comhaoshuwei/book-examples
- 其他信息,如果是Git类型源仓库,则还需要配置修订版本信息子目录信息,本
示例中配置修订版本为‘master`分支,子目录为”examples/guestbook/helm`;
如果是 Helm 类型源仓库,则需要选择 Helm Chart 名称及其版本号
3.目标集群配置
- 目标集群的API Server地址或目标集群的名称,https://192.168.0.32:6443或appcenter
- 目标集群的命名空间,如 guestbook
4.guestbook 应用资源拓扑
healthy:表示应用是否正常运行。
synced:表示处于同步状态,即 git 端和实际运行环境中的版本是一致的。
sync ok:在部署应用的动作是否成功完成并返回。
刷新后查看
四、GitOps交付实践
GitOps 模式更新应用 guestbook :
1.开发者创建开发分支 feat/guestbook-v2并更新应用
2. 开发者请求合并分支 feat/guestbook-v2到 master
3.应用管理员审批步骤2中的合并请求,若应用更新没问题则合并请求
4.应用中心自动检测 Git 端应用 guestbook的更新
5.若检测到更新,则将其同步部署至实际运行环境
代码示例:
apiversion: v1
kind: Servicemetadata:
annotations:
kubectl. kubernetes.io/last-applied-configuration: >
{"apiVersion":"v1","kind"":"Service","metadata": {"annotations":{}"labecs":{"app" :"guestbook" ,"app.kuberncreationTimestamp: "2020-10-20T14:38:42z'
labels:
app: guestbook
app. kubernetes.io/instance: guestbook
tier: f rontend
name: frontend
namespace: guestbook
resourceversion: '307457784"
selfLink:/api/v1/namespaces/guestbook/services/frontenduid: 1f1382d3-5841-493d-9689-8edada3ead22
spec:
clusterIP: 172.17.8.69
externalTrafficPolicy: clusterports:
- nodePort: 30020
port: 80
protocol: TCPtargetPort: 80selector:
app: guestbook
tier: frontend
essionAffinity: Nonetype: NodePort
status:
loadBalancer: {}
手动刷新后
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/303655.html