极狐GitLab|极狐GitLab Helm Registry 使用指南
Helm 是云原生时代应用程序的管理利器,极狐GitLab 有开箱即用的 Helm Chart Registry,可以和极狐GitLab CI/CD 无缝集成,体验一体化 DevOps 平台的魅力。
本文章来自 JIHULAB 101 参与者投稿,极狐GitLab SaaS ID:keyboard-man。在极狐GitLab SaaS 上的 issue 地址为:【我要拿拼图】极狐GitLab Helm Registry 的使用 #JIHULAB 101 (#79) · 议题 · gitlab-cn / JIHULAB 101 · GitLab
更多关于 JIHULAB 101 的内容可以阅读文章:「极狐GitLab创作营 JIHULAB 101」正式开营!官网地址:JIHULAB 101。
Helm是什么
Helm 是 Kubernetes 的包管理工具,是发现、分享以及使用那些在 Kubernetes 上构建的软件的最好方法,目前是 3.9.0 版本。
Helm 的安装
Helm 的安装非常简单,可以通过命令行来安装,诸如 brew、scoop、gofish、snap 等,也可以通过下载二进制文件包并将其添加到 PATH 中来完成安装,本文选择用二进制文件包来安装。
在 release(Release Helm v3.9.0 · helm/helm · GitHub)页面找到需要安装的版本,直接下载即可。以 macOS 为例,用如下命令完成下载:
$ wget https://get.helm.sh/helm-v3.9.0-darwin-amd64.tar.gz
然后解压并将解压后的二进制文件添加到 PATH 中:
$ tar -zxvf helm-v3.9.0-darwin-amd64.tar.gz
x darwin-amd64/
x darwin-amd64/helm
x darwin-amd64/LICENSE
x darwin-amd64/README.md$ mv darwin-amd64/helm /usr/local/bin/helm
然后使用 version 或者 --help 来查看是否安装成功:
$ helm version
version.BuildInfo{Version:"v3.9.0", GitCommit:"7ceeda6c585217a19a1131663d8cd1f7d641b2a7", GitTreeState:"clean", GoVersion:"go1.17.5"}
Helm Chart 的创建 使用 create 命令即可创建一个 helm chart:
$ helm create devops-is-shit
Creating devops-is-shit
chart 的目录结构如下:
$ tree
.
├── Chart.yaml
├── charts
├── templates
│├── NOTES.txt
│├── _helpers.tpl
│├── deployment.yaml
│├── hpa.yaml
│├── ingress.yaml
│├── service.yaml
│├── serviceaccount.yaml
│└── tests
│└── test-connection.yaml
└── values.yaml
Helm 的使用 修改 values.yaml 文件,写入镜像、资源限制等基本内容,即可完成一个简单的 helm chart demo。接着用 helm install 命令进行安装测试。
$ helm install jihu --namespace jihu --create-namespace -f values.yaml .
NAME: jihu
LAST DEPLOYED: Wed Jul6 09:04:16 2022
NAMESPACE: jihu
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace jihu -l "app.kubernetes.io/name=devops-is-shit,app.kubernetes.io/instance=jihu" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace jihu $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace jihu port-forward $POD_NAME 8080:$CONTAINER_PORT
可以查看一下生成的 deployment、pod、service 资源:
$ kubectl -n jihu get deploy,pods,svc
NAMEREADYUP-TO-DATEAVAILABLEAGE
deployment.apps/jihu-devops-is-shit1/1112d5hNAMEREADYSTATUSRESTARTSAGE
pod/jihu-devops-is-shit-6d5c8cdcf8-mffxz1/1Running045sNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/jihu-devops-is-shitClusterIP10.107.177.8080/TCP2d5h
接着将 helm chart 打成一个 package:
$ helm package devops-is-shit
Successfully packaged chart and saved it to: /Users/user/Documents/user/helm-demo/devops-is-shit-0.1.0.tgz$ ls -ltr
total 8
drwxr-xr-x7 userstaff224 Jul8 14:14 devops-is-shit
-rw-r--r--1 userstaff3554 Jul8 14:14 devops-is-shit-0.1.0.tgz
极狐GitLab Helm Registry 使用 接着将上面生成的 helm chart package 上传到极狐GitLab Helm Registry。关于极狐GitLab Helm Registry 使用的详细内容,可以查看极狐GitLab 官方文档(软件包库中的 Helm charts | GitLab)。
上传 Helm Chart 到极狐GitLab Helm Registry 使用如下命令即可将上述 package 上传到极狐GitLab Helm Registry:
$ curl --request POST \
--form 'chart=@mychart-0.1.0.tgz' \
--user : \
https://gitlab.example.com/api/v4/projects//packages/helm/api//charts
参数说明:
:极狐GitLab 用户名或部署令牌用户名。 - :个人访问令牌或部署令牌。
- :项目 ID(如 42)或 URL-encoded 项目路径(如group%2Fproject)。
:channel 的名称(如 stable)
$ curl --request POST \
--form 'chart=@devops-is-shit-0.1.0.tgz' \
--user keyboard-man:YOUR-JIHU-ACCESS-TOKEN \
https://jihulab.com/api/v4/projects/19649/packages/helm/api/stable/charts
返回结果如下:
{"message":"201 Created"}
【极狐GitLab|极狐GitLab Helm Registry 使用指南】可以在极狐GitLab 界面上查看:项目 --> 软件包与镜像库 --> 软件包库:
文章图片
可以点击查看详情:
文章图片
使用极狐GitLab Helm Registry Chart 首先需要添加极狐GitLab Helm repo:
$ helm repo add --username --passwordproject-1 https://gitlab.example.com/api/v4/projects//packages/helm/
传入实际参数并执行命令:
$ helm repo add --username keyboard-man --password YOUR-JIHU-ACCESS-TOKEN jihu-helm https://jihulab.com/api/v4/projects/19649/packages/helm/test
"jihu-helm" has been added to your repositories
查看 repo 是否添加成功:
$ helm repo list
NAMEURL
jihu-helm https://jihulab.com/api/v4/projects/19649/packages/helm/stable
可以看到已经添加成功,接着就可以使用了。用下面命令即可使用上述 helm chart 来安装一个 release:
$helm install jihu-helm --namespace jihu-helm --create-namespace jihu-helm/devops-is-shit
NAME: jihu-helm
LAST DEPLOYED: Fri Jul8 14:47:35 2022
NAMESPACE: jihu-helm
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace jihu-helm -l "app.kubernetes.io/name=devops-is-shit,app.kubernetes.io/instance=jihu-helm" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace jihu-helm $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace jihu-helm port-forward $POD_NAME 8080:$CONTAINER_PORT
查看生成的资源:
$ kubectl -n jihu-helm get deploy,pods,svc
NAMEREADYUP-TO-DATEAVAILABLEAGE
deployment.apps/jihu-helm-devops-is-shit1/11197sNAMEREADYSTATUSRESTARTSAGE
pod/jihu-helm-devops-is-shit-6d847f6489-c79zm1/1Running097sNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/jihu-helm-devops-is-shitClusterIP10.98.248.10380/TCP97s
可以看到成功创建了 pod。
与极狐GitLab CI/CD 的集成 Helm Chart Registry 的使用可以和极狐GitLab CI/CD 进行集成,完成 Helm Chart 的自动上传。
stages:
- create-package
- upload-packagecreate-package:
stage: create-package
image:
name: alpine/helm:3.9.0
entrypoint: [""]
artifacts:
paths:
- devops-is-shit-0.1.0.tgz
tags:
- k3d
script:
- helm package devops-is-shitupload-package:
stage: upload-package
dependencies:
- create-package
image:
name: curlimages/curl:latest
tags:
- k3d
script:
- 'curl --request POST --user gitlab-ci-token:$CI_JOB_TOKEN --form "chart=@devops-is-shit-0.1.0.tgz" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/helm/api/stable/charts"'
触发 CI/CD Pipeline,可以看到构建结果:
文章图片
通过项目 --> 软件包与镜像库 --> 软件包库,可以查看上传的 chart:
文章图片
以上可以看到,极狐GitLab 内置的 Helm Chart Registry 使用起来是非常方便的,结合 CI/CD 能够完成 Helm Chart 的自动发布。
推荐阅读
- 投稿|北汽极狐:会开演唱会,不会卖车?
- 投稿|极狐之「急」,华为何为?
- 云原生|Helm理解和使用
- 记一次gitlab-runner|记一次gitlab-runner 磁盘空间不足
- Kubernetes 资源编排系列之二: Helm 篇
- 如何在spring boot 使用 gitlab的Api
- linux|jenkins
- 从 0 到 1 开展软件测试
- #|helm部署etcd集群
- 投稿|北汽极狐“复制”小康问界?