zoukankan      html  css  js  c++  java
  • Helm系列(二) 自创建Chart

    一、配置Chart

    之前的Chart是通过从设置的仓库中拉取,那么如何自定义Chart呢?

    1、创建Chart

    [root@k8smaster ~]# helm create mychart
    Creating mychart
    [root@k8smaster ~]# ll mychart/
    总用量 8
    drwxr-xr-x 2 root root    6 6月  27 23:58 charts
    -rw-r--r-- 1 root root 1143 6月  27 23:58 Chart.yaml
    drwxr-xr-x 3 root root  162 6月  27 23:58 templates
    -rw-r--r-- 1 root root 1874 6月  27 23:58 values.yaml
    • Chart.yaml 当前Chart属性配置信息
    • templates 自定义yaml文件存放的目录
    • values.yaml 全局变量定义的文件

    2、自定义yaml文件

    再templates目录中新建两个yaml文件:

    • deployment.yaml
    • service.yaml

    上面中的通过helm create创建了模板,里面已经有两个文件,如果自己的deployment,可以进行替换。

    deployment.yaml文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ include "mychart.fullname" . }}
      labels:
        {{- include "mychart.labels" . | nindent 4 }}
    spec:
      {{- if not .Values.autoscaling.enabled }}
      replicas: {{ .Values.replicaCount }}
      {{- end }}
      selector:
        matchLabels:
          {{- include "mychart.selectorLabels" . | nindent 6 }}
      template:
        metadata:
          {{- with .Values.podAnnotations }}
          annotations:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          labels:
            {{- include "mychart.selectorLabels" . | nindent 8 }}
        spec:
          {{- with .Values.imagePullSecrets }}
          imagePullSecrets:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          serviceAccountName: {{ include "mychart.serviceAccountName" . }}
          securityContext:
            {{- toYaml .Values.podSecurityContext | nindent 8 }}
          containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              ports:
                - name: http
                  containerPort: 80
                  protocol: TCP
              livenessProbe:
                httpGet:
                  path: /
                  port: http
              readinessProbe:
                httpGet:
                  path: /
                  port: http
              resources:
                {{- toYaml .Values.resources | nindent 12 }}
          {{- with .Values.nodeSelector }}
          nodeSelector:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          {{- with .Values.affinity }}
          affinity:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          {{- with .Values.tolerations }}
          tolerations:
            {{- toYaml . | nindent 8 }}
          {{- end }}

    service.yaml文件:

    apiVersion: v1
    kind: Service
    metadata:
      name: {{ include "mychart.fullname" . }}
      labels:
        {{- include "mychart.labels" . | nindent 4 }}
    spec:
      type: {{ .Values.service.type }}
      ports:
        - port: {{ .Values.service.port }}
          targetPort: http
          protocol: TCP
          name: http
      selector:
        {{- include "mychart.selectorLabels" . | nindent 4 }}

    可以看到上面两个文件中一些变量是以 {{ }} 进行书写,而这些文件中变量来自于values.yaml文件中:

    # Default values for mychart.
    # This is a YAML-formatted file.
    # Declare variables to be passed into your templates.
    
    replicaCount: 1
    
    image:
      repository: nginx
      pullPolicy: IfNotPresent
      # Overrides the image tag whose default is the chart appVersion.
      tag: ""
    
    imagePullSecrets: []
    nameOverride: ""
    fullnameOverride: ""
    
    serviceAccount:
      # Specifies whether a service account should be created
      create: true
      # Annotations to add to the service account
      annotations: {}
      # The name of the service account to use.
      # If not set and create is true, a name is generated using the fullname template
      name: ""
    
    podAnnotations: {}
    
    podSecurityContext: {}
      # fsGroup: 2000
    
    securityContext: {}
      # capabilities:
      #   drop:
      #   - ALL
      # readOnlyRootFilesystem: true
      # runAsNonRoot: true
      # runAsUser: 1000
    
    service:
      type: NodePort
      port: 80
    
    ingress:
      enabled: false
      className: ""
      annotations: {}
        # kubernetes.io/ingress.class: nginx
        # kubernetes.io/tls-acme: "true"
      hosts:
        - host: chart-example.local
          paths:
            - path: /
              pathType: ImplementationSpecific
      tls: []
      #  - secretName: chart-example-tls
      #    hosts:
      #      - chart-example.local
    
    resources: {}
      # We usually recommend not to specify default resources and to leave this as a conscious
      # choice for the user. This also increases chances charts run on environments with little
      # resources, such as Minikube. If you do want to specify resources, uncomment the following
      # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
      # limits:
      #   cpu: 100m
      #   memory: 128Mi
      # requests:
      #   cpu: 100m
      #   memory: 128Mi
    
    autoscaling:
      enabled: false
      minReplicas: 1
      maxReplicas: 100
      targetCPUUtilizationPercentage: 80
      # targetMemoryUtilizationPercentage: 80
    
    nodeSelector: {}
    
    tolerations: []
    
    affinity: {}

    所以如果需要部署不同的deployment.yaml,只需要修改values.yaml文件中的变量,这样也就进行了yaml文件的复用。values.yaml文件中可以定义这几个变量,一般这是不同的:

    • image
    • tag
    • label
    • port
    • replicas

    二、安装Chart

    [root@k8smaster ~]# helm install web mychart
    NAME: web
    LAST DEPLOYED: Mon Jun 28 00:47:03 2021
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    ...

    查看Service:

    [root@k8smaster ~]# kubectl get svc
    NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    kubernetes     ClusterIP   10.96.0.1      <none>        443/TCP        2m55s
    web2-mychart   NodePort    10.108.84.36   <none>        80:31334/TCP   9s
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    MSSQL中with(nolock)的用法
    google reader 使用快捷键
    HTML中em标签的用法
    js正则表达式
    C#中lock关键字的用法
    面试反思
    关于IE6.7.8.FF兼容的问题
    C#中DateTime.Now.Ticks的用法和说明
    JS中eval的用法
    这两天面试时不会的笔试题
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14940683.html
Copyright © 2011-2022 走看看