zoukankan      html  css  js  c++  java
  • Helm 入门指南

    Helm 为Kubernetes的软件包管理工具,Helm有两部分组成:Helm客户端、Tiller服务端,Helm三个主要部件:Chart、仓库、Release;

    Chart:为Kubernetes中应用程序所需要的资源的定义。
    仓库:为存储Helm chart的仓库,可从仓库中下载chart直接使用
    Release: Kubernetes中运行的chart实例,每个chart可多次安装,每次安装都是一个新版本;

    Helm 常见指令:

      helm search 在仓库中查找chart

      helm inspect stable/mongodb 可查看该chart的介绍信息;
      helm install stable/mongodb 可直接下载该chart并安装该chart;

    版本升级:
      helm upgrade releaseName .

      helm rollback releaseName 1 回滚到版本1

      从零开始通过helm发布Kubernetes项目:

    一、结构介绍

    初始化项目:

    helm create nginx  
    

      执行完后创建名为nginx的chart,现在查看nginx目录中的文件:

    charts:目录用于存放所依赖的子chart
    chart.yaml:为当前chart的说明文件,也可在模板中访问该文件;
    templates:目录为nginx项目的模板目录,通常会使用values.yaml配置内容进行填充,板引擎渲染此目录的文件后Tiller将渲染得到的结果 提交给Kubernetes创建响应的对象;
    values.yaml:为值文件,定义模板中需要使用的值,在templates的模板文件中将访问改值;

      在templates目录中有可以看到deployment.yaml、ingress.yaml、service.yaml文件这些为定义Kubernetes deployment、ingress、service对象的模板文件;
    NOTES.txt:为安装chart成功后的说明文件
    _helpers.tpl:模板助手文件,定义的值可在模板中使用;

    二、通过helm在Kubernetes中部署Nginx

    1、helm 初步使用

      现在删除template目录中的所有文件、清空values.yaml文件中所有内容

      部署nginx需要一个deployment控制器与对外提供服务的service,现在我们分别手动创建这个两个文件并编写相关内容;

    deployment.yaml :

     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: nginx-deployment
       labels:
         app: nginx
     spec:
       replicas: 3
       selector:
         matchLabels:
           app: nginx
       template:
         metadata:
           labels:
             app: nginx
         spec:
           containers:
           - name: nginx
             image: nginx:1.7.9
             ports:
             - containerPort: 80      
    

    service.yaml

     apiVersion: v1
     kind: Service
     metadata:
      name: nginx-service
     spec:
      selector:
        app: nginx
      type: NodePort
      ports:
      - port: 80
        nodePort: 30078
    

      此时我们在上级目录执行:helm install nginx 已经可以将nginx部署到Kubernetes中;

      但如果只是这样使用Helm,那它存在的意义也不大,既然说template目录是模板目录当然它里面的模板文件也不能只是这么使用,要让模板文件体现出它的模型性质;下面我们将使用Helm的模板等功能,让模板文件体现出他的模板性质;

    2、helm 模板
      目前为止deployment.yaml与service.yaml虽然是放在模板目录下但是完全没有体现出他的模板性质,现在我们开始这两个文件的模板化;

    模板语法基础:

      内置对象:helm中有这么这个常用内置对象:Release、Values、Chart、Files、Capabilities、Template;

    Release:此对象描述当前release,内置有:Release.Name release名称、Release.Time 发布时间等等等对面;
    Values:此对象为从values.yaml文件与用户提供的文件中传递到模板的对值对象;
    Chart:此对象为chart.yaml文件所提供的数据对象;
    Files:提供了对chart非特殊文件的访问;
    Capabilities:这提供了Kubernetes集群信息的访问;
    Template:正在执行的当前模板信息

      下面我们通过helm内置对象Values来实现deployment.yaml、service.yaml文件的模板化,Values对象的取值范围:
    1、当前chart的values.yaml文件;
    2、如当前为子chart,则来自父chart的values.yaml文件;
    3、在helm install或helm update执行是通过-f参数传递的文件;
    4、通过helm install 时通过 –set设置的值;

      如values.yaml文件中存在replicaCount: 1对象,则在模板文件中通过{{ .Values.replicaCount }}即可访问到values.yaml文件定义的对象值1;

      通过_helpers.tpl可定义命名模板,下面定义模板deploy.name

     {{- define "deploy.name" -}}
     demo-deploy-nginx
     {{- end }}
    

      其中:{{ - 表示删除左侧的空格 - }} 删除右侧的空格
      此时可在模板文件中通过{{ template "deploy.name" . }} 引用该命名模板;

    实现模板化:

      提取需要模板化的数据,这里提取出deployment对象的name、labels、replicas、matchLabels、template的labels、template spec的name、image;service对象的name、selector labels、type、port、nodePort等配置;
      我们再从提取出来的配置中挑选出name类与labels类配置定义为命名模板存放在_helpers.tpl文件中,其他的配置项定义在Values.yaml文件中;

    _helpers.tpl文件内容如下:存放了deploy名称、service名称、deploy的lables、deploy中pod的lables;

    {{- define "deploy.name" -}}
     demo-deploy-nginx
    {{- end }}
    
    {{- define "service.name" -}}
    demo-service-nginx
    {{- end }}
    
    {{- define "labels" -}}
    demo: nginx
    {{- end}}
    
    {{- define "deploy.labels" -}}
    deploy: nginx
    {{- end}}
    

    values.yaml 文件,此文件定义了副本数、镜像名称与版本、service类型、端口等:

    # 定义模板默认值
    replicaCount: 1
    image:
      repository: nginx
      tag: 1.7.9
    
    service:
      type: NodePort
      port: 80
      nodePort: 30078
    

      值文件定义好了此时需要在模板deployment、service文件中引用上述两个文件所定义的值,下面开始重构deployment.yaml与service.yaml文件:

    service.yaml文件:

    apiVersion: v1
    kind: Service
    metadata: 
     name: {{ template "service.name" . }}
    spec: 
     selector:
      {{ template "labels" . }}
     type: {{ .Values.service.type }}
     ports: 
     - port: {{ .Values.service.port }}
       nodePort: {{ .Values.service.nodePort }}
    

    deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata: 
      name: {{ template "deploy.name" . }}
      labels: 
        {{ template "deploy.labels" .}}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
       matchLabels:
          {{ template "labels" . }}
     template: 
        metadata:
          labels:
            {{ template "labels" . }}
        spec:
          containers:
          - name: {{ .Chart.Name}}
            image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            ports:
            - containerPort: 80
    

      模板文件编写好后可以再重新使用Helm install部署nginx试试,执行前先执行helm delete running-chipmunk卸载掉之前安装的;

    参考资料: https://docs.helm.sh/

    文章首发地址:Solinx
    http://www.solinx.co/archives/1247

  • 相关阅读:
    Redis分布式锁解决抢购问题
    Linux查看进程,端口,服务路径等
    执行jar包,输出信息到文件
    查看linux服务器信息
    IDEA将项目打包为指定class文件的jar
    RSA加密-解密以及解决超长内容加密失败解决
    win10 Snipaste 截图软件
    线程池参数详解
    本地连接Linux工具
    python安装
  • 原文地址:https://www.cnblogs.com/softlin/p/9824179.html
Copyright © 2011-2022 走看看