网站首页 > 开源技术 正文
GitOps是什么?
简而言之,GitOps 是使用 Git 拉取请求来管理IaaS和应用程序配置的实践。GitOps 中的 Git 存储库被视为唯一的真理来源,它包含系统的整体状态,以便使系统状态的更改是可跟踪和可审核的。为了实现GitOps,需要通过代码实现对系统的定义和配置,这正是所谓的IaC(Infrastructure as Code)。那些定义了期望的系统或应用状态的配置文件被放在Git中,这样通过Git的版本管理功能就很容易对系统或应用的配置进行回滚。除此以外,还可将一个Git作为多个云环境的的统一配置库,这样能方便实现多云环境下的联邦集群、多云部署等统一管理功能。
- 整个系统采用声明式描述
- 在Git中可对系统状态版本化
- 批准的更改可以自动应用于系统
- 软件代理可确保正确性并警告差异
为了实现将Git中的系统配置生效,就要运行一个代理,这就是GitOps服务。它可通过webhook接收或主动获取Git的配置。当接收到系统配置发生变化事件后,GitOps服务可获取最新的配置,然后根据策略在相关的基础架构(例如OpenShift)上加以实施新的配置。
ArgoCD
什么是ArgoCD
ArgoCD是一个用于持续交付的Kubernetes配置管理工具。Argo CD 遵循 GitOps 模式,即使用 Git 存储库作为定义所需应用程序状态的源头。Argo CD 可在指定的目标环境中自动部署所需的应用程序状态。应用程序部署可以跟踪对分支、标记的更新,或将更新固定到 Git 提交中特定版本的清单。。
在一个ArgoCD运行环境中包括以下组件:
1. API Server:API 服务器是一个 gRPC/REST 服务器,它公开 Web UI、CLI 和 CI/CD 系统使用的 API。
2. Repository Server:存储库服务器是一个内部服务,它维护包含应用程序清单的 Git 存储库的本地缓存。
3. Application Controller:应用程序控制器是 Kubernetes 控制器,它持续监视正在运行的应用程序,并将当前活动状态与所需目标状态进行比较(在Repo中的指定状态)。当它检测出OutOfSync应用程序状态后就会选择采取纠正措施。
安装ArgoCD客户端
$ sudo curl -L https://github.com/argoproj/argo-cd/releases/download/v1.4.2/argocd-linux-amd64 -o /usr/local/bin/argocd
$ sudo chmod +x /usr/local/bin/argocd
安装ArgoCD服务端
1. 创建argocd项目。
$ oc new-project argocd
2. 部署ArgoCD资源。
$ oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.2/manifests/install.yaml
3. 查看部署的pod运行情况。
$ oc get pod
NAME READY STATUS RESTARTS AGE
argocd-application-controller-ddb8c7bbc-sgh9r 1/1 Running 0 7m16s
argocd-dex-server-8577c4574-p9bfn 1/1 Running 0 7m16s
argocd-redis-8c568b5db-wzgnp 1/1 Running 0 7m16s
argocd-repo-server-7b7dc6b757-msfkl 1/1 Running 0 7m16s
argocd-server-746c59b779-lqtmh 1/1 Running 0 7m16s
4. 修改ArgoCD缺省配置,使其支持通过“insecure”方式访问。
$ PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
$ oc -n argocd patch deployment argocd-server -p $PATCH
deployment.extensions/argocd-server patched
5. 创建访问ArgoCD的Route。
$ oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect
route.route.openshift.io/argocd-server created
$ ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')
客户端登录
$ ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')
$ argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
'admin' logged in successfully
Context 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated
如果此时报“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”错误,参见下面“重置管理员密码”的说明。
修改管理员密码
将admin用户的密码修改为“admin”。
$ argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password admin
Password updated
Context 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated
重置管理员密码
当安装ArgoCD后第一次登录的时候出现“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”错误,可以执行以下命令将admin用户的密码重置为“admin”。
$ oc -n argocd patch secret argocd-secret \
-p '{"stringData": {
"admin.password": "$2a$10$You1ZS2c11ew2qDZlWFlxOBXdl5P1L9R2NoR0Ib/.CMovnSN8dqZO",
"admin.passwordMtime": "'$(date +%FT%T%Z)'"
}}'
登录Web控制台
1. 获得ArgoCD的Route访问地址。
$ oc get route argocd-server -o jsonpath='{.spec.host}'
argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com
2. 用浏览器访问Route地址,然后用admin/admin登录即可。
猜你喜欢
- 2024-10-22 Blazor流程编排的艺术:深入Z.Blazor.Diagrams库的使用与实践
- 2024-10-22 个性化地图制作软件OpenOrienteering Mapper
- 2024-10-22 使用 .NET 的 Dev Proxy 构建和测试弹性应用
- 2024-10-22 开发一个现代化的.NetCore控制台程序,包含依赖注入/配置/日志等要素
- 2024-10-22 .NET 配置体系结构(配置.net环境)
- 2024-10-22 西门子高级应用,将WinCC集成在STEP 7中,你也可以学会!
- 2024-10-22 OpenLayers helloworld 以及加载天地图图层示例
- 2024-10-22 Python利用WKT创建shapefile、shapefile输出WKT
- 2024-10-22 OpenFaaS实战之四:模板(template)
- 2024-10-22 [STM32]资源汇总(stm32f030f4p6资源)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)