k8s包管理工具helm简介及基本使用

一、helm是什么?有哪些版本 ?有什么作用?

 helm是k8s的包管理工具,类似于centos 的yum;

 当前版本有helm2、helm3 相对来说helm3功能更加完善,使用更加方便

主要作用是相较于传统的k8s部署应用需要手工编排yaml文件(比如Deployment.yml、service.yml、ingress.yml等),使用helm可以快速部署应用。

helm3与helm2 的区别在于helm3删除了tiller、支持release在不同的命名空间重用,可以将chart推送到私有仓库中。

官方详细介绍:Helm | 快速入门指南

二、helm的核心概念

helm:客户端命令行工具,用于chart的创建、打包、发布与管理

chart: helm管理的包,包含k8s集群内部运行的应用程序,工具或服务的资源定义。相似于centos yum所管理的rpm包。是一系列资源文件的集合

repository: 用于存放chart的地方,类似于yum仓库。可以使用官方的仓库,也可以自定义私有仓库。

release: 是 k8s集群中运行的chart实列,chart可以在k8s集群中反复部署,每次部署都会创建一个新的release。

三、如何安装helm

1 安装helm客户端

heml软件包获取网址

https://github.com/helm/helm/releases (在这个网址下获取自己想要的安装包,下载极慢,耐心等待)自己有的,使用自己下载。解决办法是下面这个,使用其他地址下载

https://repo.huaweicloud.com/helm/

  wget https://repo.huaweicloud.com/helm/v3.5.4/helm-v3.5.4-linux-amd64.tar.gz

tar xf helm-v3.5.4-linux-amd64.tar.gz

mv linux-amd64 helm

mv  helm/helm   /usr/local/bin/

到这helm已经安装完毕,接下来是helm的基本使用。

四、配置chart仓库

微软仓库(http://mirror.azure.cn/kubernetes/charts/)

阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )

