7 ArgoCD 部署与使用

1 ArgoCD 部署与使用

1.1 ArgoCD的部署要点

ArgoCD 有两种部署方式:多租户部署和核心化部署

多租户

  • 常用于为多个应用程序开发团队提供服务,并由平台团队维护的场景

  • 有两类可选择的部署方式

    • 非高可用性部署:适用于演示和测试的目的
    • 高可用部署:适用于生产用途
  • 支持用户通过Web UI或CLI进行访问

  • 支持集群级部署和名称空间级两种安装机制

    • 配置文件install.yaml:具有集群管理员访问权限的集群级安装;对整个集群均有管理权限
    • 配置文件namespace-install.yaml:仅需要名称空间级别权限的安装;也就是说部署在对应的 NS 下只能对该 NS 有操作

核心化部署

  • 安装的组件较小且更易于维护,它不包含 API Server 和 UI ,且不提供高可用机制

  • 仅适用于独立使用 ArgoCD 且不需要多租户特性的集群管理员

  • 用户要通过 Kubernetes 的访问权限来管理 ArgoCD

在生产中使用很显然不会使用核心化部署

2 argocd 的部署步骤

argocd 官方文档:https://argo-cd.readthedocs.io/en/stable/

在Kubernetes集群上部署ArgoCD

  • 采用的示例环境
    • 集群级别的部署
    • 非高可用模式
  • 默认的部署配置使用argocd名称空间,资源引用的路径亦使用该名称空间
    • kubectl create namespace argocd
    • kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

在管理节点上安装 ArgoCD CLI ,实现通过命令客户端对其进行交互

将 ArgoCD API Server 相关的 Service 暴露到集群外部

  • LoadBalancer Service、Ingress或者Port Forwarding

使用 ArgoCD CLI 或 Web UI 完成登录

  • 默认密码:kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=”{.data.password}” | base64 -d; echo

  • 登录:argocd login

  • 修改密码:argocd account update-password

添加一个部署 Application 的目标 Kubernetes Cluster

  • Application 部署的目标集群与 ArgoCD 自身在同一集群时,该步骤可选

2.1 非高可用部署流程

2.1.1 部署 argocd

1 创建对应的 NS

root@master:~# kubectl create namespace argocd

2 通过官方进行部署

root@master:~# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

3 查看 argocd NS Pod

root@master:~# kubectl get pod -n argocd 
NAME                                                READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                     1/1     Running   0          10m
argocd-applicationset-controller-66689cbf4b-hxtxm   1/1     Running   0          10m
argocd-dex-server-64cb85bf46-nvkpt                  1/1     Running   0          10m
argocd-notifications-controller-5f8c5d6fc5-pm6x5    1/1     Running   0          10m
argocd-redis-d486999b7-6w8ql                        1/1     Running   0          10m
argocd-repo-server-8576d68689-vlzd8                 1/1     Running   0          10m
argocd-server-cb57f685d-df6kt                       1/1     Running   0          10m

4 查看 SVC

root@master:~# kubectl get svc -n argocd 
NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   10.102.211.104   <none>        7000/TCP                     57s
argocd-dex-server                         ClusterIP   10.97.34.90      <none>        5556/TCP,5557/TCP,5558/TCP   57s
argocd-metrics                            ClusterIP   10.101.176.123   <none>        8082/TCP                     57s
argocd-notifications-controller-metrics   ClusterIP   10.98.186.196    <none>        9001/TCP                     57s
argocd-redis                              ClusterIP   10.101.185.194   <none>        6379/TCP                     57s
argocd-repo-server                        ClusterIP   10.96.36.10      <none>        8081/TCP,8084/TCP            57s
argocd-server                             ClusterIP   10.105.92.79     <none>        80/TCP,443/TCP               57s
argocd-server-metrics                     ClusterIP   10.105.81.33     <none>        8083/TCP                     57s

# argocd-server 用来实现对外的 web ui 访问,而这里可以看到是一个 clusterIP,所以我们需要将其改为 LB 或者 nodeport 来实现访问

5 修改 argocd-server 的 svc 改为 externalIP 实现对外暴露

root@master:~# kubectl edit svc -n argocd argocd-server
spec:
......省略......
  externalIPs:
  - 10.0.0.131

# 查看已经修改
root@master:~# kubectl get svc -n argocd 
argocd-server                             ClusterIP   10.105.92.79     10.0.0.131    80/TCP,443/TCP               7m19s

6 查看对应的 API 群组

root@master:~# kubectl api-resources --api-group=argoproj.io
NAME              SHORTNAMES         APIVERSION             NAMESPACED   KIND
applications      app,apps           argoproj.io/v1alpha1   true         Application
applicationsets   appset,appsets     argoproj.io/v1alpha1   true         ApplicationSet
appprojects       appproj,appprojs   argoproj.io/v1alpha1   true         AppProject

# 当我们部署好了 Argocd 对应的 CRD 之后就会创建对应的 api-group 群组

2.1.2 部署 argocd CLI

