k8s笔记7.2--搭建私有helm仓库

k8s笔记7.2--搭建私有helm仓库

  • 1 安装基础软件
  • 2 搭建helm私有仓库
  • 3 chart 更新发布和案例
    • 3.1 更新发布
    • 3.2 helm 案例
      • 发布一个busybox chart
  • 4 常见操作和问题
    • 4.1 常见操作
    • 4.2 常见问题
  • 5 说明

1 安装基础软件

  1. 拉取 nginx 镜像用于提供helm仓库的http服务
  2. 下载最新版本 helm-v3.6.1
    解压helm安装包,在 ~/.bashrc 添加环境变量即可
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/home/xg/soft/java/jdk-11.0.8/bin:/home/xg/soft/k8s/helm-v3.6.1"
    export PATH
    

2 搭建helm私有仓库

  1. 使用nginx 起一个helm的http服务
    docker run -d --name=nginx -p 80:80  -v /home/xg/soft/k8s/helm/charts:/usr/share/nginx/html/charts nginx
    
  2. 创建并打包一个helm应用
    创建package, 需要自行修改 xgnginx/values.yaml 中的参数
    helm create xgnginx 
    打包,会生成一个tgz包
    helm package xgnginx 
    
  3. 生成库的index文件
    mkdir xgrepo
    mv xgnginx-0.1.0.tgz xgrepo/
    helm repo index xgrepo/ --url http://10.192.155.237/charts #该操作会在xgrepo目录生成index.yaml文件,该文件包含了helm库应用信息
    ls myrepo  #查看是否生成
    
  4. 将生成的index.yaml文件及charts包复制到nginx的charts目录下面
    cp xgrepo/*  /home/xg/soft/k8s/helm/charts
    
  5. 通过helm repo add 将新仓库添加到helm
    $ helm repo add xgrepo http://10.192.155.237/charts
    $ helm search repo xgnginx
    NAME          	CHART VERSION	APP VERSION	DESCRIPTION                
    xgrepo/xgnginx	0.1.1        	1.19.6     	A Helm chart for Kubernetes
    
  6. 从新的私有库中安装mychart进行测试
    $ helm install repo xgrepo/xgnginx --namespace sre-test 
    
    NAME: repo
    LAST DEPLOYED: Thu Jun 24 11:55:52 2021
    NAMESPACE: sre-test
    STATUS: deployed
    REVISION: 1
    NOTES:
    3. Get the application URL by running these commands:
      export POD_NAME=$(kubectl get pods --namesp
      ace sre-test -l "app.kubernetes.io/name=xgnginx,app.kubernetes.io/instance=repo" -o jsonpath="{.items[0].metadata.name}")
      export CONTAINER_PORT=$(kubectl get pod --namespace sre-test $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
      echo "Visit http://127.0.0.1:8080 to use your application"
      kubectl --namespace sre-test port-forward $POD_NAME 8080:$CONTAINER_PORT
    
    list 查看release
    $ helm list --all-namespaces 
    删除 release
    $ helm uninstall repo -n sre-test
    

3 chart 更新发布和案例

3.1 更新发布

  1. 更新并发布xgngin应用
    按照需求更新helm包中的配置文件,笔者更新了Chart.yaml 中的APP Version为1.19.6,同时更新了values.yaml 的image tag,更新后打包,生成新的index.yaml,并cp index.yaml 和 packge 到nginx 的charts目录.
    更新package
    helm package xgnginx
    Successfully packaged chart and saved it to: /home/xg/soft/k8s/helm/tmpdir/xgnginx-0.1.1.tgz
    helm repo index xgrepo/ --url http://10.192.155.237/charts #生成index.yaml,此时记录了 xgnginx 的两个版本
    cp xgrepo/index.yaml /home/xg/soft/k8s/helm/charts/
    cp xgrepo/xgnginx-0.1.1.tgz /home/xg/soft/k8s/helm/charts/
    
    发布到 helm repo
    $ helm repo update 
    helm search一下可以发现版本信息已经更新了
    $ helm search repo xgnginx --versions
    NAME          	CHART VERSION	APP VERSION	DESCRIPTION                
    xgrepo/xgnginx	0.1.1        	1.19.6     	A Helm chart for Kubernetes
    xgrepo/xgnginx	0.1.0        	1.16.0     	A Helm chart for Kubernetes
    
  2. 更新k8s 中的release
    $ helm upgrade test-nginx -n sre-test  xgrepo/xgnginx
    Release "test-nginx" has been upgraded. Happy Helming!
    NAME: test-nginx
    LAST DEPLOYED: Thu Jun 24 13:41:25 2021
    NAMESPACE: sre-test
    STATUS: deployed
    REVISION: 2
    NOTES:
    5. Get the application URL by running these commands:
     ......
       kubectl --namespace sre-test port-forward $POD_NAME 8080:$CONTAINER_PORT
    
  3. 发布到第三方公有云helm仓库
    有些用户可能将chart更新到阿里云的helm仓库,或者其它云厂商的仓库,此时可以使用helm-push来push应用,其安装方法如下:
    helm plugin install https://github.com/chartmuseum/helm-push
    Downloading and installing helm-push v0.9.0 ...
    https://github.com/chartmuseum/helm-push/releases/download/v0.9.0/helm-push_0.9.0_linux_amd64.tar.gz
    Installed plugin: push
    由于笔者是在本地搭建helm仓库的,因此没有测试该方法,此处给出参考文档:
    [helm-私有仓库--上传到阿里的私有仓库](https://www.cnblogs.com/huningfei/p/12705114.html)
    

3.2 helm 案例

发布一个busybox chart

1) 创建busybox
helm create xgbusybox
2)更改配置文件
1-更新: Chart.yaml
$ cat Chart.yaml 
apiVersion: v2
name: xgbusybox
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.31"
2-更新: values.yaml 
$ cat values.yaml
...
image:
  repository: busybox
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: "1.31"
  command: "sleep infinity"
...
3-更新: templates/deployment.yaml
$ cat templates/deployment.yaml
...
         imagePullPolicy: {{ .Values.image.pullPolicy }}
          command:
          - "/bin/sh"
          - "-c"
          - "sleep infinity"
...
3)生成package
helm package xgbusybox
4)生成index文件
helm repo index xgrepo/ --url http://10.192.155.237/charts
5)拷贝index和packge到nginx的charts目录
cp xgrepo/* /home/xg/soft/k8s/helm/charts/
6)更新repo
helm repo update
7)确认已经正常发布了xgbusybox chart
$ helm search repo
NAME            	CHART VERSION	APP VERSION	DESCRIPTION                
xgrepo/xgbusybox	0.1.0        	1.31       	A Helm chart for Kubernetes
xgrepo/xgnginx  	0.1.1        	1.19.6     	A Helm chart for Kubernetes
8)部署xgbusybox到k8s
helm install xgbusybox xgrepo/xgbusybox --namespace sre-test

在lens 上查看安装的app:
k8s笔记7.2--搭建私有helm仓库_第1张图片

4 常见操作和问题

4.1 常见操作

  1. 删除helm repo
    helm repo remove newrepo
    
  2. 添加bitnami repo
    helm repo add bitnami https://charts.bitnami.com/bitnami
    
  3. 拉取应用的package
    helm pull bitnami/mysql
    该操作会拉取mysql应用,在当前目录生成一个对应版本的mysql-8.6.3.tgz
    

4.2 常见问题

  1. 更新镜像版本但不更新chart版本
    解决方法:
    方法1:更新 values.yaml 中的image.tag 为新tag,如1.2.2
    方法2:helm upgrade myrelease repo/foo --set=image.tag=1.2.2

5 说明

helm 官方文档
helm-私有仓库
搭建私有helm仓库及图形界面
Helm User Guide - Helm 用户指南
helm的安装、使用以及自定义Chart
helm-upgrade-with-same-chart-version-but-different-docker-image-tag

你可能感兴趣的:(K8S,&,Docker,搭建helm私有仓库,helm,chart开发案例)