kubernetes + harbor的webhooks功能实现自动发布
harbor
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
项目地址:https://gitcode.com/gh_mirrors/ha/harbor
免费下载资源
·
这是一个实验阶段的片段
大致思路是:
测试团队完成测试后的镜像,被push到线上系统的harbor镜像库,触发了harbor的webhooks,webhooks调用提前写好的接口,接口程序经过一系列的判断(包括是否强制要求必须比线上版本号要高才更新等)更新kubernetes的deployments;kubernetes完成更新。
前期问题:
1、搞清楚webhooks的json是什么 ?
2、根据json搭建接口处理json;
实施过程:
1、在harbor上配置一个push镜像就会触发的webhooks;
2、使用python创建一个处理json的脚本,并启动;
3、在现有的kubernetes平台创建一个nginx的deployments;
4、在本地创建一个与上述版本不同的nginx镜像;
5、push上述创建的镜像到harbor仓库;(既是image是存在的也很触发webhooks)
6、观察结果;
执行过程:
1、在harbor上配置一个push镜像就会触发的webhooks;
2、使用python创建一个处理json的脚本,并启动;
根据上述的webhooks的json,使用flask开一个端口处理请求;
#!/usr/bin/env python
#encoding=utf-8
from flask import Flask, request
import json
import os
app = Flask(__name__)
@app.route('/api', methods=['POST', 'GET'])
def push_image():
postfrom = request.form
postvalues = request.values
postjson = request.json
print(json.dumps(postjson, sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False))
images = postjson['event_data']['resources'][0]['resource_url']
os.system('kubectl set image deployments/nginx-deployment nginx='+ images +' -n {your_namespace}') # 更新deployments的images,kubernetes会自动rollingupdate
return("ok")
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9091)
3、在现有的kubernetes平台创建一个nginx的deployments;
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
namespace: wosms
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.18.0 # 设定的是1.18.0
name: nginx
tolerations:
- key: "key"
operator: "Equal"
value: "nginx"
effect: "NoSchedule"
创建deployments
Kubectl apply -f nginx.yaml
4、在本地创建一个与上述版本不同的nginx镜像;
docker pull nginx:1.20.0
docker tag nginx:1.20.0 xxx.xx.xx.xxx:8080/{your_repository}/nginx:1.20.0
5、push上述创建的镜像到harbor仓库;(既是image是存在的也很触发webhooks)
docker push xxx.xx.xx.xxx:8080/{your_repository}/nginx:1.20.0
6、观察结果;
出现结果:
deployment.apps/nginx-deployment image updated
执行命令:
kubectl describe deployment nginx-deployment -n {your_namespace}
执行结果:
Name: nginx-deployment
......
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: xxx.xx.xxx.xx:8080/{your_namespace}/nginx:1.20.0
.......
PS:
harbor的webhooks功能,post的json;
{
'occur_at': 1632819802,
'operator': 'amdin',
'type': 'PUSH_ARTIFACT',
'event_data':
{
'repository':
{
'date_created': 1632819802,
'repo_type': 'public',
'repo_full_name': '{your_repository}/nginx',
'namespace': '{your_repository}',
'name': 'nginx'
},
'resources': [{
'resource_url': 'xxx.xx.xx.xxx:8080/{your_repository}/nginx:1.20.0',
'tag': '1.20.0',
'digest': 'sha256:598057a5c482d2fb42092fd6f4ba35ea4cc86c41f5db8bb68d1ab92c4c40db98'}]
}
}
GitHub 加速计划 / ha / harbor
8
3
下载
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
最近提交(Master分支:4 个月前 )
a548ab70
Add the field extra_attrs to the p2p preheat policy for the provider to
define their specified parameters when preheating.
Signed-off-by: chlins <chlins.zhang@gmail.com> 4 天前
e4178753
The export CVE permission should be included in the project scope, as the API relies on project-level judgment.
Signed-off-by: wang yan <wangyan@vmware.com> 5 天前
更多推荐
已为社区贡献1条内容
所有评论(0)