想做一个自己的网站怎么做的,天津seo推广服务,网址大全网站,小程序商城代运营背景介绍
请回答#xff1a;你们是如何保证线上部署的服务#xff0c;从服务版本到参数配置#xff0c;都是和测试通过的版本是一致的呢#xff1f;
本文将介绍GitOps的基本原理以及ArgoCD的使用#xff1a;ArgoCD部署Grafana Loki 到k8s集群。
本文项目地址#xff1…背景介绍
请回答你们是如何保证线上部署的服务从服务版本到参数配置都是和测试通过的版本是一致的呢
本文将介绍GitOps的基本原理以及ArgoCD的使用ArgoCD部署Grafana Loki 到k8s集群。
本文项目地址郭麻花的Azure Devops argo-cd - Repos (azure.com)
什么是GitOps
GitOps通常作为k8s集群中的一项基础设施。它将Git仓库中的服务清单作为唯一版本来源并且提供自动部署机制。
GitOps提供了高度自动化和审计朔源能力来管理集群服务大大提高团队交付效率与安全一致性。
ArgoCD
ArgoCD是一个用于Kubernetes集群的开源且强大的GitOps工具。 ArgoCD可以做什么
ArgoCD可以管理各种Kubernetes原生资源如Deployment、Service、ConfigMap、Secret等ArgoCD还可以管理Helm ChartKubernetes CRD等;ArgoCD还可以管理有状态服务如PersistentVolumeClaim等。
总之你可以将ArgoCD看作是集群的管家它可以严格按照Git仓库中的清单文件时刻监视清单与集群资源的差异并提供自动/手动 同步机制。
ArgoCD Application
Application是由ArgoCD创建的一种Kubernetes CRD。一个k8s服务通常包含多种资源例如deployment, secret, configmap 或者CRD等等而ArgoCD 可以将这些资源视为一个Application进行管理。
假如你们的服务已经被打包成了Helm Chart更容易通过ArgoCD Application来进行管理。 注意ArgoCD在部署Helm Chart时会将Chart重新拆解为各项资源文件进行部署因此你无法通过Helm来管理ArgoCD部署的Helm Chart。 另外Application可以包含其它Application。你可以在ArgoCD中对集群中的服务进行逻辑划分将多个Application聚合到一个Application下进行管理。 使用Helm安装ArgoCD
使用helm安装ArgoCD非常简单但是需要注意
即使在具有充分的Cluster Role的情况下ArgoCD 默认也只允许资源部署到它所在的命名空间。我们可以通过指定server参数 --application-namespaces*让ArgoCD允许资源部署到其他命名空间。
helm repo add argo https://argoproj.github.io/argo-helmhelm install my-release argo/argo-cd 我们可以通过port-forward argocd-server 8080端口并使用init-secret中的admin密码访问Argocd。
创建Git清单仓库
Grafana Loki是一个开源的高性能的集群日志聚合服务它的原理与Promthus相似与Grafana结合使用可以获得与EFK解决方案相同的集群日志聚合可视化能力。
我将使用ArgoCD来部署Grafana Loki到集群中请参考 argo-cd - sample (azure.com)
例如下面是包含了 Loki helm chart的ArgocCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: lokinamespace: argocd
spec:syncPolicy:syncOptions:- ServerSideApplytrueproject: defaultsource:chart: lokirepoURL: https://grafana.github.io/helm-chartstargetRevision: 5.9.2helm:releaseName: lokivalues: |loki:auth_enabled: falsecommonConfig:replication_factor: 1storage:type: filesystemsingleBinary:replicas: 1destination:server: https://kubernetes.default.svcnamespace: loki
添加Repositories和certificates
现在我们需要将Helm Chart仓库和Apps Git仓库以及它们的访问凭证添加到ArgoCD当中。
我所用到的是公开的Helm Chart仓库和Git仓库假如你使用的是私有仓库你需要为它指定连接所必须的凭证。对于Azure Git来说只需要一个PAT(personal access token) 创建Grafana Loki App
我们用上面创建好的Git Repo地址创建一个名为grafana-loki的App.
该Application包含了三个ApplicationPromtail, Loki, Grafana。
此时这三个App的状态是Missing意味着在集群中不存在如果是集群版本与Git版本不一致状态应该是OutSync集群服务与Git仓库一致则是Synced。 Application状态图例 Grafana Loki 让ArgoCD管理自己
最后我要介绍一下如何让ArgoCD管理它自己。我们前面使用Helm安装了ArgoCD因此当前集群中ArgoCD服务是由Helm来管理的这意味着集群服务现在有着两种不同的管理模式。
1. 我们需要在Git仓库中创建一个Application表示当前ArgoCD服务
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: argo-cdnamespace: argocdfinalizers:- resources-finalizer.argocd.argoproj.io
spec:destination:server: https://kubernetes.default.svcnamespace: argocdproject: defaultsource:chart: argo-cdrepoURL: https://argoproj.github.io/argo-helmtargetRevision: 5.43.3helm:values: |server:extraArgs:- --application-namespaces*- --insecuresyncPolicy:automated:prune: trueselfHeal: true
2. 如上使用上面的Application yaml在ArgoCD中为它自己创建一个App。
3. 等待app状态自己变为Synced我们可以看到ArgoCD相关的pod将被重新创建出来之后ArgoCD将管理它自己的状态。 4. 移除ArgoCD的Helm标记之后我们将无法再通过Helm管理集群中的ArgoCD服务而是由ArgoCD自己来管理自己。
kubectl delete secret -l ownerhelm,nameargo-cd -n argocd
总结
当然能够实现GitOps的技术还有很多GitOps的价值也不仅仅是自动化可溯源。
例如我们还可以使用ArgoCD的ApplicationSet为不同环境下的app定制不同的参数我们也可以利用Git仓库的分支和pr策略在CI阶段进行smoke test或者其它更有价值的Actions。
总之我们应尽可能采取科学的优雅的技术来不断优化软件工程。