zoukankan      html  css  js  c++  java
  • Kubernetes之Helm认识

    Helm介绍

    基本方式部署应用流程

    1. 编写或者导出资源编排文件yaml

    2. deployment部署pod

    3. service暴露服务

    4. Ingress服务实现域名到Service的路由

    • 缺陷

    • 如果我们部署的是微服务项目,可能是10多20个或者更多的服务,那么每套服务都需要一套yaml文件

    • 这样下来,我们需要维护的yaml文件就是一大堆

    • 而且如果我们升个级,那就非常不方便了

    Helm有什么作用

    • 可以使用Helm把上面我们说到的微服务部署yaml作为一个整体管理

    • 还可以实现yaml的高效服用

    • 使用Helm应用级别的版本管理,对于版本升级和回滚操作相当简单了起来

    Helm的简单介绍

    • Helm官网

    • Helm是Kubernetes的一个包管理工具,有点像yum可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。

    Helm的三个重要概念

    • helm

      • 是Helm的命令行客户端工具,类似于kubectl

    • Chart

      • 打包的yaml集合

    • Release

      • 基于 Chart 的部署实体 ,一个 chart 被 helm 运行后将会生成对应的一个Release,相当于就是针对Chart的版本管理

    Helm的版本V2 -> V3

    • 2019年年底发布了V3版本,发生较大的变化

      • 今天我们的学习目标也是V3版本

    • 最明显的变化就是Kubernetes中Tiller的剔除

    • Release 名称可以在不同命名空间重用

    • 支持将 Chart 推送至 Docker 镜像仓库中

    • 使用 JSONSchema 验证 chart values

    • ......

    Helm的安装

    Helm安装

    • Helm V3 下载 [提取码:6666]

    • 解压即可:tar -zxvf helm-v3.0.0-linux-amd64.tar.gz

    • 得到解压目录并进入其内,移动一个脚本到/usr/bin/目录下即可

      • mv ./helm /usr/bin/

    • 命令行键入helm,出现helm帮助文档,安装就此完成,嘻嘻嘻嘻嘻

    配置helm仓库

    Helm快速部署一个应用

    这儿我们就演示一下快速部署应用的基本操作流程

    下载Chart

    • helm install ui stable/weave-scope

      • 下载stable/weave-scope资源包,取名为ui

      • 其实这个过程就是在下载所有关联的资源编排文件yaml,又叫下载Chart

      • 然后helm会自动给我们创建pod并部署

    • 查看所有下载的Chart

      • helm list

    • 查看某个Chart的详细信息:helm status name ,列:

      • helm status ui

    pods以及service变化

    • 然后我们就可以去k8s中看看pods是否有什么变化

      • kubectl get pods

      • kubectl get service

    更改service类型

    • 但是此时我们发现helm为我们创建的Service的类型是ClusterIP类型,是不对外暴露的

      • 我们需要将其修改一下:kubectl edit service serviceName,进入到这个Service的资源编排文件中,如下所示

        • kubectl edit service ui-weave-scope

    • 修改默认ClusterIP为NodePort即可

    • 我们再次查看Service,如下所示

      • 发现已经生效,这个时候我们就可以通过浏览器随意节点IP:32641访问了

    使用自定义chart部署应用

    helm命令初始化Chart

    如果我们想自定义Chart,则需要使用helm的命令进行初始化一个基本的环境出来,如下所示

    • 创建一个自定义chart,命名为:mychart

      • helm create mychart

      • 会在当前目录生成一个mychart的目录,这个目录可以随便放置

    • 然后我们进入该目录,展示其下所有文件夹和文件:

      • charts目录

        • 目录里存放这个 chart 依赖的所有子 chart

        • 这个我们无需理会

      • Chart.yaml

        • 用于描述这个 Chart 的基本定义信息, 包括名字、 描述信息以及版本等

      • templates目录

        • 目录里面存放所有 yaml 模板文件

        • 我们自定义的yaml,也就是放在该目录下

      • values.yaml

        • 用于存储 templates 目录中模板文件yaml用到变量的值

        • 相当于环境变量的抽取,可以在这里定义环境变量,然后在templates其下的资源编排文件中访问使用

        • helm实现资源编排yaml的高效复用的途径

    自定义资源编排文件yaml

    • 我们首先进入templates目录,清空其下所有的文件夹和文件,便于操作清晰

      • rm -rf ./templates/*

    • 导出Deployment资源编排文件

      • kubectl create deployment customchartdeployment --image nginx --dry-run -o yaml > customchartdeployment.yaml

    • 导出Service的资源编排文件

      • 因为我们会为上面的customchartdeployment ,而创建Service

      • k8s不会为不存在的deployment创建Service

      • 所以我们先将customchartdeployment 给部署了才能导出Service的资源编排文件

        • kubectl create deployment customchartdeployment --image nginx

        • kubectl expose deployment customchartdeployment --port 80 --target-port 80 --type NodePort --dry-run -o yaml > customchartexpose.yaml

      • 然后我们就得到了两个资源资源编排文件

        • customchartdeployment.yaml

        • customchartexpose.yaml

      • 然后我们还得把那个因为想导出Service的资源编排文件而创建的pod删掉

        • kubectl delete deployment customchartdeployment

    安装chart.

    在上面的操作中,我们已经得到两个资源编排文件,下面我们可以使用helm进行安装部署了

    • 下面我们开始安装自定义chart,并自定义名称为:custonchart

      • helm install custonchart /my_helm/mychart/

    查看效果

    • 由此可见,安装自定义chart已经实现服务开放

    chart的版本升级

    有时候我们会修改chart的某些资源信息,然后实现服务的版本升级,此时该如何操作呢

    • 之前我们有说到Release的这个概念,chart的创建就会创建一个Release

    • 当我们使用升级命令时,这个时候Release就开始迭代了

    • 使用命令:helm upgrade 所升级的chartName 所升级的chart所在目录

    Values实现yaml的高效服用

    我们在开篇介绍Helm的时候就介绍过Helm可以实现yaml的高效复用

    • chart中的诸多资源编排文件yaml,大部分的结构格式是相同的,只有少部分的值是不同的,比如

      • kind、label、name、selector、image、port、replicas......等等

    • 我们可以通过以下方式实现高效复用

    • 资源编排yaml,我们通过给他传递参数,进行动态的模版渲染,生成真实的资源编排文件yaml

    • 也就是通过我们上面说的自定义chart操作中生成的values.yaml实现此功能

    • 我们在values.yaml中定义文件的全局变量,template中的yaml读取访问生成yaml即可

    • 简答介绍一下Values

    • Values你可以看作是该chart的一个环境变量对象,为templates中的模版提供值

    • Values这个对象的值可以来源于四个方向

      • chart包中的values.yaml文件 (这个是默认的,无该文件,无需理会)

      • 父chart包中的Values.yaml(用户自定义Values操作点,可覆盖上面的values.yaml)

      • 通过helm install 或者help upgrade命令中,用户传的参数,实现参数封装

        • -f

        • --values

      • 通过 --set 参数传入值进行参数封装,

        • helm upgrade custonchart --set replicas=5 /my_helm/mychart/

        • 可以覆盖用户操作的Values.yaml中提供的值

    vlues.yaml定义全局变量

    • vim ./values.yaml

    资源编排yaml访问全局变量

    • 修改资源编排文件

      • 在环境变量中除了Values对象可以使用外,还可以使用Release对象

      • Release对象也是Helm的一个内置对象

      • release表达式release表达式含义
        {{.Release.Name}} release 名字
        {{.Release.Namespace}} release 命名空间
        {{.Release.Service}} release 服务的名称
        {{.Release.Revision}} release 修订版本号, 从 1 开始累加

    试运行-调试

    • Helm 也提供了--dry-run --debug 调试参数, 帮助你验证模板正确性

    • install 时候带上这两个参数就可以把渲染的资源清单打印出来, 不会真正的去部署一个 release

    • 下面我们来调试上面修改的 chart 包

      • helm install --dry-run valuestest /my_helm/mychart/

    • 可以看看我们生成的这个资源编排文件是否正常,

      • 下面我们就开始正式安装这个chart

    • 首先解释一下上面我的操作步骤

      1. 直接安装我们的chart : helm install valuestest /my_helm/mychart/

        1. 发现报错,查看报错日志,某个参数是错误的,定位到参数为 --images没有赋值

      2. 编辑customchartdeployment.yaml,发现是表达式写错了,少写了一个s

        1. 修正{{.Values.image}} 为 {{.Values.images}}

        2. 再次尝试安装,发现报错名称已经被使用

      3. 再次尝试改变名字安装,成功

      4. 查看helm本地库,发现即使错误的安装也会生成chart,

      5. 查看k8s,发现pod部署成功

        1. 发现没有指定镜像的的错误helm包,没有部署pod,

      6. 查看k8s,发现service部署成功

        1. 发现没有指定镜像的的错误helm包,没有部署pod,但却部署了service

      • 最后浏览器测试发现

        • 两个端口的nginx服务都是正常开启的,迷惑操作之一???

    .

     

  • 相关阅读:
    104.Maximum Depth of Binary Tree
    101.Symmetric Tree
    100.Same Tree
    9.Palindrome Number
    图形化编程娱乐于教,Kittenblock实例,麦克风的录音
    图形化编程娱乐于教,Kittenblock实例,老外问路
    图形化编程娱乐于教,Kittenblock实例,解说员的解说
    图形化编程娱乐于教,Kittenblock实例,甲壳虫画画
    图形化编程娱乐于教,Kittenblock实例,角色移到某坐标
    图形化编程娱乐于教,Kittenblock实例,角色独舞和中文朗读
  • 原文地址:https://www.cnblogs.com/msi-chen/p/14347812.html
Copyright © 2011-2022 走看看