接下来我们需要部署对应的 CLI 客户端交互工具

这里我安装的是 2.3.3 版本

官方 GitHub 地址:https://github.com/argoproj/argo-cd/releases/tag/v2.3.3

1 下载

root@master:~# wget https://github.com/argoproj/argo-cd/releases/download/v2.3.3/argocd-linux-amd64

2 移动至 /usr/local/bin/ 并改名为 argocd

root@master:~# mv argocd-linux-amd64 /usr/local/bin/argocd

3 添加执行权限

root@master:~# chmod +x /usr/local/bin/argocd 

4 查看当前版本用于检验客户端是否正常使用

root@master:~# argocd version
argocd: v2.3.3+07ac038
  BuildDate: 2022-03-30T01:46:59Z
  GitCommit: 07ac038a8f97a93b401e824550f0505400a8c84e
  GitTreeState: clean
  GoVersion: go1.17.6
  Compiler: gc
  Platform: linux/amd64
FATA[0000] Argo CD server address unspecified 

5 通过上面的命令可以看到我们还需要添加 argo cd server 地址才能够实现对 server 端的控制

# 获取默认密码
root@master:~# kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
k3FSo9SnvsQrNe5V

# 所以我们需要通过 argocd 客户端工具登陆至 argocd server 上
root@master:~# argocd login 10.0.0.131
WARNING: server certificate had error: x509: cannot validate certificate for 10.0.0.131 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully # 登录成功
Context '10.0.0.131' updated

# 直接通过 IP 登录

6 再次查看 version 可以看到就没有提示 argo cd server address unspecified

root@master:~# argocd login 10.0.0.131
WARNING: server certificate had error: x509: cannot validate certificate for 10.0.0.131 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context '10.0.0.131' updated
root@master:~# argocd version
argocd: v2.3.3+07ac038
  BuildDate: 2022-03-30T01:46:59Z
  GitCommit: 07ac038a8f97a93b401e824550f0505400a8c84e
  GitTreeState: clean
  GoVersion: go1.17.6
  Compiler: gc
  Platform: linux/amd64
argocd-server: v2.3.3+07ac038
  BuildDate: 2022-03-30T00:06:18Z
  GitCommit: 07ac038a8f97a93b401e824550f0505400a8c84e
  GitTreeState: clean
  GoVersion: go1.17.6
  Compiler: gc
  Platform: linux/amd64
  Ksonnet Version: v0.13.1
  Kustomize Version: v4.4.1 2021-11-11T23:36:27Z
  Helm Version: v3.8.0+gd141386
  Kubectl Version: v0.23.1
  Jsonnet Version: v0.18.0

2.2 浏览器验证

https://10.0.0.131/

1 查看默认密码

root@master:~# kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
k3FSo9SnvsQrNe5V

2 登录

默认用户: admin

登录成功


Refresh app(s):表示远程仓库是否有变更,如果有变更那就 pull 到本地来

2.3 修改 argocd 默认密码

我们通过上面的示例登录会发现提供的密码是特别难记的,所以我们可以通过下面命令修改当前 admin 用户密码

root@master:~# argocd account update-password
*** Enter password of currently logged in user (admin):     # 输入旧的默认密码
*** Enter new password for user admin:                      # 输入新密码
*** Confirm new password for user admin:                    # 重复输入
Password updated
Context '10.0.0.131' updated
# 更新成功

新密码: zgy123456

以上就是整个 argocd 的部署流程那么接下来我们就可以上手使用 argocd

3 示例演示

3.1 通过 UI 简单示例演示

该实例流程如下:

  • gitee 仓库用来提供配置清单
  • 将 gitee 上的代码应用部署至当前本地集群

如果我们想通过 argo cd 来部署应用至当前集群的话我们有两部能够实现:

  1. 添加仓库
  2. 然后引用该仓库部署为 APP

1 部署,最后点击create

2 点击部署之后可以看到当前状态

3 点击该应用可以看到部署了几个 pod 以及几个资源类型

4 通过 K8S 集群查看刚才创建的 helloworld NS 下的 Pod

root@master:~# kubectl get pod -n helloworld 
NAME                                      READY   STATUS    RESTARTS   AGE
spring-boot-helloworld-5c798c6dd7-7cqh5   1/1     Running   0          84s
spring-boot-helloworld-5c798c6dd7-fpz7s   1/1     Running   0          84s
spring-boot-helloworld-5c798c6dd7-w2cdf   1/1     Running   0          84s

所以此时我们就能对该服务发起访问测试

3.1.1 启动客户端访问测试

1 运行客户端访问

# 运行客户端
root@master:~# kubectl run client-$RANDOM --image ikubernetes/admin-box:v1.2 --rm -it --restart=Never --command -- /bin/bash

# 运行该客户端之后进入到该客户端访问成功
root@client-7602 /# curl spring-boot-helloworld.helloworld
Hello Spring Boot 2.0!

这里的部署其实就是由我们的 argocd 自动完成的,如果此时我们修改了配置仓库中的内容定义我们的 argo cd 也会自定同步

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