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

【GitOps】Argo CD部署应用程序

Argo CD部署应用程序

文章目录

  • Argo CD部署应用程序
    • 一、添加集群
      • 1.1、登录集群
      • 1.2、查看上下文
      • 1.3、列出账户
      • 1.4、添加集群
    • 二、前往UI页面操作
    • 三、通过 UI 同步应用
    • 四、CLI自定义Application

一、添加集群

  • 可以使用命令来添加集群(本机需要添加hosts解析)

1.1、登录集群

# 登录 Argo CD
[root@master ~]# argocd login grpc.argocd.devops-engineer.com.cn
WARNING: server certificate had error: tls: failed to verify certificate: x509: certificate is valid for ingress.local, not argocd.devops-engineer.com.cn. Proceed insecurely (y/n)? y
WARN[0002] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web. 
Username: admin
Password: 
'admin:login' logged in successfully
Context 'argocd.devops-engineer.com.cn' updated

1.2、查看上下文

# 查看 Argo CD 上下文
[root@master ~]# argocd context
CURRENT  NAME                           SERVER
*        grpc.argocd.devops-engineer.com.cn  grpc.argocd.devops-engineer.com.cn

1.3、列出账户

[root@master ~]# argocd account list
NAME   ENABLED  CAPABILITIES
admin  true     login

1.4、添加集群

# 列出默认集群
# 默认集群是有点问题的
[root@master ~]# argocd cluster list
SERVER                          NAME        VERSION  STATUS   MESSAGE                                                  PROJECT
https://kubernetes.default.svc  in-cluster           Unknown  Cluster has no applications and is not being monitored.
# 查看 k8s 集群使用账户
[root@master ~]# kubectl config get-contexts -o name
kubernetes-admin@kubernetes
# 添加集群
[root@master ~]# argocd cluster add kubernetes-admin@kubernetes
WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `kubernetes-admin@kubernetes` with full cluster level privileges. Do you want to continue [y/N]? y
INFO[0028] ServiceAccount "argocd-manager" created in namespace "kube-system" 
INFO[0028] ClusterRole "argocd-manager-role" created    
INFO[0028] ClusterRoleBinding "argocd-manager-role-binding" created 
INFO[0033] Created bearer token secret for ServiceAccount "argocd-manager" 
Cluster 'https://192.168.93.145:6443' added

二、前往UI页面操作

  • 登录后,点击 + New App 按钮,如下所示:
    在这里插入图片描述

  • 为您的应用程序指定名称 ,使用项目 ,并将同步策略保留为 :guestbook``default``Manual

  • guestbook:应用程序名称

  • default:项目名称

  • Manual:同步策略

  • 勾选AUTO-CREATE-NAMESPACE:如果要创建的目标集群中没有此名称空间,将会自动创建
    在这里插入图片描述

  • 将 https://github.com/wzhkgc/argocd-demo.git 仓库 url 设置为 github 仓库 url ,将 revision 保留为HEAD ,并将路径设置为 :guestbook

  • guestbook:指的是Kubernetes资源清单路径,在此目录下
    在这里插入图片描述

  • 对于Destionation(目标),也就是要把应用程序部署到哪个集群中,可以添加https://192.168.93.145:6443,或者默认集群https://kubernetes.default.svc

  • Namespace:要把应用部署的名称空间(如果在上面的部署中勾选了AUTO-CREATE-NAMESPACE则不需要提前手动创建,CD流程会自动帮助我们创建),最后点击CREATE
    在这里插入图片描述

在这里插入图片描述

  • 通过 CLI 查看项目的状态
  • 此时还是为同步状态
[root@master ~]# argocd app get guestbook
Name:               argocd/guestbook
Project:            default
Server:             https://192.168.93.145:6443
Namespace:          argocd-demo
URL:                https://grpc.argocd.devops-engineer.com.cn/applications/guestbook
Repo:               https://github.com/wzhkgc/argocd-demo.git
Target:             HEAD
Path:               guestbook
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        OutOfSync from HEAD (c6f7e7a)
Health Status:      MissingGROUP  KIND        NAMESPACE    NAME          STATUS     HEALTH   HOOK  MESSAGEService     argocd-demo  guestbook-ui  OutOfSync  Missing        
apps   Deployment  argocd-demo  guestbook-ui  OutOfSync  Missing

