【学习笔记】ArgoCD GitOps 实践一:ArgoCD 的安装与配置


使用 kustomize 安装 ArgoCD

官方提供了安装 ArgoCD 的 YAML,可以使用 kubectl 一键安装,但我建议使用 kustomize 来安装,因为这样一来可以将自定义配置声明并持久化到文件中,避免直接集群中改配置,也利于后续 ArgoCD 的自举,即用 ArgoCD 自身来用 GitOps 管理自身。

准备一个目录:

1
2
mkdir argocd
cd argocd

下载 argocd 部署 YAML:

1
wget -O install.yaml https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

后续升级 argocd 时,可以用上面相同命令更新下 YAML 文件。

创建kustomization.yaml:

1
2
3
4
5
6
7
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: argocd
patches:
  - path: argocd-cm-patch.yaml
resources:
- install.yaml

创建argocd-cm-patch:

1
2
3
4
5
6
7
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
data:
  application.instanceLabelKey: argocd.argoproj.io/instance
  kustomize.buildOptions: --enable-helm --load-restrictor=LoadRestrictionsNone

安装:

1
2
kubectl create namespace argocd
kubectl apply -k .

安装 argocd 命令行工具

如果有homebrew,可以一键安装:

1
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:

1
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}''

不过还是不建议直接用 kubectl 改,遵循 GitOps 理念,任何改动都应变成声明式的文件,如果用kustomize部署,可以像下面一样加下 patch:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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 的端口转发到本机端口:

1
kubectl port-forward svc/argocd-server -n argocd 8080:443

登录 ArgoCD

ArgoCD 提供了命令行和网页两种方式来管理,且两种方式的访问入口地址是一致的,都可以实现相同的管理功能,不过我更推荐使用命令行的方式。

通过命令行工具登录

argocd 安装时会自动生成 admin 的初始密码,确保 kubeconfig 的当前 context 指向的是 argocd 所在集群,使用以下命令获取初始密码:

1
argocd admin initial-password -n argocd

然后使用初始密码登录:

1
argocd login 127.0.0.1:8080

登录后建议修改下密码:

1
argocd account update-password

通过网页登录

与命令行登录类似,打开浏览器,输入 argocd-server 的访问地址(与命令行登录地址一致),然后输入用户名密码即可进入 argocd 管理页面。