V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
peefy
V2EX  ›  Kubernetes

使用 KCL 编程语言构建你的 GitOps 流程 - CD 篇

  •  
  •   peefy · 2023-07-19 21:05:08 +08:00 · 1032 次点击
    这是一个创建于 516 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介

    什么是 GitOps

    GitOps 是一种实现持续交付的现代方式。它的核心思想是拥有一个包含环境和应用程序配置的 Git 存储库。通过更改应用存储库中的文件,可以自动部署应用程序。应用 GitOps 的好处包括:

    • 提高生产力,持续交付可以加快部署时间。
    • 降低开发人员部署的障碍。通过推送代码而不是容器配置,开发人员可以在不知道其内部实现的情况下轻松部署 Kubernetes 集群和应用。
    • 追踪变更记录。使用 Git 管理配置使每一项更改都具有可跟踪性,从而增强审计跟踪。

    将 KCL 与 ArgoCD 一起使用

    将 KCL 与 ArgoCD 等 GitOps 工具一起使用具有如下好处:

    • 通过 KCL 语言的抽象能力和可编程能力可以帮助我们简化复杂的 Kubernetes 部署配置文件,降低手动编写 YAML 文件的错误率,消除多余的配置模版,提升多环境多租户的配置扩展能力,同时提高配置的可读性和可维护性。
    • KCL 允许开发人员以声明式的方式定义应用程序所需的资源,通过将 KCL 和 ArgoCD 相结合可以帮助我们更好地实现基础设施即代码( IaC ) ,提高部署效率,简化应用程序的配置管理。
    • ArgoCD 可以自动化地实现应用程序的连续部署,并提供友好的可视化界面全面。

    使用 GitOps ,开发人员和运维团队可以通过分别修改应用和配置代码来管理应用程序的部署,GitOps 工具链将自动同步对配置的更改,从而实现持续部署并确保一致性。如果出现问题,可以使用 GitOps 工具链快速回滚。

    快速开始

    1. 获取示例

    首先,我们执行 git 命令获得用例

    git clone https://github.com/kcl-lang/kcl-lang.io.git/
    cd ./kcl-lang.io/examples/gitops
    

    我们可以运行以下命令来显示配置

    cat config/main.k
    

    The output is

    import .app
    
    config = app.App {
        name = "kcl-guestbook-ui"
        containers.guestbook = {
            image = "gcr.io/heptio-images/ks-guestbook-demo:0.2"
            ports = [{containerPort = 80}]
        }
        service.ports = [{ port = 80 }]
        service.type = "LoadBalancer" 
    }
    

    在上述代码中,我们定义使用 App schema 定义了应用的配置,其中我们配置了一个镜像为 gcr.io/heptio images/ks guestbook demo:0.2 容器,并启用了 80 端口。

    2. 安装 Kubernetes 和 GitOps 工具

    配置 Kubernetes 集群和 ArgoCD 控制器

    • 安装 K3d 并创建一个集群
    k3d cluster delete mycluster && k3d cluster create mycluster
    

    注意:你可以在此方案中使用其他方式创建您自己的 Kubernetes 集群,如 kind, minikube 等。

    kubectl create namespace argocd
    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    
    • 安装 ArgoCD KCL 插件
    kubectl apply -f ./install/kcl-cmp.yaml && kubectl -n argocd patch deploy/argocd-repo-server -p "$(cat ./install/patch-argocd-repo-server.yaml)"
    
    • 通过 kubectl get 命令查看 argocd 控制器容器是否初始化完成进入运行( Running )状态。
    kubectl get pod -n argocd -l app.kubernetes.io/name=argocd-repo-server
    
    • 通过如下命令打开 ArgoCD UI
    kubectl port-forward svc/argocd-server -n argocd 8080:443
    
    • 打开浏览器 https://localhost:8080 输入用户名 "admin" 和密码登陆 ArgoCD UI ,密码可以通过如下命令得到:
    kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
    

    安装 ArgoCD 客户端工具

    argocd login localhost:8080
    

    通过如下命令创建一个 ArgoCD KCL 应用

    argocd app create guestbook \
    --repo https://github.com/kcl-lang/kcl-lang.io \
    --path examples/gitops/config \
    --dest-namespace default \
    --dest-server https://kubernetes.default.svc \
    --config-management-plugin kcl-v1.0
    

    如果创建成功,您可以看到如下输出:

    After successfully creating, you can see the following output:

    application 'guestbook' created
    

    如果您使用的是私有存储库,则在执行 create 命令之前,需要使用私钥凭据配置专用私有存储库访问权限。请参阅这里以获取更多详细信息。

    通过 ArgoCD UI ,您可以看到创建的应用程序尚未同步,您可以手动进行配置同步或设置为自动同步。

    有关同步策略的更多信息,可以请参阅这里

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3267 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:26 · PVG 20:26 · LAX 04:26 · JFK 07:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.