推荐仓库(https://charts.bitnami.com/bitnami  )

添加仓库  :helm repo add 自定义仓库名 仓库地址  (仓库地址就是上面几个网站地址)

删除仓库 : helm repo remove 仓库名    

更新仓库 : helm repo update   

查看仓库 : helm repo list

搜索仓库的chart: helm  search repo chart名称

五、快速部署应用(以nginx为例测试)

这里是已经在添加仓库的条件下执行

1、根据需要搜索自己需要的chart(以nginx为例子)

[root@master01 ~]# helm search repo nginx

2、安装对应仓库的chart

[root@master01 ~]# helm install nginx bitnami/nginx(说明helm install 自定义release名  仓库名/chart名 )

3、查看安装的release

[root@master01 ~]# helm list

[root@master01 ~]# helm status nginx

4、查看k8s集群pod与svc情况,发现一个nginx pod已经运行,同时nginx service也生成,svc的类型为LoadBalancer,可以使用kubectl edit svc 命令修改。尽管service类型为LoadBalancer,但是LoadBalancer也只是在NodePort的基础上增加外部负载均衡器,我仍然可以使用NodePort的方式访问,可以看到nginx的首页欢迎页面

k8s包管理工具helm简介及基本使用_第1张图片

 k8s包管理工具helm简介及基本使用_第2张图片

小总结:正常情况下,如果要使用k8s部署一个简单的web服务作测试,最少需要自己手动编排deployment.yml文件,service.yml文件。本案列中只是helm install命令装了一个chart包,就实现了相同的效果。相对来说不那么繁琐

  1. 卸载安装的release实列,发现对应的pod与svc已经消失

k8s包管理工具helm简介及基本使用_第3张图片

六、自定义chart部署应用

1、创建自定义chart并查看目录结构

  [root@master01 ~]# helm create nginx   #创建一个名为apache的自定义chart

  [root@master01 ~]# tree nginx     #查看自定义chart的目录结构

k8s包管理工具helm简介及基本使用_第4张图片

charts目录,默认为空,包含chart的子目录,暂时用不到。

Chart.yml 是自定义chart的元数据,即chart的一些属性信息,包括chart的名称,描述,类型,版本与应用版本

values.yml 包含了chart的所有可配置项及其默认值,在安装chart时传递的配置项会覆盖默认值

templates目录,这个目录中包含的是k8s资源申明的模板文件,在安装时,k8s会将模板文件与配置项的值结合起来,得到k8s的资源定义,并应用到k8s上,

  1. 编辑文件

Chart.yml存放的是chart的描述信息,可以不用更改

这里是以nginx为例子,删除或者移动template模板下的所有资源文件到某个目录,原因在于始终不是自己写的,还需要将里面的变量与values.yml文件里面的值意义对应,有点烦琐。还不如自己手动命令创建资源文件再修改。

[root@master01 ~]# helm create nginx

[root@master01 ~]# rm -rf nginx/templates/*

创建nginx.deployment.yml及nginx.service资源文件

[root@master01 ~]# kubectl  create  deployment  nginx-deployment --image=nginx

[root@master01 ~]# kubectl  expose deployment  nginx-deployment --port=80 --target-port=80  --type=NodePort --dry-run -o yaml>>/root/nginx/templates/nginx.service.yml

[root@master01 ~]# kubectl  create  deployment  nginx-deployment --image=nginx:v1.23.3 --dry-run -o yaml >>/root/nginx/templates/nginx.deployment.yml

[root@master01 ~]# kubectl  delete  deployments.apps nginx-deployment

此时相应的deployment资源文件及service文件已经在templates模板目录下生成

[root@master01~]# helm lint nginx # 使用命令检测是否有语法错误,没有错误才可以安装或者打包

k8s包管理工具helm简介及基本使用_第5张图片

安装自定义chart

[root@master01 ~]# helm install mynginx nginx  

#mynginx是自定义chart名称,nginx是自定义chart所在的目录

查看pod及svc情况

k8s包管理工具helm简介及基本使用_第6张图片

如果chart内容有更新,直接使用 helm upgrade chart名称进行更新

使用helm实现资源文件的复用,通过在values.yml文件中定义变量及值,在templates模板下的资源文件中引用变量

总的来说,服用简单的deployment文件或者service文件,只是名称,镜像、标签、版本、端口、副本数量等常见配置不一样,其他地方资源文件并没有什么差异。

变量的引用 {{.Values.变量名称}}

删除之前创建的release

[root@master01 ~]# helm list

[root@master01 ~]# helm uninstall mynginx

仍然以nginx为例子

查看编辑的deployment、service及values.yml文件

[root@master01 ~]# cat nginx/templates/nginx.deployment.yml

apiVersion: apps/v1

kind: Deployment

metadata:

  creationTimestamp: null

  labels:

    app: nginx-deployment

  name: {{.Release.Name}}-deployment

spec:

  replicas: 1

  selector:

    matchLabels:

      app: {{.Values.label}}

  strategy: {}

  template:

    metadata:

      creationTimestamp: null

      labels:

        app: {{.Values.label}}

    spec:

      containers:

      - image: {{.Values.image}}

        name: nginx

        resources: {}

status: {}

[root@master01 ~]# cat nginx/templates/nginx.service.yml

apiVersion: v1

kind: Service

metadata:

  creationTimestamp: null

  labels:

    app: {{.Values.label}}

  name: {{.Release.Name}}

spec:

  ports:

  - port: 80

    protocol: TCP

    targetPort: 80

  selector:

    app: {{.Values.label}}

  type: NodePort

status:

  loadBalancer: {}

[root@master01 ~]# cat nginx/values.yaml

image: nginx

label: nginx

测试多次安装releae实列

[root@master01 ~]# helm install test-nginx  nginx

[root@master01 ~]# helm install mynginx nginx

查看pod,svc

k8s包管理工具helm简介及基本使用_第7张图片

七、使用harbor仓库作为 helm chart 仓库

第一步:安装harbor仓库,在安装harbor仓库的时候加上--with-chartmuseum选项,即可以使用harbor作为chart仓库

habor仓库的安装参考:

http与https两种方式部署harbor私有仓库_xhredeem的博客-CSDN博客_https nodeport部署harbor

# 这里在 harbor 服务器上操作

# cd /usr/local/harbor/

# ./install.sh --with-chartmuseum

第二步:安装helm插件(官网下载地址如下,我下载了0.10.1版本并上传到自己机器)

Releases · chartmuseum/helm-push · GitHub

查看helm插件的环境变量,helm插件的位置应当位于/root/.local/share/helm/plugins下

k8s包管理工具helm简介及基本使用_第8张图片

创建目录并解压

[root@master01 ~]# mkdir -p /root/.local/share/helm/plugins/helm-push

[root@master01 ~]# cp helm-push_0.10.1_linux_amd64.tar.gz /root/.local/share/helm/plugins/helm-push

[root@master01 ~]# cd /root/.local/share/helm/plugins/helm-push

[root@master01 helm-push]# tar xf helm-push_0.10.1_linux_amd64.tar.gz

查看helm插件是否安装成功

[root@master01 helm-push]# helm plugin list

k8s包管理工具helm简介及基本使用_第9张图片

第三步:在harbor仓库新建自定义名称的新建项目并添加为helm私有仓库(这里我自定义mychart新建项目)

k8s包管理工具helm简介及基本使用_第10张图片

[root@master01 helm-push]# helm repo add  chartrepo --username=admin --password=Harbor12345 http://192.168.11.138:80/chartrepo/mychart

harbor的用户名密码以及chartrepo是必须的

第五步:上传自定义chart到harbor私有仓库(注意使用cm-push不要使用push)

打包自定义chart包

[root@master01 ~]# helm package nginx

将自定义chart包推送到仓库

[root@master01 ~]# helm-cm-push nginx-0.1.0.tgz chartrepo

查看harbor仓库已经推送成功

k8s包管理工具helm简介及基本使用_第11张图片

推送成功以后在仓库搜索并没有发现chartrepo仓库下又自定义chart,是因为没有更新仓库

k8s包管理工具helm简介及基本使用_第12张图片

更新仓库再次查看,在第二行可以看到上传到自定义仓库chartrepo的chart,名为chartrepo/nginx

[root@master01 ~]# helm repo update

k8s包管理工具helm简介及基本使用_第13张图片

删除当前自定义nginx chart压缩包,测试从自定义仓库拉取

[root@master01 ~]# rm -rf nginx-0.1.0.tgz

拉取chart压缩包到本地,查看目录下已经有nginx的chart压缩包

[root@master01 ~]# helm pull chartrepo/nginx

[root@master01 ~]# ls | grep nginx-0.1.0.tgz

你可能感兴趣的:(kubernetes,docker,运维,云原生)