三、通过 UI 同步应用

  • 在 Applications 页面上,单击 guestbook 应用程序的 Sync 按钮
    在这里插入图片描述
    在这里插入图片描述

  • 此时可以去查看名称空间知否被自动创建和Pod是否运行

[root@master ~]# kubectl get pod -n argocd-demo 
NAME                            READY   STATUS    RESTARTS   AGE
guestbook-ui-56c646849b-m6jgb   1/1     Running   0          87s
  • 当我们在代码仓库进行了更改,比如变更Pod副本数量
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# 通过之后即可看到控制器的Pod数量为期望数量
[root@master ~]# kubectl get pod -n argocd-demo 
NAME                            READY   STATUS    RESTARTS   AGE
guestbook-ui-56c646849b-m6jgb   1/1     Running   0          10m
guestbook-ui-56c646849b-zbwn4   1/1     Running   0          65s
# 看到副本变更了,也就是代码库中的期望值了,其实这个操作在 CLI 也支持,大家可以去发掘一下使方法,那么通过 Web UI 创建应用我们讲过了,那么还有一种就是通过 K8S 的 CRD 来创建应用
[root@master ~]# kubectl get crd | grep argoproj
applications.argoproj.io                              2024-12-21T00:33:00Z
applicationsets.argoproj.io                           2024-12-21T00:33:00Z
appprojects.argoproj.io                               2024-12-21T00:33:00Z
# 可以看到,这里有三个 CRD 资源对象,我们可以通过创建 CRD 同步创建应用,其实是和Web UI 一样的,Web UI 创建之后,CRD 也会同步创建一个对象
[root@master ~]# kubectl get applications -n argocd
NAME        SYNC STATUS   HEALTH STATUS
guestbook   Synced        Healthy
# 可以看到这里的确是有一个和 Web UI 一样的应用,我们可以通过导出它的 YAML 来看看都是怎么样定义的
[root@master ~]# kubectl get application -n argocd guestbook -o yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:creationTimestamp: "2024-12-21T02:38:22Z"generation: 28name: guestbooknamespace: argocdresourceVersion: "20129"uid: 69dd8ac2-72e2-418f-bae8-6a33dea32975
spec:destination:namespace: argocd-demoserver: https://192.168.93.145:6443project: defaultsource:path: guestbookrepoURL: https://github.com/wzhkgc/argocd-demo.gittargetRevision: HEAD

四、CLI自定义Application

  • 因为前面讲过,Argo CD 主要就是负责 CD 方面的操作,所以主要就是将上面的流水线中的Deploy这一步放到 Argo CD中去做,那么其实生成中都知道一个操作,就是我们的 CI/CD 的部署文件其实一般不会和代码存放在一起的,会把代码和部署清单放到两个仓库进行存储。
# 定义 Pod 资源
[root@master argocd-deploy]# cat pod.yaml 
apiVersion: "v1"
kind: Pod
metadata:name: nginxlabels:app: nginxspec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentports:- containerPort: 80
# 定义 service 资源
[root@master argocd-deploy]# cat service.yaml 
apiVersion: "v1"
kind: Service
metadata:name: test
spec:selector:  # 标签选择器app: nginx   # 指定后端服务Pod,把流量路由到带有app=nginx的后端Pod上type: ClusterIP  # 使用了Ingress,此处的svc的类型写为ClusterIP是一个规范的用法ports:- port: 80  # 对外暴露80端口targetPort: 80  # 此处填写容器真实暴露出来的端口,流量将会被路由到这个端口上
# 定义 Ingress 资源
[root@master argocd-deploy]# cat service.yaml 
apiVersion: "v1"
kind: Service
metadata:name: test
spec:selector:  # 标签选择器app: nginx   # 指定后端服务Pod,把流量路由到带有app=nginx的后端Pod上type: ClusterIP  # 使用了Ingress,此处的svc的类型写为ClusterIP是一个规范的用法ports:- port: 80  # 对外暴露80端口targetPort: 80  # 此处填写容器真实暴露出来的端口,流量将会被路由到这个端口上
[root@master argocd-deploy]# cat ingress.yaml 
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:name: mini-ingresslabels:app: nginxannotations: nginx.ingress.kubernetes.io/rewrite-target: "/"  
spec:ingressClassName: nginxrules:- host: work.argocd.cn   # 访问域名,当用户访问这个域名的时候,Ingress将应用以下规则http:paths:- path: / pathType: Prefixbackend: service: name: testport:number: 80
  • 这个仓库其实就是把 cdk-web-service 中的 deploy 下的部署文件分离出来,仅此而已,然后我们去创建一个应用,这个应用就是针对这个代码仓库,我们这次使用 CRD 仓库
    在这里插入图片描述
