使用 kustomize 安装 ArgoCD
官方提供了安装 ArgoCD 的 YAML,可以使用 kubectl 一键安装,但我建议使用 kustomize 来安装,因为这样一来可以将自定义配置声明并持久化到文件中,避免直接集群中改配置,也利于后续 ArgoCD 的自举,即用 ArgoCD 自身来用 GitOps 管理自身。
准备一个目录:
代码语言:bash复制mkdir argocd
cd argocd
下载 argocd 部署 YAML:
代码语言:bash复制wget -O install.yaml https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
后续升级 argocd 时,可以用上面相同命令更新下 YAML 文件。
创建 kustomization.yaml
:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: argocd
patches:
- path: argocd-cm-patch.yaml
resources:
- install.yaml
resources
里也可以直接引用 YAML 的 URL 下载地址,但不推荐,因为将 YAML 下到本地一方面可以避免因网络环境问题导致在某些环境部署失败,另一方面也方便后续升级时对比前后差异。patches
里引入自定义配置,对官方提供的 YAML 进行 patch,这里主要是对 ArgoCD 的 ConfigMap 进行 patch。
创建 argocd-cm-patch
:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
data:
application.instanceLabelKey: argocd.argoproj.io/instance
kustomize.buildOptions: --enable-helm --load-restrictor=LoadRestrictionsNone
- kustomize 默认不支持引用本目录之外的资源,如果引用会报错,可通过
kustomize.buildOptions
让 ArgoCD 给 kustomize 传入--load-restrictor=LoadRestrictionsNone
这个参数来允许这种引用。 - argocd 默认会给管理的应用打上
app.kubernetes.io/instance
这个常见注解,而其它很多开源项目部署的应用也使用了这个注解,会导致冲突,通过application.instanceLabelKey
配置项改成其它的注解以避免冲突。
安装:
代码语言:bash复制kubectl create namespace argocd
kubectl apply -k .
安装 argocd 命令行工具
如果有 homebrew
,可以一键安装:
brew install argocd
也可以从 release 页面下载安装二进制: https://github.com/argoproj/argo-cd/releases
暴露 ArgoCD API Server
argocd
命令行工具是与 argocd-server
通信来实现交互的,所以需要让 argocd
命令行工具访问到 argocd-server
暴露的端口,有以下几种方式。
使用 LoadBalancer Service 暴露
如果你的集群环境有 LoadBalancer Service 的实现,可以直接将 argocd-server
的 service 类型改成 LoadBalancer
:
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}''
不过还是不建议直接用 kubectl 改,遵循 GitOps 理念,任何改动都应变成声明式的文件,如果用 kustomize
部署,可以像下面一样加下 patch:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: argocd
resources:
- install.yaml
patches:
- target:
name: argocd-server
kind: Service
patch: |
- path: "/spec/type"
op: add
value: "LoadBalancer"
使用 Ingress 或 Gateway API 暴露
如果你的集群有 Ingress 或 Gateway API 的实现,可以定义 Ingress 或 Gateway API 的资源来暴露 argocd-server
。
使用 kubectl port-forward
通常我们并不想将 argocd-server
暴露给其它人用,可以使用 kubectl port-forward
将 argocd-server
的端口转发到本机端口:
kubectl port-forward svc/argocd-server -n argocd 8080:443
此时
argocd-server
的访问地址是127.0.0.1:8080
登录 ArgoCD
ArgoCD 提供了命令行和网页两种方式来管理,且两种方式的访问入口地址是一致的,都可以实现相同的管理功能,不过我更推荐使用命令行的方式。
通过命令行工具登录
argocd 安装时会自动生成 admin
的初始密码,确保 kubeconfig 的当前 context 指向的是 argocd 所在集群,使用以下命令获取初始密码:
argocd admin initial-password -n argocd
然后使用初始密码登录:
代码语言:bash复制argocd login 127.0.0.1:8080
注意修改
argocd-server
地址,这里假设用kubectl port-forward
暴露的 argocd-server。
登录后建议修改下密码:
代码语言:bash复制argocd account update-password
然后你就可以使用 argocd
命令行工具来管理 argocd 了,试试有哪些功能:
argocd -h
通过网页登录
与命令行登录类似,打开浏览器,输入 argocd-server 的访问地址(与命令行登录地址一致),然后输入用户名密码即可进入 argocd 管理页面。
参考资料
- ArgoCD Installation: https://argo-cd.readthedocs.io/en/stable/operator-manual/installation/
- ArgoCD Getting Started: https://argo-cd.readthedocs.io/en/stable/getting_started