视频来源:B站《k8s(Kubernetes)集群编排工具helm3实战教程》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:k8s集群编排工具helm3实战教程 | 汇总_热爱编程的通信人的博客-CSDN博客


1 什么是helm和相关组件

  1. 环境准备

需要准备一套k8s的集群, helm主要是k8s集群的包管理器, 主要用来管理helm中的各种chart包。

  1. 传统服务部署到k8s集群的流程

拉取代码-->打包编译-->构建镜像-->准备一堆相关部署的yaml文件(如:deployment、service、ingress等) -->kubectl apply部署到k8s集群

  1. 传统方式部署引发的问题

1)随着引用的增多, 需要维护大量的yaml文件

2)不能根据一套yaml文件来创建多个环境, 需要手动进行修改。

例如:一般环境都分为dev、预生产、生产环境, 部署完了dev这套环境, 后面再部署预生产和生产环境, 还需要复制出两套, 并手动修改才行。

  1. 什么是helm

Helm是Kubernetes的包管理工具, 可以方便地发现、共享和构建Kubernetes应用

helm是k8s的包管理器, 相当于centos系统中的yum工具, 可以将一个服务相关的所有资源信息整合到一个chart包中, 并且可以使用一套资源发布到多个环境中,可以将应用程序的所有资源和部署信息组合到单个部署包中。

就像Linux下的rpm包管理器, 如yum/apt等, 可以很方便的将之前打包好的yaml文件部署到kubernetes上。

  1. helm的组件

1)Chart:就是helm的一个整合后的chart包, 包含一个应用所有的kubernetes声明模版, 类似于yum的rpm包或者apt的dpkg文件。

理解:

helm将打包的应用程序部署到k8s, 并将它们构建成Chart。这些Chart将所有预配置的应用程序资源以及所有版本都包含在一个易于管理的包中。

Helm把kubernetes资源(如deployments、services或ingress等)打包到一个chart中, chart被保存到chart仓库。通过chart仓库可用来存储和分享chart

2)Helm客户端:helm的客户端组件, 负责和k8s apiserver通信

3)Repository:用于发布和存储chart包的仓库, 类似yum仓库或docker仓库

4)Release:用chart包部署的一个实例。通过chart在k8s中部署的应用都会产生一个唯一的Release。同一chart部署多次就会产生多个Release。

理解:

将这些yaml部署完成后, 他也会记录部署时候的一个版本, 维护了一个release版本状态, 通过Release这个实例, 他会具体帮我们创建pod,deployment等资源

  1. helm3和helm2的区别

1)helm3移除了Tiler组件 helm2中helm客户端和k8s通信是通过Tiller组件和k8s通信, helm3移除了Tiller组件, 直接使用kubeconfig文件和k8s的apiserver通信

2)删除release命令变更

#helm delete release-name --purge ------------>> helm uninstall release-name

3)查看charts信息命令变更

#helm inspect release-name ------------>> helm show release-name

4)拉取charts包命令变更

#helm fetch chart-name ------------>> helm pull chart-name

5)helm3中必须指定release名称, 如果需要生成一个随机名称, 需要加选项--generate-name, helm2中如果不指定release名称, 可以自动生成一个随机名称

#helm install ./mychart --generate-name

2 helm3的安装和chart的目录结构

  1. 二进制方式安装helm3
#kubectl get node
NAME     STATUS    ROLES                   AGE   VERSION 
m1       Ready     control-plane,master    257d  v1.20.4
m2       Ready     control-plane,master    257d  v1.20.4
m3       Ready     control-plane,master    257d  v1.20.4
n1       Ready     <none>                  257d  v1.20.4
# wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
# ls helm-v3.5.2-linux-amd64.tar.gz
helm-v3.5.2-inux-amd64.ta.gd
# tar -zxf helm-v3.5.2-linux-amd64.tar.gz
# ls
helm-v3.5.2-linux-amd64.tar.gz linux-amd64
# ls linux-amd64/
helm LICENSE README.md
# mv linux-amd64/helm /usr/local/bin/
# helm version
version.BuildInfo{Version:"v3.5.2", GitCommit:"167aac70832d3a384f65f9745335e9fb40169dc2", GitTreeState:"dirty", GoVersion:"go1.15.7"}
  1. chart的目录结构
#helm create my chart  #创建一个chart, 指定chart名:mychart 
#tree mychart/
mychart/                           #chart包的名称
├── charts                         #存放子chart的目录, 目录里存放这个chart依赖的所有子chart Chart.yaml
├── Chart.yaml                     #保存chart的基本信息, 包括名字、描述信息及版本等, 这个变量文件都可以被templates目录下文件所引用
├── templates                      #模板文件目录, 目录里面存放所有yaml模板文件, 包含了所有部署应用的yaml文件
│   ├── deployment.yaml            #创建deployment对象的模板文件 
│   ├── _helpers.tpl               #放置模板助手的文件, 可以在整个chart中重复使用, 是放一些templates目录下这些yaml都有可能会用的一些模板
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt                  #存放提示信息的文件, 介绍chart帮助信息, helm install部署后展示给用户.如何使用chart等, 是部署chart后给用户的提示信息 
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests                      #用于测试的文件, 测试完部署完chart后, 如web, 做一个链接, 看看你是否部署正常
│       └── test-connection.yaml   
└── values.yaml                    #用于渲染模板的文件(变量文件,定义变量的值)定义templates目录下的yaml文件可能引用到的变量  
                                   #values.yaml用于存储templates目录中模板文件中用到变量的值, 这些变量定义都是为了让templates目录下yaml引用
  1. Chart.yaml文件字段说明
# cat Chart.yaml 
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