zoukankan      html  css  js  c++  java
  • helm3

    Helm客户端


    安装

    wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
    tar zxvf helm-v3.0.0-linux-amd64.tar.gz 
    mv linux-amd64/helm /usr/bin/
    

    配置仓库

    helm repo add stable http://mirror.azure.cn/kubernetes/charts
    helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
    helm repo update
    

    • 查看配置的存储库
    helm repo list
    helm search repo stable
    

    • 删除存储库
    helm repo remove aliyun
    

    案例1


    helm create mychart
    cd mychart/
    rm -rf /root/mychart/templates/*
    

    • Chart.yaml (helm create mychart 自动生成的文件)
    apiVersion: v2
    name: nginx
    description: A Helm chart for Kubernetes
    type: application
    version: 0.1.0
    appVersion: 1.16.0
    

    1. 生成模板deployment文件

    kubectl create deployment mychart --image=nginx:1.16 -o yml -o yaml --dry-run > deployment.yaml
    

    2. 修改deployment文件

    • deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ .Values.name }} 
    spec:
      replicas: {{ .Values.replicas }} 
      selector:
        matchLabels:
          app: mychart
      template:
        metadata:
          labels:
            app: mychart
        spec:
          containers:
          - image: {{ .Values.image }}:{{ .Values.imageTag }}
            name: nginx
            resources: {}
    

    • values.yaml
    replicas: 3
    name: hello
    image: nginx
    imageTag: 1.17
    

    3. 安装

    helm install hello /root/mychart/
    

    4. 验证

    kubectl get pods -owide
    


    curl -I 192.168.236.233
    


    5. 修改nginx版本并升级

    • values.yaml
    replicas: 3
    name: hello
    image: nginx
    imageTag: 1.12
    

    helm upgrade hello /root/mychart/
    

    helm history hello
    


    6. 回滚到上一个版本

    helm rollback hello 1
    

    kubectl get pods -owide
    


    curl -I 192.168.236.240
    


    7. 将nginx版本下降到1.8

    helm upgrade --set imageTag=1.8 hello /root/mychart/
    

    helm history hello
    



    案例2


     helm create nginx
     cd nginx/
    

    • 目录结构
    ├── charts
    ├── Chart.yaml   # 可以被templates下面的文件引用
    ├── templates
    │   ├── deployment.yaml
    │   ├── _helpers.tpl
    │   ├── ingress.yaml
    │   ├── NOTES.txt
    │   ├── serviceaccount.yaml
    │   ├── service.yaml
    │   └── tests
    │       └── test-connection.yaml
    └── values.yaml  # 定义变量, 可以被templates下面的文件引用
    

    手动deploy

    rm -rf /root/nginx/templates/*
    kubectl create deployment web --image=nginx --dry-run -o yaml>/root/nginx/templates/deployment.yaml
    kubectl apply -f /root/nginx/templates/deployment.yaml
    kubectl expose deployment web --port=80 --target-port=80 --dry-run -o yaml > service.yaml
    

    • deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        app: web
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: web
        spec:
          containers:
          - image: nginx
            name: nginx
            resources: {}
    status: {}
    

    • service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: web
      name: web
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: web
    status:
      loadBalancer: {}
    

    • 查看pod
    kubectl get pods
    


    • 查看service
    kubectl get svc
    


    helm 安装

    kubectl delete -f /root/nginx/templates/
    kubectl delete -f /root/nginx/
    helm install web /root/nginx/
    


    • 查看部署状态
    helm ls
    


    • 查看dashboard


    helm定义变量安装


    • helm全局变量
    Release.Name release 名称
    Release.Name helm install时候 的 release 名字
    Release.Namespace release 命名空间
    Release.Service release 服务的名称
    Release.Revision release 修订版本号,从1开始累加

    • deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        chart: {{ .Chart.Name }}
        app: {{ .Release.Name }}
      name: {{ .Release.Name }}
    spec:
      replicas: {{ .Values.replicas }}
      selector:
        matchLabels:
          app: {{ .Values.label }}
      template:
        metadata:
          labels:
            app: {{ .Values.label }}
        spec:
          containers:
          - image: {{ .Values.image }}:{{ .Values.imageTag}}
            name: {{ .Release.Name }}
            resources: {}
    status: {}
    

    • service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        chart: {{ .Chart.Name }}
        app: {{ .Release.Name }}
      name: {{ .Release.Name }}
    spec:
      ports:
      - port: {{ .Values.port }}
        protocol: TCP
        targetPort: {{ .Values.targetPort }}
      selector:
        app: {{ .Values.label }}
    

    • values.yaml
    replicas: 3
    image: nginx
    imageTag: 1.17
    label: nginx_label
    port: 80
    targetPort: 80
    

    • Chart.yaml
    apiVersion: v2
    name: nginx
    description: A Helm chart for Kubernetes
    type: application
    version: 0.1.0
    appVersion: 1.16.0
    

    • 安装
     helm install lyysb  /root/nginx/
    

    • 更新
    helm upgrade lyysb --set replicas=1   /root/nginx/
    

    --set 定义的变量的值的优先级最高


    • 删除
    helm delete lyysb
    

    helm语法


    条件判断(if)


    条件判断中被对比的对象不支持数字, 单引号'', 必须使用双引号""

    案例1

    • deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        chart: {{ .Chart.Name }}
        app: {{ .Release.Name }} 
      name: {{ .Release.Name }}
    spec:
      replicas: {{ .Values.replicas }}
      selector:
        matchLabels:
          app: {{ quote .Values.label }}
      template:
        metadata:
          labels:
            app: {{ .Values.label }} 
            {{- if eq .Values.test "lyysb" }}
            develop: lyysb
            {{- else }}
            develop: lyysupersb
            {{- end }}
        spec:
          containers:
          - image: {{ .Values.image }}:{{ .Values.imageTag}}
            name: {{ .Release.Name }}
            resources: {}
    status: {}
    

    • values.yaml
    replicas: 3
    image: nginx
    imageTag: 1.17
    label: nginx_label
    port: 80
    targetPort: 80
    test: 'lyysb'
    

    案例2

    • values.yaml
    replicaCount: 3 
    image:
      repository: nginx
      tag: 1.17
      pullPolicy: IfNotPresent
    imagePullSecrets: []
    nameOverride: ""
    fullnameOverride: ""
    serviceAccount:
      create: true
      name:
    podSecurityContext: {}
    securityContext: {}
    service:
      type: ClusterIP
      port: 80
    ingress:
      enabled: true 
      annotations: {}
      hosts:
        - host: chart-example.local
          paths: []
      tls: []
    resources: {}
    nodeSelector: {}
    tolerations: []
    affinity: {}
    

    • deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        chart: {{ .Chart.Name }}
        app: {{ .Release.Name }} 
      name: {{ .Release.Name }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          app:  {{ .Release.Name }}
          chart:  {{ .Chart.Name }}
      template:
        metadata:
          labels:
            app:  {{ .Release.Name }}
            chart:  {{ .Chart.Name }}
        spec:
          containers:
          - image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            name: {{ .Release.Name }}
            resources: {}
    status: {}
    

    {{- if .Values.ingress.enabled }}
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: test-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - http:
          paths:
          - path: /testpath
            backend:
              serviceName: test
              servicePort: 80
    {{- end }}
    

    条件判断(with)


    • values.yaml
    nodeSelector: 
      team: a
      gpu: ok 
    

    • deployment.yaml

      {{- toYaml . | nindent 8 }} 可以写成 如下形式

      {{ .team}}

      {{ .gpu }}

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        chart: {{ .Chart.Name }}
        app: {{ .Release.Name }} 
      name: {{ .Release.Name }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          app:  {{ .Release.Name }}
          chart:  {{ .Chart.Name }}
      template:
        metadata:
          labels:
            app:  {{ .Release.Name }}
            chart:  {{ .Chart.Name }}
        spec:
          {{-  with .Values.nodeSelector }}
          nodeSelector:
          {{- toYaml . | nindent 8 }}
          {{- end }}
          containers:
          - image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            name: {{ .Release.Name }}
            resources: {}
    status: {}
    

    • 验证下
    helm install web2 /root/helm/nginx/ --dry-run 
    


    循环(range)


    • values.yaml
    test: 
      - 'lzzsb'
      - 'lyysb'
      - 'lxxsb'
    

    • configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: {{ .Release.Name }}
    data: 
      test: 
        {{- range .Values.test }}
        {{ . }}
        {{- end }}
    

    • 验证
    helm install web2 /root/helm/nginx/ --dry-run
    


    变量


    with 无法引用全局变量的解决办法

    • values.yaml
    nodeSelector: 
      team: a
      gpu: ok 
    

    • deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        chart: {{ .Chart.Name }}
        app: {{ .Release.Name }} 
      name: {{ .Release.Name }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          app:  {{ .Release.Name }}
          chart:  {{ .Chart.Name }}
      template:
        metadata:
          labels:
            app:  {{ .Release.Name }}
            chart:  {{ .Chart.Name }}
        spec:
          {{-  with .Values.nodeSelector }}
          nodeSelector:
            name: {{ .Release.Name }}
          {{- toYaml . | nindent 8 }}
          {{- end }}
          containers:
          - image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            name: {{ .Release.Name }}
            resources: {}
    status: {}
    

    • 此时执行部署会出现报错

      Error: template: nginx/templates/deployment.yaml:22:25: executing "nginx/templates/deployment.yaml" at <.Release.Name>: nil pointer evaluating interface {}.Name


    • 解决方法

      在全局变量前面加上$ 或者 在with 前面将全局变量的值赋值给一个变量, with内调用这个变量

    spec:
          {{-  with .Values.nodeSelector }}
          nodeSelector:
            name: {{ $.Release.Name }}
          {{- toYaml . | nindent 8 }}
          {{- end }}
    

    spec:
          {{- $releasename := $.Release.Name -}}
          {{-  with .Values.nodeSelector }}
          nodeSelector:
            name: {{ $releasename }}
          {{- toYaml . | nindent 8 }}
          {{- end }}
    

    range解压赋值

    • values.yaml
    env:
      jvm.options:
        -Xms128M
        -Xmx128M
      path: /usr/local/elasticsearch-6.6.0/data
      log: /usr/local/elasticsearch-6.6.0/logs
      network: 127.0.0.1
      port: 9200
    

    • deployment.yaml
    spec:
          {{- $releasename := $.Release.Name -}}
          {{-  with .Values.nodeSelector }}
          nodeSelector:
            name: {{ $releasename }}
          {{- toYaml . | nindent 8 }}
          {{- end }}
          containers:
          - image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            name: {{ .Release.Name }}
            env:
            {{- range $k, $v := .Values.env }}
            - name: {{ $k }}
              value: {{ $v }}
            {{- end }}
            resources: {}
    

    • 验证下
    helm install web2 /root/helm/nginx/ --dry-run
    


    命名模板


    • helper.tpl
    {{- define "name" -}}
    {{ .Chart.Name }}-{{ .Release.Name }}
    {{- end -}}
    
    {{- define "labels" -}}
    chart: {{ .Chart.Name }}-{{ .Chart.Version }}
    app: {{ template "name" . }}
    {{- end -}}
    

    • deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        {{- include "labels" . | nindent 4 }}
      name: {{ template "name" . }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          app:  {{ .Release.Name }}
          chart:  {{ .Chart.Name }}
      template:
        metadata:
          labels:
            app:  {{ .Release.Name }}
            chart:  {{ .Chart.Name }}
        spec:
          {{- with .Values.nodeSelector }}
          nodeSelector:
          {{- toYaml . |nindent 8 }}
          {{- end }}
          containers:
          - image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
            name: {{ .Release.Name }}
            resources: {}
    status: {}
    

    • 验证
    helm install web /root/helm/nginx/ --dry-run
    


    helm搭建私有仓库


    参考: https://blog.51cto.com/14268033/2455006?source=dra


    安装minio服务端

    wget  https://dl.min.io/server/minio/release/linux-amd64/minio
    chmod +x minio
    mkdir  -p  /chart
    ./minio server /chart
    


    • 输入 http://172.16.240.100:9000/minio/login ,通过浏览器访问


    • 在启动日志中获取access key和secret key


    安装minio客户端

    wget  https://dl.min.io/client/mc/release/linux-amd64/mc
    chmod +x mc
    

    连接到服务端

    命令在启动日志中有

    ./mc config host add myminio http://192.168.189.217:9000 minioadmin minioadmin
    

    创建bucket

    ./mc mb myminio/minio-helm-repo
    

    设置bucket和objects匿名访问

    ./mc policy set download myminio/minio-helm-repo
    mkdir /root/helm/repo
    helm repo index helm/repo/
    ./mc  cp  helm/repo/index.yaml  myminio/minio-helm-repo
    

    helm创建与仓库连接的index.yaml文件

    mkdir /root/helm/repo
    helm repo index helm/repo/
    

    helm与minio仓库进行连接


    1. 将index.yaml文件推送到backet中去

    ./mc  cp  helm/repo/index.yaml  myminio/minio-helm-repo
    

    2. helm连接私有仓库

    helm repo add myrepo http://172.16.240.100:9000/minio-helm-repo
    


    3. 更新repo仓库

    helm  repo  update
    


    4 .查看repo

    helm repo list
    


    5. 查看repo中的文件

     ./mc ls helm/repo/
    

  • 相关阅读:
    Maven导入com.google.common.collect jar包
    poj 2192 Zipper
    poj 3278 Catch That Cow
    poj 2488 A Knight's Journey
    poj 3982 序列
    poj 2109 Power of Cryptography
    poj 3258 3273
    java中大数的一些基本运算
    hdu 1715 大菲波数
    最小生成树模板
  • 原文地址:https://www.cnblogs.com/cjwnb/p/12571199.html
Copyright © 2011-2022 走看看