[SRE晋级之路]K8S ArgoCD安装与应用(二)
1、ArgoCD资源
ArgoCD重要的两个资源
- Application
- AppProject
顾名思义,AppProject用于区分与集群,Application用于部署应用。一个AppProject包含若干个Application。
这里容易混淆的一个点就是大家要明确一个事情,Application是我们一个CD的一个ArgoCD项目的一个应用,不是只一个服务,一个Application CD流可能包含 若干个frontend和backend等。
2、应用部署
项目地址:
Gitee
Github
简单写了一个PythonDemo项目。
项目结构说明:
.
├── Dockerfile
├── app.py
├── build.sh
├── deploy # 集成目录
│ ├── deployment.yaml
│ └── service.yaml
└── requirements.txt
2.1、首先创建一个AppProject
创建 argocd-appproject.yaml 文件
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: myproject
namespace: argocd
spec:
description: Test project
sourceRepos:
- '*'
destinations:
- name: '*'
namespace: '*'
server: https://kubernetes.default.svc
应用 argocd-appproject.yaml 文件
kubectl apply -f argocd-appproject.yaml -n argocd
-->
appproject.argoproj.io/myproject created
重要字段说明:
字段 | 说明 |
---|---|
sourceRepos | 数组,匹配仓库地址权限 |
destinations | 数组,配置K8S集群信息 |
name | 自定义 集群名称 |
namespace | 匹配K8S集群的namespase权限 |
server | 集群地址,默认https://kubernetes.default.svc |
2.2、首先创建一个Application
创建 argocd-application.yaml 文件
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: ido
spec:
destination:
namespace: myapp
server: https://kubernetes.default.svc
source:
path: deploy
repoURL: https://gitee.com/dakanggit/ido.git #git地址
targetRevision: HEAD
project: myproject
syncPolicy:
automated: {} # 自动同步
syncOptions:
- PrunePropagationPolicy=background
- CreateNamespace=true # 自动创建namespace
应用 argocd-application.yaml 文件
kubectl apply -f argocd-application.yaml -n argocd
-->
application.argoproj.io/ido created
重要字段说明:
字段 | 说明 |
---|---|
destination | 配置目标集群 |
source | 配置代码仓库 |
repoURL | 代码仓库地址 |
path | 代码仓库地址的部署文件 |
targetRevision | tag部署方式的tag地址 |
chart | Helm部署方式,相应的repoURL则为helm地址 |
syncPolicy | 同步策略,后面说明… |
Helm部署配置:
Secret Helm配置
apiVersion: v1
kind: Secret
metadata:
name: argo-helm
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repository
stringData:
name: argo
url: https://github.io/xxx
type: helm
username: my-username
password: my-password
tlsClientCertData: ...
tlsClientCertKey: ...
Application 配置
spec:
source:
repoURL: https://github.io/xxx
chart: argo
自动同步策略:
默认的,如果我们想自动同步仓库的部署文件,需要在Application中配置:
spec:
syncPolicy:
automated: {}
auto-prune
默认情况下,仓库删除部署文件ArgoCD不会删除Application,如果想自动删除配置auto-prune为true
spec:
syncPolicy:
automated:
prune: true
allow-empty
允许有空资源。
当部署的资源在Repo中不存在,是否允许部署成功。true表示可以存在空资源。
spec:
syncPolicy:
automated:
prune: true
allowEmpty: true
self-heal
集群信息更改后自动恢复。
比如手动更改了一些部署配置信息,自动同步后与Repo期望状态一致,也就恢复Repo配置的状态。
spec:
syncPolicy:
automated:
selfHeal: true
2.3、配置Git仓库
因为上面的Demo都是公有仓库,我们开发很多都是在私有Git仓库上进行版本管理。
我们只需要配置 K8s的 Secret 资源即可。
一定要打上argocd.argoproj.io/secret-type 标签,并且namespace要与ArgoCD服务相同。
以下是Demo:
HTTP/HTTPS 仓库
apiVersion: v1
kind: Secret
metadata:
name: private-repo
namespace: argocd
labels:
argocd.argoproj.io/secret-type: http-repository
stringData:
type: git
url: https://github.com/private-repo
password: my-password
username: my-username
ssh 仓库
apiVersion: v1
kind: Secret
metadata:
name: private-repo
namespace: argocd
labels:
argocd.argoproj.io/secret-type: ssh-repository
stringData:
type: git
url: git@my-private-repository.git
sshPrivateKey: |
-----BEGIN OPENSSH PRIVATE KEY-----
... 密钥
-----END OPENSSH PRIVATE KEY-----
这样,ArgoCD在同步代码的时候就会使用该 仓库信息进行认证。
3、WebUI
部署成功后会出现以下页面:
我们的 IDO服务,
因为在IDO服务中我们制作了一个Service,端口指向NodePort 30050。
访问http://127.0.0.1:30050 返回hello world。
curl http://127.0.0.1:30050
-->
hello world
Web可以配置
当然,以上操作我们都可以在ArgoCD提供给我们的Web页面进行添加管理。
Project、Application、Git Secret等等,我们自己去探索吧。
而且,Web也提供了Pod的log、event等功能入口,当然也可以exec,只不过需要配置一下,点击地址大家可以自行配置。我个人感觉没必要,因为不太符合CD流程。
Argo Cli
Argo Cli 初始化
argo admin initial-password -n argocd #获取密码
-->
5grOWk9UdmmANOQm
This password must be only used for first time login. We strongly recommend you update the password using `argocd account update-password`.
argo login 127.0.0.1:30080 #登录
-->
WARNING: server certificate had error: tls: failed to verify certificate: x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? yes
Username: admin
Password:
'admin:login' logged in successfully
Context '127.0.0.1:30080' updated
常用命令
该命令一般取决于你下载后mv到 /usr/local/bin下的名字;
# 下载argocd client
wget https://github.com/argoproj/argo-cd/releases/download/v2.12.7/argocd-linux-amd64
# 权限
chmod u+x argocd-linux-amd64
# 移动可执行目录
mv ./argocd-linux-amd64 /usr/local/bin/argo
我的argocd命令 是 argo
argo -h # 调出Help
argo account xxx #修改密码
argo app list # 显示所有app
-->
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
argocd/ido https://kubernetes.default.svc myapp myproject Synced Healthy Auto <none> https://gitee.com/dakanggit/ido.git deploy HEAD
argo app get xxx #获取详情
argo app create xx #创建application
argo app delete xxx #删除application
argo app edit xxx #修改application
argo app get ido
-->
Name: argocd/ido
Project: myproject
Server: https://kubernetes.default.svc
Namespace: myapp
URL: https://127.0.0.1:30080/applications/ido
Source:
- Repo: https://gitee.com/dakanggit/ido.git
Target: HEAD
Path: deploy
SyncWindow: Sync Allowed
Sync Policy: Automated
Sync Status: Synced to HEAD (752c3fd)
Health Status: Healthy
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service myapp ido-service Synced Healthy service/ido-service created
apps Deployment myapp ido-deployment Synced Healthy deployment.apps/ido-deployment created
argocd app create guestbook --repo https://gitee.com/dakanggit/ido.git --path deploy--dest-server https://kubernetes.default.svc --dest-namespace myproject
几乎所有的操作在 kubectl、ArgoCD Cli、 ArgoCD Web UI都可以操作。