乐趣区

关于git:极狐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 Jul  6 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
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jihu-devops-is-shit   1/1     1            1           2d5h

NAME                                       READY   STATUS    RESTARTS   AGE
pod/jihu-devops-is-shit-6d5c8cdcf8-mffxz   1/1     Running   0          45s

NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/jihu-devops-is-shit   ClusterIP   10.107.177.80   <none>        80/TCP    2d5h

接着将 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-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 官网文档(软件包库中的 Helm charts | GitLab)。

上传 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 list
NAME      URL
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 Jul  8 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
NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jihu-helm-devops-is-shit   1/1     1            1           97s

NAME                                            READY   STATUS    RESTARTS   AGE
pod/jihu-helm-devops-is-shit-6d847f6489-c79zm   1/1     Running   0          97s

NAME                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/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 的主动公布。

退出移动版