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

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:
在这里插入图片描述

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. 如果缺少 helm chart app可以在 https://artifacthub.io/ 查找

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
Helm仓库汇总
https://artifacthub.io/

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值