[root@master ~]# cat cdk-web-service-app.yaml 
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: cdk-web-servicenamespace: argocd
spec:destination:namespace: defaultserver: 'https://192.168.93.145:6443'source:path: .  # 在项目根目录下寻找 K8S 资源清单repoURL: http://192.168.93.102/root/argocd-deploy.gittargetRevision: HEADproject: defaultsyncPolicy:automated:# 开启后 Git Repo 中删除资源会自动在环境中删除对应的资源prune: true# 自动痊愈,强制以 Git Repo 状态为准,手动在环境中修改不会生效selfHeal: true
# 查看 Application 状态
[root@master ~]# kubectl get application -n argocd
NAME              SYNC STATUS   HEALTH STATUS
cdk-web-service   Synced        Progressing
guestbook         Synced        Healthy
# 查看之后新创建的 Application 状态是不对劲的,
# 这是因为 Ingress 是在集群内不可访问的,那么需要修改 argocd 的 configmap
[root@master ~]# kubectl edit cm -n argocd argocd-cm
apiVersion: v1
# 添加这些信息
data:resource.customizations: |networking.k8s.io/Ingress:health.lua: |hs = {}hs.status = "Healthy"return hs
# 到这里是结尾
kind: ConfigMap
metadata:annotations:kubectl.kubernetes.io/last-applied-configuration: |{"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-cm","namespace":"argocd"}}creationTimestamp: "2024-12-21T00:15:23Z"labels:app.kubernetes.io/name: argocd-cmapp.kubernetes.io/part-of: argocdname: argocd-cmnamespace: argocdresourceVersion: "22550"uid: 558d369c-db47-4bd2-b249-6982a427ae11
# 再次查看 Application 创建
[root@master ~]# kubectl get application -n argocd
NAME              SYNC STATUS   HEALTH STATUS
cdk-web-service   Synced        Healthy
guestbook         Synced        Healthy
  • Web UI 也会自动生成相应的 Application 页面
    在这里插入图片描述
http://www.xdnf.cn/news/19778.html

相关文章:

  • 嵌入式|RTOS教学——FreeRTOS基础2:任务调度
  • 【mac】如何在 macOS 终端中高效查找文件:五种实用方法
  • 怀古感今慎独自省慎思
  • 中科米堆CASAIM自动化三维测量设备测量汽车零部件尺寸质量控制
  • 安全、计量、远程控制,多用途场景下的智慧型断路器
  • 超10公里远距离图传模块——开启无线影像传输新纪元
  • 写好 Prompt 的 12 条实践经验
  • 目标检测定位损失函数:Smooth L1 loss 、IOU loss及其变体
  • ReACT Agent概述
  • 给你的应用穿上“外衣”:React中的CSS方案对比与实践
  • 【音视频】WebRTC ICE 模块深度剖析
  • redis哨兵模式的使用
  • 中山AI搜索优化实践:技术干货解析与金拓智能案例
  • 微信小程序wx.getLocation结合腾讯地图逆解析获取位置详细教程,定位授权完整流程
  • wpf触发器
  • AutoTrack-4X教育平台:完整工程编译指南与教学实践
  • 【面试题】Transformer相比RNN的优势?
  • Android开发之fileprovider配置路径path详细说明
  • 一体化气象传感器——为气象数据的快速、精准获取提供了高效解决方案
  • 运维基础->掌握正则、sed与awk:高效文本处理技巧
  • WeCross跨链-异构链跨链-(三)WeCross安装和跨链接入
  • 无人机散热模块技术要点分析
  • 什么是 etcd?
  • 当3D高斯泼溅遇见视频孪生:城市治理的“科幻“时代来了
  • R-4B: 通过双模退火与强化学习激励多模态大语言模型的通用自主思考能力
  • 一键 i18n 国际化神库!适配 Vue、React!
  • ElasticSearch倒排索引原理
  • 02、连接服务器的几种方式
  • 人工智能机器学习入门——线性回归
  • 高光谱成像在文物考古和字画检测中的应用