什么是Zadig
相信有不少朋友已经听过Zadig,但是有更多的朋友还没有听过,或者说听过但是没仔细去了解过,这里我还是简单介绍一下什么是Zadig。
Zadig是一个持续交付的平台,它集CI、CD、自动化测试于一身,致力于构建一个云原生开源的软件交付平台。
使用Zadig,可以轻松地实现本地联调、微服务并行构建、集成测试与持续部署,开发可以更专注于业务开发、运维也可以更专注于稳定性维护。
部署
说了那么多,下面就进入正题,开始Zadig的使用之旅。
安装
其实Zadig的安装参考官方文档的安装篇就行。但是为了保持文章的完整性,我这里简单介绍一下。
下面是我的环境说明:
Kubernetes:v1.18.8
Helm:v3.5.4
Linux:CentOS 7.9
PS:我这里是基于现有的Kubernetes,使用Helm进行安装部署。
安装MySQL
为什么要安装MySQL呢?
使用Zadig默认的安装方式,安装的MySQL是8.+版本,而且有时候死活起不来(踩过坑,没找到起不来的原因),所以我不论是在生产使用还是在测试环境测试都是自己安装的MySQL 5.7的版本,当然,你们需要根据自己的实际情况进行选择。
(1)添加MySQL的Helm repo
$ helm repo add stable https://charts.helm.sh/stable
(2)下载MySQL chart包到本地(我个人习惯,随君选择)
$ helm pull stable/mysql --version 1.6.9
(3)自定义value.yaml文件
mysqlUser: root@'%' mysqlPassword: Joker@Zadig123 persistence: enabled: true storageClass: "rbd" accessMode: ReadWriteOnce size: 50Gi configurationFiles: mysql.cnf: |- [mysql] default-character-set=utf8 [mysql.server] default-character-set=utf8 [mysqld_safe] default-character-set=utf8 [client] default-character-set=utf8 [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' max_connections=3000 slow_query_log=ON slow_query_log_file=/tmp/mysql-slow.log long_query_time=1 sql_mode=NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION lower_case_table_names=1
(4)安装MySQL
$ kubectl create ns zadig $ helm install mysql -n zadig -f my-vaule.yaml .
(5)安装完成过后查看MySQL安装情况
$ kubectl get all -n zadig | grep mysql pod/mysql-6b64454fd9-nhlqd 2/2 Running 1 57d service/mysql LoadBalancer 10.233.7.155 192.168.100.81 3306:32703/TCP,9104:32514/TCP 57d deployment.apps/mysql 1/1 1 1 57d replicaset.apps/mysql-6b64454fd9 1 1 1 57d
安装Zadig
上面已经安装好了MySQL,下面就开始安装Zadig(其他的组件就用Zadig自带的,目前使用起来没发现任何问题)。
(1)添加Zadig Helm Chart
$ helm repo add koderover-chart https://koderover.tencentcloudcr.com/chartrepo/chart
(2)下载Zadig Chart包 我这里先下载v1.11.0版本,因为后续还准备了一个升级的过程。
$ helm pull koderover-chart/zadig --version 1.11.0
(3)自定义value.yaml文件,主要是修改mysql的配置
tags: mysql: false connections: mysql: host: mysql:3306 auth: user: root password: Joker@Zadig123 dex: config: storage: type: mysql config: host: mysql port: 3306 database: dex user: root password: Joker@Zadig123 ssl: mode: "false"
(4)安装Zadig 官方指出可以使用域名或者IP访问,我这里采用的是域名。
$ export NAMESPACE=zadig $ export DOMAIN=zadig.jokerbai.com $ helm upgrade --install zadig . -f my-value.yaml --namespace ${NAMESPACE} --version=1.10.0 --set endpoint.FQDN=${DOMAIN} --set global.extensions.extAuth.extauthzServerRef.namespace=${NAMESPACE} --set "dex.config.staticClients[0].redirectURIs[0]=http://${DOMAIN}/api/v1/callback,dex.config.staticClients[0].id=zadig,dex.config.staticClients[0].name=zadig,dex.config.staticClients[0].secret=ZXhhbXBsZS1hcHAtc2VjcmV0"
(5)查看安装情况
$ kubectl get pod -n zadig NAME READY STATUS RESTARTS AGE aslan-5d6b86ccdf-st7w9 2/2 Running 0 10d config-7d6654fb8-xcfmk 1/1 Running 0 10d cron-67f77f54bc-fvrgp 2/2 Running 0 10d dind-0 1/1 Running 0 49d discovery-68d76c5bf4-nrl5r 1/1 Running 0 57d gateway-645958c96c-gnltp 1/1 Running 0 57d gateway-proxy-5d6bcc677f-njvdk 1/1 Running 0 57d gloo-7955b997b-br9m2 1/1 Running 0 57d hub-server-7b5cc9bdb6-t6zkw 1/1 Running 0 10d mysql-6b64454fd9-nhlqd 2/2 Running 1 57d nsqlookup-0 1/1 Running 0 57d nsqlookup-1 1/1 Running 0 57d nsqlookup-2 1/1 Running 0 57d opa-69d5c669f6-s784f 1/1 Running 0 57d picket-55685b94d9-czm7b 1/1 Running 0 10d podexec-868c677548-mks74 1/1 Running 0 10d policy-5c5bd995c8-pfxnp 1/1 Running 0 10d resource-server-c87c4cddd-ptq45 1/1 Running 0 10d user-77b5585554-n2cm4 1/1 Running 0 10d warpdrive-55c46595d5-hvkc2 2/2 Running 0 10d warpdrive-55c46595d5-mn9d8 2/2 Running 0 10d zadig-dex-d9df5944f-vgdkc 1/1 Running 0 10d zadig-minio-5c576d44c8-rnkmp 1/1 Running 0 57d zadig-mongodb-6dfb6f676f-9v5rq 1/1 Running 0 57d zadig-portal-69d8f946b8-wqrpz 1/1 Running 0 10d
然后可以根据域名http://zadig.jokerbai.com进行访问。
使用账号密码 admin:zadig
进行登录。
升级
Zadig是非常活跃的项目,社区迭代是非常快的,而且功能会越来越多,体验越来越好,所以升级Zadig算是一个日常需求了。
PS:虽然Zadig每个版本的兼容性做的不错,但是在升级的时候不建议跨版本升级。
(1)下载新版本的zadig
$ helm pull koderover-chart/zadig --version 1.12.0
(2)自定义value.yaml 获取集群zadig配置信息
helm get values zadig -n zadig > zadig.yaml
修改zadig.yaml,添加自定义mysql配置
USER-SUPPLIED VALUES: tags: mysql: false connections: mysql: host: mysql:3306 auth: user: root password: Joker@Zadig123 dex: config: storage: type: mysql config: host: mysql port: 3306 database: dex user: root password: Joker@Zadig123 ssl: mode: "false" staticClients: - id: zadig name: zadig redirectURIs: - http://zadig.jokerbai.com/api/v1/callback secret: ZXhhbXBsZS1hcHAtc2VjcmV0 endpoint: FQDN: zadig.ustax.tech global: extensions: extAuth: extauthzServerRef: namespace: zadig
(3)备份数据库
具体信息根据实际情况填写
1、备份mongo数据库
$ mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
2、备份mysql数据库
$ mysqldump -h <HOST> -P <PORT> -u root -p user > user.sql $ mysqldump -h <HOST> -P <PORT> -u root -p dex > dex.sql
(4)升级zadig
$ helm upgrade zadig -n zadig -f zadig.yaml .
升级后,查看Pod是否正常启动,然后使用浏览器登录看是否正常。
系统集成
集成的功能很丰富,可以集成代码源、账号系统、Jenkins、Jira等,但是并不是所有的都有用,选择自己需要的集成就行。
我这里也不会把全部的集成都写一遍,那样没有意义,不如直接看官方文档。我只写我用到的系统:代码源和账号系统。
集成代码源
代码源的选择非常多,可以使用现成的saas平台,比如gitlab、gitee、github等,这些zadig都支持集成。由于我们公司是使用的自建的gitlab,所以这里只介绍gitlab的集成方法。
(1)创建OAuth。我这里创建的是组织类型的OAuth,也就是可以有全局的权限。
按图配置,如下:
- 填写应用的名称
- 回调地址请填写 http://[zadig.yours.com]/api/directory/codehosts/callback
- 赋予权限 api 、read_user 、read_repository
- 点击创建
创建完成之后,记住Application ID
和Secret
。
(2)在zadig上配置Gitlab集成
填入如下信息:
- 代码源:此处选择 GitLab
- 代码源标识:自定义,方便在 Zadig 系统中快速识别出该代码源,该信息在整个系统内唯一
- GitLab 服务 URL:GitLab 地址
- Application ID:步骤 3 应用创建成功后返回的 Application ID
- Secret:步骤 3 应用创建成功后返回的 Secret
待确认无误后,点击前往授权
,会跳到Gitlab进行授权,点击Authorize
即可。
到此,Gitlab集成完成。
集成账户系统
Zadig本身自带账户系统,但是在企业内部一般也会有自己的账户系统,比如LDAP,为了统一管理,这时候就需要集成这些账户系统。
我这里不是集成的LDAP,而是集成的Gitlab,所以这里只介绍Gitlab的集成方法。
(1)创建Gitlab OAuth
填入如下信息:
- 填写应用的名称
- 回调地址请填写 http://[zadig.yours.com]/api/directory/codehosts/callback
- 赋予权限 read_user 、openid
- 点击创建
(2)在Zadig账户系统进行集成
Gitlab需要通过自定义的方式进行集成,相关配置需要通过YAML的方式进行自定义,如下:
baseURL: http://gitlab.jokerbai.com <Gitlab地址> clientID: xxxxx <Gitlan OAuth的Applicaton ID> clientSecret: xxxxx <Gitlab OAtuth的secret> groups: - xxxx <Gitlab组> redirectURI: http://zadig.jokerbai.com/dex/callback <Zadig回调地址> useLoginAsID: false
自定义账户系统使用Dex实现,所以Gitlab等自定义账户系统的集成,可以参考Dex的文档(https://dexidp.io/docs/connectors/gitlab/)
信息填写完成过后,点击保存。
(3)登录验证 退出当前账户,使用Gitlab账户进行登录。
选择第三方登录,如下:
然后会跳到Gitlab登录界面,填写用户名密码,如果在当前浏览器已经登录了Gitlab,则会直接跳转到授权界面,如下:
点击Authorize
过后,会回跳到Zadig用户界面。不过当前用户只是登录到Zadig,并没有任何权限,需要管理授权才能进行其他操作。
到此集成系统已经完成。