十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Argo CD 本地环境搭建实战:基于 Kind 快速部署与开发调试

Argo CD 本地环境搭建实战:基于 Kind 快速部署与开发调试 Argo CD 本地环境搭建实战基于 Kind 快速部署与开发调试【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd本指南以官方文档 docs/try_argo_cd_locally.md 为主体脉络完整演示如何在本地通过 Kind 创建 Kubernetes 集群、安装 Argo CD、暴露 API Server 并登录 UI 的完整流程同时结合仓库内的安装清单、Makefile、Procfile 等源码级材料补充 server-side apply 原理、各核心组件职责、本地开发模式与常见排错手段。读完本文你将获得一套可直接复制执行、可在任何装有 Docker/Kubectl 的机器上复现的 Argo CD 本地实践方案。前置条件与基础概念Argo CD 是 Kubernetes 原生的声明式持续交付工具在使用它之前建议先建立对底层技术的认知。官方建议先阅读 docs/understand_the_basics.md 了解 Docker、Kubernetes 以及 Kustomize/Helm 等模板化工具这些决定了后续如何组织你的应用清单。本指南假设你已具备本机安装 DockerKind 依赖它运行集群节点容器已安装kubectl并拥有可用的 kubeconfig 配置默认位置~/.kube/config了解基本的 Git 与 YAML 清单知识。整个本地实践分为两条主线一条面向普通用户——用 Kind 搭建集群并按官方 install.yaml 安装 Argo CD直接体验 UI 与 CLI一条面向开发者——用make start/goreman在集群外运行各组件进行源码调试详见 docs/developer-guide/running-locally.md。本文以第一条为主线并在最后补充第二条的要点。第一步安装 KindKindKubernetes in Docker用于在本地用 Docker 容器模拟多节点集群是官方推荐的本地方案之一。请按 Kind 官方 quick-start 说明完成安装。安装完成后验证版本kind versionKind 的核心价值在于创建与销毁成本极低、支持多节点拓扑、与 CI 环境契合非常适合用来承载 Argo CD 这类以 CRD 与控制器为核心的组件。第二步创建 Kind 集群安装完成后创建一个命名为argocd-cluster的本地集群kind create cluster --name argocd-cluster执行成功后Kind 会生成对应的 kubeconfig 上下文上下文名为kind-argocd-cluster一个单节点默认配置的 Kubernetes 集群随即就绪。如需自定义节点数量或端口映射可参考 Kind 的配置文件方式创建。第三步让 kubectl 指向 Kind 集群创建集群后确认kubectl已正确指向新集群kubectl cluster-info --context kind-argocd-cluster该命令会输出集群的 Kubernetes 控制面地址与 CoreDNS 地址用于验证上下文切换是否成功。之后所有kubectl命令默认都会作用于该 Kind 集群。第四步在集群上安装 Argo CD在集群中创建argocd命名空间并应用官方安装清单kubectl create namespace argocd kubectl apply -n argocd --server-side --force-conflicts -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml注意--server-side --force-conflicts两个标志是必需的原因在于部分 Argo CD CRD如 ApplicationSet的体积超过了 client-sidekubectl apply的 262KB 注解大小限制。更详细的说明见 docs/getting_started.md。从源码层面理解这两个标志依据 docs/getting_started.md 的说明--server-side将清单合并逻辑交由 API Server 执行不再存储last-applied-configuration注解从而绕开注解体积限制--force-conflicts允许本次 apply 接管此前由其他工具如 Helm 或之前的 apply管理的字段。这对全新安装是安全的也是升级所必需的。需要留意清单中已定义的字段如affinity、env、probes若被你自定义过会被覆盖而清单未涉及的字段如resources资源配额、tolerations会被保留。仓库中对应的安装清单位于 manifests/install.yaml该文件头部注释标明 This is an auto-generated file. DO NOT EDIT由make manifests从 manifests/base 目录下的模板生成。其内容以applications.argoproj.io等 CRD 开头随后依次是各组件 Deployment、RBAC、ConfigMap、Service 与 Secret。仓库还提供了多种变体清单manifests/core-install.yaml仅核心组件适合不需要 UI、SSO 与多集群功能的场景manifests/namespace-install.yaml限制在单个命名空间的安装manifests/ha 与*-with-hydrator.yaml高可用及启用 Hydrator 的变体。警告安装清单中包含引用argocd命名空间的ClusterRoleBinding资源若安装到其他命名空间务必同步修改其中的命名空间引用。提示默认安装中 Redis 使用密码认证密码存放在argocd命名空间下名为argocd-redis的 Secret 中key 为auth。对应清单见 manifests/base/redis/argocd-redis-deployment.yaml其 initContainer 会调用argocd admin redis-initial-password生成初始密码主容器则通过--requirepass $(REDIS_PASSWORD)从 Secret 读取。从源码结构看本地开发脚本 hack/start-redis-with-password.sh 也复用了同样的 Secret 读取逻辑kubectl get secret argocd-redis ... keyauth保证本地 Redis 与集群内 Redis 口令一致。第五步暴露 Argo CD API Server默认情况下 Argo CD 的 API Server 不会暴露到集群之外需要在本地访问 UI可以使用 kubectl 的端口转发功能kubectl port-forward svc/argocd-server -n argocd 8080:443该命令将本机 8080 端口转发到集群内argocd-server服务的 443 端口HTTPS默认使用自签名证书。转发成功后浏览器访问 http://localhost:8080 即可打开 Argo CD UI。除端口转发外docs/getting_started.md 还列出了另外两种暴露方式可根据环境选择LoadBalancerkubectl patch svc argocd-server -n argocd -p {spec: {type: LoadBalancer}}云环境会分配外部 IPIngress按 docs/operator-manual/ingress.md 配置。第六步登录 Argo CD UI打开浏览器访问 http://localhost:8080 后需要获取默认admin账号的初始密码。密码由安装过程自动生成并以明文形式存放在argocd-initial-admin-secret中kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath{.data.password} | base64 -d使用用户名admin与上述密码即可登录。登录后建议立即修改默认密码并删除初始密码 Secretargocd account update-password kubectl delete secret argocd-initial-admin-secret -n argocd说明该 Secret 的唯一用途就是存放初始密码明文删除是安全的若 Argo CD 需要重新生成 admin 密码它会按需重建此 Secret依据 docs/getting_started.md。也可使用argocd admin initial-password -n argocd一条命令直接读取初始密码方便 CLI 场景。第七步登录 CLI 并创建第一个应用下载或安装 Argo CD CLIMac/Linux/WSL 可通过brew install argocd然后登录argocd login localhost:8080如果端口转发未开启或 CLI 无法直连 API Server可通过环境变量让 CLI 自动使用端口转发export ARGOCD_OPTS--port-forward-namespace argocd登录后可将当前上下文默认命名空间设为argocd然后创建示例应用guestbookkubectl config set-context --current --namespaceargocd argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default查看状态并同步部署argocd app get guestbook argocd app sync guestbook首次创建的应用会处于OutOfSync状态执行argocd app sync后Argo CD 会从 Git 仓库拉取清单并kubectl apply到目标集群此处为集群内部地址https://kubernetes.default.svc随后在 UI 中即可看到应用的资源树、日志、事件与健康状态。详细的分步操作含 UI 创建应用的方式见 docs/getting_started.md 的步骤 57。开发者视角在 Kind 集群上本地运行 Argo CD 源码如果你要基于当前仓库做二次开发官方推荐先在集群外运行 Argo CD 各组件见 docs/developer-guide/running-locally.md避免每次改动都要重新构建并推送 Docker 镜像。整体思路是先把 Argo CD 的资源对象部署进集群CRD、ConfigMap、RBAC 等再把所有实例缩容到 0只保留配置kubectl apply -n argocd --server-side --force-conflicts -f manifests/install.yaml kubectl -n argocd scale statefulset/argocd-application-controller --replicas 0 kubectl -n argocd scale deployment/argocd-dex-server --replicas 0 kubectl -n argocd scale deployment/argocd-repo-server --replicas 0 kubectl -n argocd scale deployment/argocd-server --replicas 0 kubectl -n argocd scale deployment/argocd-redis --replicas 0 kubectl -n argocd scale deployment/argocd-applicationset-controller --replicas 0 kubectl -n argocd scale deployment/argocd-notifications-controller --replicas 0同时把当前上下文默认命名空间切到argocdkubectl config set-context --current --namespaceargocd因为后续启动的本地服务假定 Argo CD 安装在当前命名空间。在宿主机启动全部本地服务。仓库根目录的 Procfile 定义了完整的进程组从内容可以看到各组件对应的二进制与关键参数controller、api-server、dex、redis、repo-server、cmp-server、commit-server、ui、git-server、helm-registry、oci-registry、applicationset-controller、notification等其中 redis 由 hack/start-redis-with-password.sh 启动。使用虚拟化工具链Docker 内构建时一条命令即可cd argo-cd make start使用 Podman 替代 DockerDOCKERpodman make start。使用本地工具链时有三种方式均需ARGOCD_GPG_ENABLEDfalsemake start-local ARGOCD_GPG_ENABLEDfalse make run ARGOCD_GPG_ENABLEDfalse ARGOCD_GPG_ENABLEDfalse goreman start从 Makefile 源码看start目标实际是在 test-server 容器内调用start-localstart-local会先执行mod-vendor-local dep-ui-local cli-local完成依赖与 CLI 构建再通过goreman -f $(ARGOCD_PROCFILE) start拉起进程run则调用 hack/goreman-start.sh。启动后暴露的端口为Argo CD API Server8080Argo CD UIwebpack dev server4000Helm Registry5000UI 访问 http://localhost:4000CLI 对接 API 则使用--insecure --plaintext参数访问 http://localhost:8080。为避免每条命令都带参数可设置环境变量export ARGOCD_SERVER127.0.0.1:8080 export ARGOCD_OPTS--plaintext --insecure本地登录 CLI。本地模式同样从 Secret 取初始密码后登录kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath{.data.password} | base64 -d; echo dist/argocd login localhost:8080热更新与回归修改 UI.tsx/.scss会自动热更新到 4000 端口修改 Go 后端则需要重启对应服务例如goreman run restart repo-server服务名见 Procfile修改 CLI 代码需重启make start/make start-local会话。测试结束后可把集群内各 Deployment/StatefulSet 重新 scale 回 1或按 docs/developer-guide/running-locally.md 的说明构建自定义镜像设置IMAGE_REGISTRY、IMAGE_NAMESPACE、IMAGE_TAG后执行make image再用make manifests重新生成包含自定义镜像引用的清单。常见问题与排错速查UI 首次加载慢本地模式4000 端口首次页面加载需要等待 webpack 打包可能耗时数秒到数分钟属正常现象。kubectl apply报注解超限务必使用--server-side --force-conflicts这与 CRD 体积限制有关原因见上文。端口转发不生效确认argocd-serverService 在argocd命名空间内已就绪kubectl get svc -n argocd。CLI 无法连接 API检查是否设置了ARGOCD_OPTS--port-forward-namespace argocd或正确使用--insecure --plaintext。本地进程未全部启动goreman run status中未标记*的进程说明启动失败默认日志级别为 DEBUG日志过于嘈杂时可编辑仓库根目录 Procfile 中各命令的日志级别参数。架构差异示例应用guestbook可能仅适配 AMD64ARM 环境下需自行验证镜像兼容性构建镜像时 Apple 芯片需设置TARGET_ARCHlinux/arm64。总结本文从零开始完成了Kind 建集群 → server-side 安装 Argo CD → 端口转发暴露 UI → 获取初始密码登录 → CLI 创建并同步应用的完整闭环并深入解释了--server-side --force-conflicts的底层原因CRD 注解体积限制。对开发者而言docs/developer-guide/running-locally.md 提供了基于 Procfile 与 Makefile 的集群外本地调试方案可大幅缩短迭代周期。接下来即可进入 docs/getting_started.md 的后续步骤进一步体验 Argo CD 的 Sync 策略、健康评估与多集群管理等核心能力。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表