使用 KCL 编程语言构建你的 GitOps 流程 - CD 篇 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
peefy

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

  •  
  •   peefy 2023 年 7 月 19 日 1597 次点击
    这是一个创建于 1011 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介

    什么是 GitOps

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

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

    将 KCL 与 ArgoCD 一起使用

    KCLArgoCD等 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" } 

    在上述代码中,我们定义使用Appschema 定义了应用的配置,其中我们配置了一个镜像为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 客户端工具

    pre>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     Solana     2794 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 12:40 PVG 20:40 LAX 05:40 JFK 08:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86