zoukankan      html  css  js  c++  java
  • 使用Helm管理Kubernetes应用

    Helm是Kubernetes中安装应用的工具。这里介绍如何使用自己创建的Helm chart实现Kubernetes应用的安装。

    一 安装Helm

    通过下面的安装脚本安装:

    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

    安装好后,查看版本,这里安装的是3.4的版本:

    $ helm version --short
    v3.4.2+g23dd3af

    二 通过Helm Chart安装应用

    1 创建Chart和template文件

    创建相应的目录和文件,如下:

    $ tree
    .
    `-- my-app
        |-- Chart.yaml
        `-- templates
            `-- deployment.yaml
    
    2 directories, 2 files

    Chart.yaml是应用安装的入口文件,具体内容如下:

    apiVersion: v1
    name: my-app
    version: 0.1.0
    appVersion: 1.0.0
    description: My app with flask chart

    deployment.yam 可以通过kubectl命令生成:

    kubectl create deploy my-app 
        --image gcr.io/wh-host/hello:1.0.0 
        --dry-run=client -o yaml > templates/deployment.yaml

    修改配置如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: my-app
      name: my-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - image: gcr.io/wh-host/hello:1.0.0
            name: app

    2 通过helm安装应用

    安装

    helm install  my-app .

    通过下面的命令查看安装情况:

    $ helm list
    NAME   NAMESPACE    REVISION    UPDATED       STATUS      CHART         APP VERSION  
    my-app default      1           2020-12-30    deployed    my-app-0.1.0  1.0.0

    三 通过helm管理应用

    1 通过helm更新应用

    A 添加svc配置文件

    创建Service:

    kubectl expose deploy my-app --port 80  
        --dry-run=client -o yaml > templates/service.yaml

    具体内容如下:

    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: my-app
        app.kubernetes.io/managed-by: Helm
      name: my-app
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: my-app

    B 更新Chart文件

    更新Chart.yaml

     
    apiVersion: v1
    name: my-app
    version: 0.2.0
    appVersion: 1.0.0
    description: My app with flask chart

    此时目录结构如下:

    $ tree
    .
    `-- my-app
        |-- Chart.yaml
        `-- templates
            |-- deployment.yaml
            `-- service.yaml

    C 采用helm更新应用

    更新应用:

    helm upgrade my-app .

    查看:

    $ helm list
    NAME     NAMESPACE  REVISION  UPDATED     STATUS     CHART           APP VERSION
    my-app   default    2         2020-12-30  deployed   my-app-0.2.0    1.0.0

    2 采用helm rollback应用

    Rollback:

    helm rollback my-app 1
    Rollback was a success! Happy Helming!
    
    helm rollback my-app 2
    Rollback was a success! Happy Helming!

    3 通过helm删除应用

    删除:

    helm delete my-app
    release "my-app" uninstalled

    四 Helm中参数设置

    在应用管理中,参数需要通过配置文件进行管理。在Helm中可以通过配置文件进行参数管理,也可以简单的通过命令行进行参数的设置。

    1 通过values.yaml设置参数

    A 参数文件

    增加values.yaml文件:

     
    replicaCount: 1
    image: gcr.io/wh-host/hello
    imageVersion: 1.0.0

    B 部署文件中引用参数

    更改deployment文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: my-app
      name: my-app
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - image: {{ .Values.image  }}:{{ .Values.imageVersion  }}
            name: app
     

    注意,这里参数中Values的V是大写的。

    C 目录结构

    此时目录结构如下:

    $ tree
    .
    |-- Chart.yaml
    |-- templates
    |   |-- deployment.yaml
    |   `-- service.yaml
    `-- values.yaml
    
    1 directory, 4 files

    2 通过命令行设置参数

    helm管理应用中,可以用指定参数的方式,设置参数:

    helm install my-app . --set replicaCount=3

    此时查看pod情况,为手工设置的3个:

     
    $ kubectl get pod
    NAME                      READY   STATUS    RESTARTS   AGE
    my-app-858dc86f8c-bs7lf   1/1     Running   0          10s
    my-app-858dc86f8c-cpl6q   1/1     Running   0          10s
    my-app-858dc86f8c-s2q2t   1/1     Running   0          10s

    3 指定参数文件

    采用指定参数文件的模式:

     
    $ helm inspect values .
    replicaCount: 1
    image: gcr.io/wh-host/hello
    imageVersion: 1.0.0
    
    $ helm inspect values . > /tmp/values.yaml
    
    
    $ helm delete my-app
    release "my-app" uninstalled
    
    
    $ helm install my-app . --values /tmp/values.yaml

    更新采用参数的方式:

    helm upgrade my-app . --set replicaCount=2

    4 参数文件的多级管理

    参数文件为方便管理,可以采用多级参数的管理模式。具体方法如下。

    更改values.yaml文件:

     
    replicaCount: 1
    image: gcr.io/wh-host/hello
    imageVersion: 1.0.0
    service:
            type: LoadBalancer

    更改deployment.yaml文件:

    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: my-app
        app.kubernetes.io/managed-by: Helm
      name: my-app
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: my-app
      type: {{ .Values.service.type  }}
    status:
      loadBalancer: {}

    更新配置:

    $ helm upgrade my-app .

    可以看到,Service开始创建LB,并生成External-IP:

    $ kubectl get svc
    NAME         TYPE          CLUSTER-IP  EXTERNAL-IP    PORT(S)        AGE
    kubernetes   ClusterIP     10.48.0.1   <none>         443/TCP        28h
    my-app       LoadBalancer  10.48.9.34  35.223.27.242  80:32353/TCP   4m45s

    五 总结

    通过helm可以非常方便的管理Kubernetes的应用。

  • 相关阅读:
    oracle length and lengthb
    Oracle对列的操作总结
    配置Spring管理的bean的作用域
    Spring的三种实例化Bean的方式
    编码剖析Spring管理Bean的原理
    SpringMVC学习(十二)——SpringMVC中的拦截器
    SpringMVC学习(十一)——SpringMVC实现Resultful服务
    SpringMVC学习(十)——SpringMVC与前台的json数据交互
    SpringMVC学习(九)——SpringMVC中实现文件上传
    SpringMVC学习(八)——SpringMVC中的异常处理器
  • 原文地址:https://www.cnblogs.com/hengwei/p/14212049.html
Copyright © 2011-2022 走看看