zoukankan      html  css  js  c++  java
  • k8s-学习笔记15-helm

    Helm 从入门到实践 - 肖祥 - 博客园 (cnblogs.com)

    helm3 - cjw1219 - 博客园 (cnblogs.com)

    k8s的yaml文件是不支持变量的,而一批服务,是大部分配置一样,只有少部分是不一样的。

    我之前都是用文本编辑器去全局替换的,很二。

    我的诉求就是有一个基础模板,然后不同的服务传入不同的变量,这样对于yaml的管理就方便很多

    helm:变量放在一个文件里,然后yaml去read这些变量,然后渲染到yaml里 

    我们在 k8s 中部署一个应用,通常面临以下几个问题:

    • 如何统一管理、配置和更新这些分散的 k8s 的应用资源文件
    • 如何分发和复用一套应用模板
    • 如何将应用的一系列资源当做一个软件包管理

    HELM安装

    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
    

      

    helm install 普通yaml文件

    # 创建一个名为nginx的配置,然后把默认生成的template下的文件删掉
    helm create nginx
    

      

    # 生成nginx yaml到template目录
    kubectl create deployment  web --image=nginx --dry-run -o yaml > deployment.yaml
     kubectl expose deployment web --port=80 --target-port=80 --dry-run -o yaml > service.yaml
    

      

    # 使用helm安装,它就把template下的deployment和service都安装了。但这里没有变量
    helm install web /root/nginx/
    

      

    helm install 使用变量

    Chart.yaml

    apiVersion: v2
    name: nginx-test
    description: A Helm chart for Kubernetes
    type: application
    version: 0.1.0
    appVersion: "1.16.0"
    

      

    values.yaml

    replicas: 2
    image: nginx
    imageTag: 1.17
    

      

    templates/dp.yaml

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: {{ .Chart.Name }}
      labels:
        app: {{ .Chart.Name }}
    spec:
      replicas: {{ .Values.replicas }}
      selector:
        matchLabels:
          app: {{ .Chart.Name }}
      template:
        metadata:
          labels:
            app: {{ .Chart.Name }}
        spec:
          containers:
          - name: {{ .Chart.Name }}
            image: {{ .Values.image }}:{{ .Values.imageTag }}
            ports:
            - containerPort: 80
              protocol: TCP
            imagePullPolicy: Always
            resources:
              requests:
                cpu: "200m"
                memory: "1200Mi"
          restartPolicy: Always
          terminationGracePeriodSeconds: 10
          securityContext:
            runAsUser: 0
          schedulerName: default-scheduler
      strategy:
        rollingUpdate:
          maxUnavailable: 1
          maxSurge: 1
      revisionHistoryLimit: 7
      progressDeadlineSeconds: 600
    ---
    kind: Service
    apiVersion: v1
    metadata: 
      name: {{ .Chart.Name }}
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 8080
      selector: 
        app: {{ .Chart.Name }}
      sessionAffinity: None
    

      

    # 部署测试,没问题就可以去掉
    helm install web2 /root/java --dry-run
    

      

    helm upgrade

    # 将values.yaml中的image修改为1.18
    helm upgrade web /root/java
    

      

    # REVISION升为2
    # helm ls
    NAME	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART           	APP VERSION
    web 	default  	2       	2021-05-07 15:19:10.386135051 +0800 CST	deployed	nginx-test-0.1.0	1.16.0
    

      

    --set 动态传入,优先级高于values.yaml

  • 相关阅读:
    服务器重启后oracle监听无法打开
    Resport 四则运算
    For循环
    do...while循环
    Day03_Class01
    自学JavaDay02_class02
    自学JavaDay02_class01
    自学JavaDay01
    基本的Dos命令
    MarkDown语法
  • 原文地址:https://www.cnblogs.com/jabbok/p/14725835.html
Copyright © 2011-2022 走看看