zoukankan      html  css  js  c++  java
  • kubernetes系列(十六)

    1. helm简介

    1.1 为什么需要helm

    在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment,service,configMap等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂.

    helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理

    1.2 helm中几个概念

    Helm可以理解为Kubernetes的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念

    • Chart: 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义

    可以理解为docker的image

    • Release: 在Kubernetes集群上运行的 Chart的一个实例。在同一个集群上,一个 Chart可以安装很多次。每次安装都会创建一个新的release

    可以理解为docker的container实例

    • Repository: 用于发布和存储 Chart 的仓库。

    1.3 helm用途

    做为Kubernetes的一个包管理工具,Helm具有如下功能:

    • 创建新的chart
    • chart打包成tgz格式
    • 上传chartchart仓库或从仓库中下载 chart
    • Kubernetes集群中安装或卸载chart
    • Helm管理安装的chart的发布周期

    2. helm安装

    • 注意:这里安装的是helm v3.2.4,如需下载更新的版本,可以至github官方repo选择

    https://github.com/helm/helm/tags

    # 如无需更换版本,直接执行下载
    wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
    
    # 解压
    tar -zxvf helm-v3.2.4-linux-amd64.tar.gz
    
    # 进入到解压后的目录
    cd linux-amd64/
    
    # 赋予权限
    chmod a+x /usr/local/bin/helm
    
    # 查看版本
    helm version
    

    3. helm的基本使用

    • 注意这里的使用是针对Helm v3,因为v3版本和v2某些命令方面差距蛮大的,不完全兼容!!所以针对v2的操作这里就不赘述了

    3.1 安装chart仓库里面的chart

    可以直接使用官方的chart仓库或者其他仓库来安装一些chart

    https://hub.helm.sh

    • 下面以官方仓库的一个redis为例

    https://hub.helm.sh/charts/choerodon/redis

    # 添加仓库
    helm repo add choerodon https://openchart.choerodon.com.cn/choerodon/c7n
    
    # 安装
    helm install choerodon/redis --version 0.2.5
    

    安装完成! 有没有很简单!!

    3.2 创建自定义的chart

    这一节介绍以下如何自定义一个chart,并应用与平时项目中

    3.2.1 文件目录结构

    .
    ├── Chart.yaml
    ├── templates
    |   ├── deployment.yaml
    |   └── service.yaml
    ├── values.yaml
    

    一个基本的自定义chart的文件目录结构大概是如上:

    • Chart.yaml: 定义当前chart的基本metadata, 比如name,tag啥的
    • templates: 这个文件夹下放当前chart需要的一些yaml资源清单
      • 资源清单支持变量模版语法
    • values.yaml: 定义变量,可被template下的yaml资源清单使用

    3.2.2 自定义chart的示例

    第一步: 准备自定义chart相关文件

    # 1. 新建一个文件夹demo存放chart
    mkdir demo && cd demo && mkdir templates
    
    # 2. 新建Chart.yaml
    cat << EOF > Chart.yaml
    name: hello-world
    version: 1.0.0
    EOF
    
    # 3. 新建./templates/deployment.yaml
    # 注意image部分使用了变量的模板语法,可以动态插入
    cat << EOF > ./templates/deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tocgenerator-deploy
      labels:
        app: tocgenerator-deploy
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tocgenerator-server
      template:
        metadata:
          labels:
            app: tocgenerator-server
        spec:
          containers:
            - name: tocgenerator
              image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
              imagePullPolicy: IfNotPresent
              ports:
                - containerPort: 80
    EOF
    
    # 4. 新建./templates/service.yaml
    cat << EOF > ./templates/service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: tocgenerator-svc
    spec:
      type: NodePort
      selector:
        app: tocgenerator-server
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
        nodePort: 30075
    EOF
    
    # 5. 新建values.yaml
    cat << EOF > values.yaml
    image:
      repository: lzw5399/tocgenerator
      tag: '951'
    EOF
    

    第二步: 使用上面的自定义chart

    # 将chart实例化成release
    # 格式:helm install [RELEASE-NAME] [CHART-PATH]
    helm install testname .
    
    # 查看release
    helm ls
    
    # 安装成功!!
    

    3.3 helm的基本操作补充

    3.3.1 查看release

    # 列出已经部署的Release 
    helm ls 
    
    # 查询一个特定的Release的状态 
    helm status <RELEASE_NAME> 
    
    # 查看被移除了,但保留了历史记录的release
    helm ls --uninstalled
    

    3.3.2 安装release

    # 安装
    helm install <RELEASE-NAME> <CHART-PATH>
    
    # 命令行指定变量
    helm install --set image.tag=233 <RELEASE-NAME> <CHART-PATH>
    

    3.3.3 更新release

    # 更新操作, flag是可选操作
    helm upgrade [FLAG] <RELEASE> <CHART-PATH>
    
    # 指定文件更新
    helm upgrade -f myvalues.yaml -f override.yaml <RELEASE-NAME> <CHART-PATH>
    
    # 命令行指定变量
    helm upgrade --set foo=bar --set foo=newbar redis ./redis
    

    3.3.4 卸载release

    # 移除Release
    helm uninstall <RELEASE_NAME>
    
    # 移除Release,但保留历史记录
    # 可以通过以下查看:helm ls --uninstalled
    # 可以通过以下回滚:helm rollback <RELEASE> [REVISION]
    helm uninstall <RELEASE_NAME> --keep-history
    

    3.3.5 回滚release

    # 更新操作, flag是可选操作
    helm upgrade [FLAG] <RELEASE> <CHART-PATH>
    
  • 相关阅读:
    【函数】wm_concat包的订制
    【云和恩墨】性能优化:Linux环境下合理配置大内存页(HugePage)
    【技巧】如何使用客户端发布BLOG+如何快速发布微信公众号文章
    【故障处理】队列等待之TX
    【转载】TX
    【转载】Linux磁盘管理:LVM逻辑卷管理
    【索引】Oracle之不可见索引和虚拟索引的比对
    小麦苗微信公众号文章链接地址
    Oracle 11g新特性direct path read引发的系统停运故障诊断处理
    常识之外:全表扫描为何产生大量 db file sequential read 单块读?
  • 原文地址:https://www.cnblogs.com/baoshu/p/13296659.html
Copyright © 2011-2022 走看看