helm私库

本文介绍了Helm,一个用于管理和分发Kubernetes应用的包管理工具,包括其基本概念、架构、常用命令以及私有仓库的配置。重点讲解了如何创建chart、添加仓库、搜索和安装chart,以及私有仓库的搭建和管理过程。
摘要由CSDN通过智能技术生成

1 helm

1.1什么是helm

helm是k8s的包管理工具,类似于centos的yum,k8s将管理的资源都抽象成api,并且推荐使用声明方式创建,修改,删除这些对象,每个 API 对象都通过一个 yaml 格式或者 json 格式的文本来声明。这带来的一个问题就是这些 API 对象声明文本的管理成本,每当我需要创建一个应用,都需要去编写一堆这样的声明文件,helm就是管理这些api对象的工具,它把创建一个应用所需的所有 Kubernetes API 对象声明文件组合并打包在一起。并提供了仓库的机制便于分发共享,还支持模版变量替换,同时还有版本的概念,使之能够对一个应用进行版本的管理。

1.2 helm 的架构

前面我们在使用wordpress+MySQL 部署博客应用的时候,需要做许多的工作,需要每个pod创建pv 和pvc,然后分别创建每个应用的pod 及svc,整个过程非常的麻烦。 如果搭建博客所有步骤作为一个整体,放在一个文件夹里(叫做chart),以后我们直接使用这个chart 就可以把所有的操作一次性做完,这样很容易实现了一个博客应用(chart 的一个实例,叫做release),就非常的方便了。这个就类似于我们用虚拟机模板去克隆出来一台台的虚拟机,这样就省的在一台台的去安装了,这个模板就是chart,克隆出来的虚拟机就是release。 helm 实现的就是这样的功能,在互联网上存在chart 仓库(也可以自己搭建)包括了各种应用,我们需要什么应用直接拉取部署即可。 在helm 2.X 版本的时候,helm 是一种C/S 结构的应用,包括helm 客户端和tiller 服务器端,用户通过helm 客户端向tiller 服务端发送部署请求,tiller 服务端和kubernetes 的apiserver进行交互然后部署。

1.3Helm 常用命令

  • helm create:在本地创建新的 chart;

  • helm dependency:管理 chart 依赖;

  • helm intall:安装 chart;

  • helm lint:检查 chart 配置是否有误;

  • helm list:列出所有 release; helm package:打包本地 chart;

  • helm repo:列出、增加、更新、删除 chart 仓库;

  • helm rollback:回滚 release 到历史版本;

  • helm pull:拉取远程 chart 到本地;

  • helm search:使用关键词搜索 chart;

  • helm uninstall:卸载 release;

  • helm upgrade:升级 release;

2.helm仓库管理

2.1 配置国内helm源

  • master节点查看现在使用的仓库:

 [root@k8s231.com mychar]# helm repo list
 NAME            URL                                      
 azure http://mirror.azure.cn/kubernetes/charts/
  • 国内常用的仓库有:

    • 阿里云的源https://apphub.aliyuncs.com【建议用这个】

    • 微软azure 的源http://mirror.azure.cn/kubernetes/charts/

  • 添加仓库的语法:

 helm repo add 名称地址

搭建私有仓库(其他节点)

  • 10.0.0.101

我们用nginx做私库服务,首先需要确保本地80端口没有被占用,如果被占用,则先把端口对应的服务停了

 ss -ntl |grep 80
  • docker拉取镜像启动

 #创建挂载目录
 mkdir /mycharts
 docker run -dit --name= --restart=always -p 80:80 -v /mycharts:/usr/share/nginx/html/mycharts nginx

定义一个chart【master上操作】

 
#创建一个chart
helm create 

#修改chart的values.yaml文件
[root@k8s231.com helm]# sed -i '/repository/s#nginx#harbor.com/apps/apps#' web/values.yaml

#查看修改后的文件
[root@k8s231.com helm]# grep repository web/values.yaml 
  repository: harbor.com/apps/apps
  
#修改tag标签
[root@k8s231.com helm]#  sed -i '/tag:/s#""#v1#' web/values.yaml

#查看
[root@k8s231.com helm]# grep  tag: web/values.yaml
  tag: v1
  
#对这个chart 进行打包
helm package  web

#会生成一个.taz结尾的文件
[root@k8s231.com helm]# ls
web-linux  web  web-0.1.0.tgz

#给当前目录下的这个包建立索引文件,并指定私有仓库地址:
[root@k8s231.com helm]# helm repo index . --url http://10.0.0.101:80/mycharts

#把当前目录下index.yaml 和后缀为tgz 的包全部拷贝10.0.0.101:80的/mycharts 目录下
[root@k8s231.com helm]# ll
总用量 8
-rw-r--r-- 1 root root  440 8月  30 21:07 index.yaml
drwxr-xr-x 4 root root   93 8月  30 08:28 web-linux
drwxr-xr-x 4 root root   93 8月  30 15:12 web
-rw-r--r-- 1 root root 3795 8月  30 21:01 web-0.1.0.tgz

[root@k8s231.com helm]# scp index.yaml *.tgz 10.0.0.101:/mycharts
root@10.0.0.101's password: 
index.yaml                                                                          100%  440   626.1KB/s   00:00    
web-0.1.0.tgz 

#添加http://10.0.0.101:80/mycharts作为仓库:
[root@k8s231.com helm]# helm repo add myrepo http://10.0.0.101:80/mycharts
"myrepo" has been added to your repositories
#查看是否添加成功
[root@k8s231.com helm]# helm repo  list 
NAME           	URL                                      
web-azure	http://mirror.azure.cn/kubernetes/charts/
myrepo         	http://10.0.0.101:80/mycharts

#搜索web的chart
[root@k8s231.com helm]# helm search repo web
NAME                	CHART VERSION	APP VERSION	DESCRIPTION                
myrepo/web	0.1.0        	1.16.0     	A Helm chart for Kubernetes

#拉取私库chart包
[root@k8s231.com helm]# helm pull myrepo/web
[root@k8s231.com helm]# ll
总用量 4
-rw-r--r-- 1 root root 3795 8月  30 21:48 web-0.1.0.tgz

#解压chart包
[root@k8s231.com helm]# tar xf web-0.1.0.tgz 
[root@k8s231.com helm]# ll
总用量 4
drwxr-xr-x 3 root root   79 8月  30 21:48 web
-rw-r--r-- 1 root root 3795 8月  30 21:48 web-0.1.0.tgz

#安装chart
[root@k8s231.com helm]# helm install myweb web
NAME: myweb
LAST DEPLOYED: Wed Aug 30 21:51:38 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=web,app.kubernetes.io/instance=myweb" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

#验证部署的pod
[root@k8s231.com helm]# kubectl get pods -o wide
NAME                                   READY   STATUS    RESTARTS   AGE   IP           NODE                   NOMINATED NODE   READINESS GATES
myweb-web-66dc87fcd5-7jms2   1/1     Running   0          7s    10.100.1.7   k8s232.com   <none>
[root@k8s231.com 1]# curl 10.100.1.7
<h1 style='color:green;'>web apps v1 <h1>

私有仓库配置完毕。

#删除本地私有仓库地址:
[root@k8s231.com helm]# helm repo remove myrepo
"myrepo" has been removed from your repositories

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值