ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

helm部署应用

2021-11-14 13:34:09  阅读:145  来源: 互联网

标签:web yaml 部署 app nginx 应用 deployment helm


一. helm介绍

  • helm是作为k8s的包管理器,类似于centos的yum或者python的pip
  • 可以实现k8s的多环境管理,dev,uat,prod的多环境的yaml管理
  • helm本质上是一个Go的template模板, 我们可以自定义一些元数据,扩展的库以及一些类似于编程形式的工作流,例如: 条件语句,管道等的,这会使得模板更加丰富

二. 安装

wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz

tar -zxf helm-v3.2.4-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/

# 查看版本
helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}

# 添加helm仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts/

# 查看
helm repo ls
NAME  	URL                                      
stable	http://mirror.azure.cn/kubernetes/charts/

# 同步更新
helm repo update

三. 多环境管理

1. 模板文件

  • 初始模板文件树,Chart.yaml可以理解为变量文件,且都可以被templates目录下的文件所引用
  • templates下的deployment,ingress,service,hpa,serviceaccount都是部署一个应用所需要的yaml
  • 其中_helpers是放一下上面的deployment,service等都有可能用到的模板
  • NOTES是部署应用后给用户的一个提示
  • values就是定义变量的
# 创建一个名字为nginx的chart模板
helm create nginx
cd nginx

[root@k8s-master ~/nginx]# tree .
.
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml
egrep -v "#|^$" Chart.yaml 
apiVersion: v2
name: nginx
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1.16.0

2. 删除默认模板

rm -rf templates/*
cd templates
  • 生成新的配置清单
# 将这个配置清单写入到deployment.yaml,也可以kubectl create deployment web --image=nginx --dry-run=client  -o yaml >deployment.yaml,然后删除不常用的字段得到如下
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        
# 将这个配置清单写入service.yaml中,或者先创建上面的deployment,然后kubectl expose deployment web --port=80 --target-port=80 --dry-run=client -o yaml >service.yaml,然后删除不常用的字段
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web

3. helm运行

# 上面定义的配置清单直接用helm运行
helm install web /root/nginx/

# 查看状态
helm ls

# 删除掉,
helm uninstall web
release "web" uninstalled

4. 内置对象

  • 上面用helm部署和之前的apply部署效果一样,但是在多环境中该怎么去应用呢
  • Release.Name是将release的名称插入到模板中
Release.Namerelease名称
Release.Namerelease名字
Release.Namespacerelease名称空间
Release.Servicerelease服务的名称
Release.Revisionrelease修订版本号,从1开始累加

5. 自定义yaml变量

  • 标签增加了一个name: {{ .Chart.Name }},也可以不增加这个标签
    • {{ .Release.Name }}也是一个内置的,他引用的是Chart.yaml中的内容
  • {{ .Values.label }}引用的是values.yaml中的内容
  • {{ .Values.inage }}:{{ .Values.imageTag }}同样也是引用的是values.yaml中的内容
# 这里只渲染了deployment,其他的资源配置清单和这个一样渲染
vim deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: {{ .Release.Name }}
    name: {{ .Chart.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 }}
  • 根据上面的配置清单来修改Values.yaml
# 之前的默认的内容可以都删除了,和上面配置清单要一一对应,如下
vim values.yaml

replicas: 3
image: nginx
imageTag: 1.17
label: nginx

# 同时Chart.yaml文件中也要有相应的字段

6. 部署安装

# 先预览一下yaml
# 输出的是yaml内容,没有报错基本就没问题,其中Release.Name就是webee了
helm install webee --dry-run /root/nginx/

NAME: webee
LAST DEPLOYED: Sun Nov 14 12:41:29 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web
---
# Source: nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx

# 然后安装
helm install webee

标签:web,yaml,部署,app,nginx,应用,deployment,helm
来源: https://blog.csdn.net/moon_naxx/article/details/121316645

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有