写点什么

极狐 GitLab Helm Registry 使用指南

作者:极狐GitLab
  • 2022 年 7 月 28 日
  • 本文字数:4176 字

    阅读完需:约 14 分钟

极狐GitLab Helm Registry 使用指南

Helm 是云原生时代应用程序的管理利器,极狐 GitLab 有开箱即用的 Helm Chart Registry,可以和极狐 GitLab CI/CD 无缝集成,体验一体化 DevOps 平台的魅力。


本文章来自 JIHULAB 101 参与者投稿,极狐 GitLab SaaS ID:keyboard-man。在极狐 GitLab SaaS 上的 issue 地址为:https://jihulab.com/gitlab-cn/jihulab101/-/issues/79。经联系,获得授权转载。


更多关于 JIHULAB 101 的内容可以阅读文章:「极狐GitLab创作营 JIHULAB 101」正式开营!官网地址:https://gitlab.cn/jihulab101


Helm 是什么


Helm 是 Kubernetes 的包管理工具,是发现、分享以及使用那些在 Kubernetes 上构建的软件的最好方法,目前是 3.9.0 版本。


Helm 的安装


Helm 的安装非常简单,可以通过命令行来安装,诸如 brew、scoop、gofish、snap 等,也可以通过下载二进制文件包并将其添加到 PATH 中来完成安装,本文选择用二进制文件包来安装。


在 release(https://github.com/helm/helm/releases/tag/v3.9.0)页面找到需要安装的版本,直接下载即可。以 macOS 为例,用如下命令完成下载:


$ wget https://get.helm.sh/helm-v3.9.0-darwin-amd64.tar.gz
复制代码


然后解压并将解压后的二进制文件添加到 PATH 中:


$ tar -zxvf helm-v3.9.0-darwin-amd64.tar.gzx darwin-amd64/x darwin-amd64/helmx darwin-amd64/LICENSEx darwin-amd64/README.md
$ mv darwin-amd64/helm /usr/local/bin/helm
复制代码


然后使用 version 或者 --help 来查看是否安装成功:


$ helm versionversion.BuildInfo{Version:"v3.9.0", GitCommit:"7ceeda6c585217a19a1131663d8cd1f7d641b2a7", GitTreeState:"clean", GoVersion:"go1.17.5"}
复制代码


Helm Chart 的创建


使用 create 命令即可创建一个 helm chart:


$ helm create devops-is-shitCreating 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: jihuLAST DEPLOYED: Wed Jul  6 09:04:16 2022NAMESPACE: jihuSTATUS: deployedREVISION: 1NOTES: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,svcNAME                                  READY   UP-TO-DATE   AVAILABLE   AGEdeployment.apps/jihu-devops-is-shit   1/1     1            1           2d5h
NAME                                       READY   STATUS    RESTARTS   AGEpod/jihu-devops-is-shit-6d5c8cdcf8-mffxz   1/1     Running   0          45s
NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGEservice/jihu-devops-is-shit   ClusterIP   10.107.177.80   <none>        80/TCP    2d5h
复制代码


接着将 helm chart 打成一个 package:


$ helm package devops-is-shitSuccessfully packaged chart and saved it to: /Users/user/Documents/user/helm-demo/devops-is-shit-0.1.0.tgz
$ ls -ltr total 8drwxr-xr-x  7 user  staff   224 Jul  8 14:14 devops-is-shit-rw-r--r--  1 user  staff  3554 Jul  8 14:14 devops-is-shit-0.1.0.tgz
复制代码


极狐 GitLab Helm Registry 使用


接着将上面生成的 helm chart package 上传到极狐 GitLab Helm Registry。关于极狐 GitLab Helm Registry 使用的详细内容,可以查看极狐 GitLab 官方文档(https://docs.gitlab.cn/jh/user/packages/helm_repository/)。


上传 Helm Chart 到极狐 GitLab Helm Registry


使用如下命令即可将上述 package 上传到极狐 GitLab Helm Registry:


$ curl --request POST \     --form 'chart=@mychart-0.1.0.tgz' \     --user <username>:<access_token> \     https://gitlab.example.com/api/v4/projects/<project_id>/packages/helm/api/<channel>/charts
复制代码


参数说明:


  • <username>:极狐 GitLab 用户名或部署令牌用户名。

  • <access_token>:个人访问令牌或部署令牌。

  • <project_id>:项目 ID(如 42)或 URL-encoded 项目路径(如 group%2Fproject)。

  • <channel>: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 Chart


首先需要添加极狐 GitLab Helm repo:


$ helm repo add --username <username> --password <access_token> project-1 https://gitlab.example.com/api/v4/projects/<project_id>/packages/helm/<channel>
复制代码


传入实际参数并执行命令:


$ 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 listNAME      URLjihu-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-shitNAME: jihu-helmLAST DEPLOYED: Fri Jul  8 14:47:35 2022NAMESPACE: jihu-helmSTATUS: deployedREVISION: 1NOTES: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,svcNAME                                       READY   UP-TO-DATE   AVAILABLE   AGEdeployment.apps/jihu-helm-devops-is-shit   1/1     1            1           97s
NAME                                            READY   STATUS    RESTARTS   AGEpod/jihu-helm-devops-is-shit-6d847f6489-c79zm   1/1     Running   0          97s
NAME                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGEservice/jihu-helm-devops-is-shit   ClusterIP   10.98.248.103   <none>        80/TCP    97s
复制代码


可以看到成功创建了 pod。


与极狐 GitLab CI/CD 的集成


Helm Chart Registry 的使用可以和极狐 GitLab CI/CD 进行集成,完成 Helm Chart 的自动上传。


stages:  - create-package  - upload-package
create-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-shit

upload-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 的自动发布。

发布于: 刚刚阅读数: 4
用户头像

极狐GitLab

关注

开源开放,人人贡献 2021.05.19 加入

开放式一体化DevOps平台,助力行业高速协同增长!

评论

发布
暂无评论
极狐GitLab Helm Registry 使用指南_git_极狐GitLab_InfoQ写作社区