小哥之哥 小哥之哥
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小哥之哥

运维扫地僧
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Kubertenes

    • 安装部署

    • 技术杂谈

    • 最佳实践

      • k8s-apollo分布式部署
      • k8s-Argocd部署
      • k8s-Argo CD实践
        • k8s-helm使用
        • k8s-Minio集群迁移
        • cert-manager自动签发Lets Encrypt
    • Prometheus

    • Docker

    • 数据库

    • 运维利器

    • 运维
    • Kubertenes
    • 最佳实践
    tchua
    2023-06-06
    目录

    k8s-Argo CD实践

    # 一、概述


    前面我们介绍了Argocd部署以及官方提供的demo进行部署验证,当然如果只是简单的测试下功能,官方的demo基本也够用了,对于企业使用,我们的架构往往都比较复杂,我一直坚持一个观点就是,没有最好的架构只有最适宜的架构。

    接下来,我会着重介绍下针对我们企业生产中,应用的部署演示。

    # 二、清单文件准备


    git仓库这里我们使用的是阿里的云效,与gitlab操作基本是一致的,也没有其他配置,只是为了存储应用的清单文件。

    # 2.1 应用deploy定义
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: dev
      name: auto-toc
      labels:
        app: auto-toc
    spec:
      revisionHistoryLimit: 10
      replicas: 1
      selector:
        matchLabels:
          app: auto-toc
      template:
        metadata:
          labels:
            team: tfgol-pos
            app: auto-toc
            version: "v1"
        spec:
          imagePullSecrets:
          - name: tfgol-credentials
          containers:
          - name: auto-toc
            image: registry.cn-hangzhou.aliyuncs.com/tfgol-dev/auto-toc:dev
            imagePullPolicy: Always
            resources:
              limits:
                memory: 1024Mi
              requests:
                memory: 512Mi
            livenessProbe:
              tcpSocket:
                port: 9201
              initialDelaySeconds: 10
              timeoutSeconds: 3
              periodSeconds: 10
              successThreshold: 1
              failureThreshold: 5
            startupProbe:
              tcpSocket:
                port: 9201
              initialDelaySeconds: 25
              timeoutSeconds: 3
              periodSeconds: 10
              successThreshold: 1
              failureThreshold: 10
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    # 2.2 提交至云效仓库

    image-20230606145958893

    img

    # 三、仓库认证


    对于企业中,我们使用的仓库大多都是需要进行认证才可以进行clone操作,因此这里需要先进行仓库认证,方便后续部署操作,生产实践中建议使用ssh协议,这样如果有多个仓库地址,不用再每一个都配置。

    # 3.1 登录后台

    image-20230606150941810

    # 3.2 参数配置

    image-20230606151248100

    # 3.3 仓库状态

    image-20230606151327343

    # 四、应用创建


    应用这里我们直接使用CLI方式,也可以通过web页面,这里演示的是通过directory方式创建应用,更多的使用方式,可以看下官方相关文档。

    # 4.1 登录
    [root@k8s-master01 ~]# argocd login argocd.tchua.com
    
    
    1
    2
    # 4.2 创建应用
    [root@k8s-master01 ~]# argocd app create auto-toc \
      --repo https://codeup.aliyun.com/6475960f71f685caf08197cd/shanghai_moji/tfgol-app-deploy.git \
      --path auto-toc \
      --dest-server https://kubernetes.default.svc \
      --dest-namespace dev
    
    1
    2
    3
    4
    5
    # 4.3 应用部署
    [root@k8s-master01 ~]# argocd app sync auto-toc
    TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE
    2023-06-06T15:17:45+08:00   apps  Deployment         dev              auto-toc  OutOfSync  Missing              
    2023-06-06T15:17:45+08:00   apps  Deployment         dev              auto-toc  OutOfSync  Missing              deployment.apps/auto-toc created
    2023-06-06T15:17:45+08:00   apps  Deployment         dev              auto-toc    Synced  Progressing              deployment.apps/auto-toc created
    
    Name:               argocd/auto-toc
    Project:            default
    Server:             https://kubernetes.default.svc
    Namespace:          dev
    URL:                https://argocd.tchua.com/applications/auto-toc
    Repo:               https://codeup.aliyun.com/6475960f71f685caf08197cd/shanghai_moji/tfgol-app-deploy.git
    Target:             
    Path:               auto-toc
    SyncWindow:         Sync Allowed
    Sync Policy:        <none>
    Sync Status:        Synced to  (2a9b19a)
    Health Status:      Progressing
    
    Operation:          Sync
    Sync Revision:      2a9b19ad96c2036026fc373a8b5da55b77fa6ccd
    Phase:              Succeeded
    Start:              2023-06-06 15:17:44 +0800 CST
    Finished:           2023-06-06 15:17:45 +0800 CST
    Duration:           1s
    Message:            successfully synced (all tasks run)
    
    GROUP  KIND        NAMESPACE  NAME      STATUS  HEALTH       HOOK  MESSAGE
    apps   Deployment  dev        auto-toc  Synced  Progressing        deployment.apps/auto-toc created
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # 4.4 查看应用状态

    image-20230606151946822

    # 4.5 Web UI查看应用

    image-20230606152340867

    # 4.6 更新应用

    更新应用,只需要把修改后的配置清单,提交至git仓库,然后触发同步,即可完成应用的更新,这里把应用副本数由1个修改为2个

    • 修改yaml文件副本数
    replicas: 2
    
    1
    • 提交修改
    git add .
    git commit -m "toc 副本修改"
    git push -u origin master
    
    1
    2
    3
    • 登录Web UI查看应用状态

    我们知道Argo CD会定时(3min)对比git仓库与本地的清单文件,如果由改变应用状态会显示OutOfSync,如果想要立即生效,则需要点击应用下面的REFRESH按钮进行刷新。

    image-20230606153501080

    • 手动触发更新
    [root@k8s-master01 ~]# argocd app sync auto-toc
    
    1
    • 查看资源

    可以看到已经在部署

    image-20230606153633397

    注意

    通过上面操作我们可以看到,每次创建应用后,都需要我们手动触发应用部署才可以,这是因为我们配置的更新策略为手动,如果想要自动触发只应用部署,则可以在创建应用时,添加--sync-policy参数,指定对应的策略,例如:

    [root@k8s-master01 ~]# argocd app create guestbook \
      --repo https://github.com/argoproj/argocd-example-apps.git \
      --path guestbook \
      --dest-server https://kubernetes.default.svc \
      --dest-namespace default \
      --sync-policy automated
    
    1
    2
    3
    4
    5
    6

    另外,如果我们配置的策略为automated,则需要关注下,下面两个参数:

    • PRUNE RESOURCES(--auto-prune):指的是在集群上某个资源在 Git仓库中 找不到对应的配置时,则自动删除集群上的该资源
    • SELF HEAL(--self-heal): 自愈,指当集群上资源的实时状态与 Git仓库定义的配置不匹配时,自动将实际状态与 GitRepo 的期望状态同步。例如,GitRepo 中定义 pod 的数量为2,你在集群上改为了 1 个 pod,如果你不勾选 self heal。则 ArgoCD 则不会在同步(对一次提交只同步一次),这时 pod 的数量就一直为 1。但你如果勾选了 self heal,ArgoCD 就会轮询去同步,将你的 pod 改为你 GitRepo 里的期望数量

    如果应用启用了自动同步那么该Application就不 支持 RollBack操作

    编辑 (opens new window)
    #k8s
    上次更新: 2024/01/02, 18:20:30
    k8s-Argocd部署
    k8s-helm使用

    ← k8s-Argocd部署 k8s-helm使用→

    最近更新
    01
    cert-manager自动签发Lets Encrypt
    09-05
    02
    Docker构建多架构镜像
    08-02
    03
    Prometheus数据迁移至VMstorage
    08-01
    更多文章>
    Theme by Vdoing | Copyright © 2023-2024 |豫ICP备2021026650号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式