美文网首页
基于 Argocd + Git 仓库 + Docker 镜像仓

基于 Argocd + Git 仓库 + Docker 镜像仓

作者: awker | 来源:发表于2021-10-19 23:34 被阅读0次

    整体发布流程如图所示

    • 用户提交 应用发布文件(k8s manifest yaml / helm / kustomize 等)到 git 仓库(gitlab/github 等)
    • argocd 监听 git 仓库的文件变化,根据配置手动或者自动把应用发布文件同步变更到 k8s 集群中


    1、部署 argocd(参考:https://argo-cd.readthedocs.io/en/stable/#getting-started

    // 示例环境使用的是阿里云 Kubernetes 服务
    # kubectl create ns argocd
    namespace/argocd created
    # wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    // 因为 argocd 实现了 CRD + Operator,所以安装非常简单
    // 安装 argocd
    # kubectl -n argocd apply -f install.yaml
    
    // 安装好的 argocd
    # kubectl -n argocd get svc
    NAME                    TYPE           CLUSTER-IP        EXTERNAL-IP   PORT(S)                      AGE
    argocd-dex-server       ClusterIP      192.168.218.247   <none>        5556/TCP,5557/TCP,5558/TCP   30s
    argocd-metrics          ClusterIP      192.168.116.46    <none>        8082/TCP                     30s
    argocd-redis            ClusterIP      192.168.235.78    <none>        6379/TCP                     30s
    argocd-repo-server      ClusterIP      192.168.8.78      <none>        8081/TCP,8084/TCP            30s
    argocd-server           ClusterIP      192.168.173.245   <none>        80/TCP,443/TCP               30s
    argocd-server-metrics   ClusterIP      192.168.104.198   <none>        8083/TCP                     30s
    
    # kubectl -n argocd get pod
    NAME                                 READY   STATUS    RESTARTS   AGE
    argocd-application-controller-0      1/1     Running   0          30m
    argocd-dex-server-56dc8fc7df-8sjwg   1/1     Running   0          30m
    argocd-redis-9567956cd-d2txr         1/1     Running   0          30m
    argocd-repo-server-747c48457-txt45   1/1     Running   0          30m
    argocd-server-595b6f797d-srplm       1/1     Running   0          30m
    
    // 使用的是阿里云 K8S 服务,所以这里使用 LoadBalancer 类型的 Service 暴露 argocd web 访问地址入口
    // 或者使用 Ingress 也可以
    # vim argocd-server-slb.yaml
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        # 指明 SLB 实例地址类型为私网类型
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
        # 修改为您的私网 SLB 实例 ID
        service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-t4n74x06yqfukhydgtx4d
        # 是否自动创建 SLB 端口监听(会覆写已有端口监听),也可手动创建端口监听
        service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
      labels:
        app.kubernetes.io/component: server
        app.kubernetes.io/name: argocd-server
        app.kubernetes.io/part-of: argocd
      name: argocd-server-slb
      namespace: argocd
    spec:
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 8080
      - name: https
        port: 443
        protocol: TCP
        targetPort: 8080
      selector:
        app.kubernetes.io/name: argocd-server
      type: LoadBalancer
    
    
    # kubectl -n argocd apply -f argocd-server-slb.yaml
    
    # kubectl -n argocd get svc argocd-server-slb
    NAME                TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    argocd-server-slb   LoadBalancer   192.168.124.43   10.1.2.127    80:30102/TCP,443:31174/TCP   8s
    
    
    // 查看 argocd 默认密码(argocd 1.9 以后的版本,参考:https://argoproj.github.io/argo-cd/faq/#i-forgot-the-admin-password-how-do-i-reset-it)
    # kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
    pVLydNUWOOwiSxJm
    // 更改 admin 密码
    // 先到 https://www.browserling.com/tools/bcrypt 生成 bcrypt 字符串,比如 123456 就是 $2a$10$O8NqwiyZY0Yl8LyteZyJf.4XYBIFBlUHT0kmFR9jrs1a1HwDgyAFK
    // 替换为下面的 admin.password 的值
    kubectl -n argocd patch secret argocd-secret \
      -p '{"stringData": {
        "admin.password": "$2a$10$O8NqwiyZY0Yl8LyteZyJf.4XYBIFBlUHT0kmFR9jrs1a1HwDgyAFK",
        "admin.passwordMtime": "'$(date +%FT%T%Z)'"
      }}'
    

    访问 argocd web 页面,输入账号 admin 和 密码 123456 就可以登录了

    2、项目配置(这里使用 k8s manifest yaml 演示)

    2.1 创建 py-web git 项目,编写 py-web 应用的 deploy 和 svc 文件,并推送到 git 仓库

    # tree py-web
    py-web
    ├── deploy.yaml
    └── svc.yaml
    
    0 directories, 2 files
    
    # cat py-web/deploy.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: py-web
      labels:
        app: py-web
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: py-web
      template:
        metadata:
          labels:
            app: py-web
        spec:
          containers:
          - name: py-web
            image: awker/py-web:v1.0.0
            ports:
            - containerPort: 80
    
    # cat py-web/svc.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: py-web
    spec:
      type: NodePort
      selector:
        app: py-web
      ports:
        - port: 80
          targetPort: 80
          nodePort: 30080
    
    
    https://github.com/py-k8s/py-web

    2.2 argocd 配置连通 git 代码仓库



    2.3 argocd 配置连通 k8s 集群(要连通其他 k8s 集群,参考:https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_cluster/

    2.4 argocd 新建一个 web 项目


    2.5 argocd 新建一个 py-web 应用




    3、发布操作

    3.1 argocd 发布 py-web 应用到 k8s 集群



    点击 Sync 就可以发布到 k8s 集群了




    3.2 发布成功后的状态

    3.3 点击 deploy 或者 svc 还可以看到各种详细的信息



    4、其他

    • 如果项目有 configmap、ingress 等其他资源也是差不多的发布流程

    • 容器镜像要提前通过 CI 流程打包到镜像仓库,发布时更改对应项目 git 仓库里 deployment 的 image 版本即可

    参考:

    1. https://argo-cd.readthedocs.io/en/stable/#getting-started

    相关文章

      网友评论

          本文标题:基于 Argocd + Git 仓库 + Docker 镜像仓

          本文链接:https://www.haomeiwen.com/subject/ijxzoltx.html