[SRE晋级之路]K8S ArgoCD安装与应用(二)

在这里插入图片描述

[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代码仓库地址的部署文件
targetRevisiontag部署方式的tag地址
chartHelm部署方式,相应的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都可以操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值