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

原文地址:https://www.cnblogs.com/jabbok/p/14725835.html