栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用Helm来简化K8S应用管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Helm来简化K8S应用管理

收藏博客来交流更多云原生知识 :pyenv.cc

参考文档 :

https://helm.sh/docs/

https://github.com/helm/helm

一、什么是Helm

Helm是Kubernetes的包管理器,类似于Python的pip centos的yum,主要用来管理 Charts。Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些metadata,以便于应用程序的分发。对于应用发布者而言,可以通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。 二、Helm带来的便捷

我们日常在K8S中部署可用应用时,需要涉及到很多的K8S资源的共同协作(Controller、Service、Configmap、Secret、RBAC、PV、PVC、Ingress等一系列资源),这些资源过于分散,不方便管理以及定义方式的局限性,直接提供kubectl来管理和生效YAML配置创建可用应用,让人头疼,不便于维护。在部署一个应用,会遇到哪些问题:

如何统一管理、配置和更新这些分散的k8s的应用资源文件;如何分发和复用应用模板;如何将应用的一系列资源当做一个软件包管理; 对于使用者而言,使用Helm后不用需要编写复杂的应用部署文件,可以以简单的方式在K8S上查找、安装、升级、回滚、卸载应用程序; 三、 Helm 工作原理及架构演变 3.1、工作原理

Chart Install 过程

Helm 从指定的目录或者 TAR 文件中解析出 Chart 结构信息。Heml 将指定的 Chart 结构和 Values 信息通过 gRPC 传递给 Tiller。Tiller 根据 Chart 和 Values 生成一个 Release。Tiller 根据 Release 发送给 Kubernetes 用于生成 Release。

Chart Update 过程

Helm 从指定的目录或者 TAR 文件中解析出 Chart 结构信息。Helm 将需要更新的 Release 的名称、Chart结构和 Values 信息传递给 Tiller。Tiller 生成 Release 并更新指定名称的 Release 和 History。Tiller 将 Release 发送给 Kubernetes 用于更新 Release。

Chart Rollback 过程

Helm 将要回滚的 Release 的名称传递给 Tiller。Tiller 根据 Release 的名称查找 History。Tiller 从 History 中获取上一个 Release。Tiller 将上一个 Release 发送给 Kubernetes 用于替换当前 Release。 3.2、架构演变

在2019 年 11 月 4 日,Helm 社区 repo 中提供 安全审计报告 , Helm v3 中的访问控制与 Helm v2 中的访问控制发生变更;

移除 Tiller支持将 Chart 推送至 Docker 镜像仓库中使用JSONSchema验证chart values给helm charts添加test了,通过helm test命令 针对部署的应用跑tests部署时release name必须指定,helm2时可自动随机生成删除时无须再使用 –purge为了更好地协调其他包管理者的措辞 Helm CLI 个别更名;helm delete更名为helm uninstall,helm inspect更名为helm show,helm fetch更名为helm pull不再需要requirements.yaml, 依赖关系是直接在chart.yaml中定义移除了用于本地临时搭建 Chart Repository的 helm serve 命令

五、Helm 组件及相关术语

Helm : 命令行下的客户端工具,主要用于 K8S 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。Chart:Helm 包,采用 TAR 格式。其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula、APT 的 dpkg 或者 Yum 的 rpm 文件。Release:在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。每次安装都会生成自己的 Release,会有自己的 Release 名称。Repository:用于发布和存储 Chart 的存储库。Tiller : (v2版本)Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release。 六、Helm常用命令

命令描述
create创建一个chart并指定名字
dependency管理chart依赖
get下载一个release。可用子命令:all、hooks、manifest、notes、values
history获取release历史
install安装一个chart
list列出release
package将chart目录打包到chart存档文件中
pull从远程仓库中下载chart并解压到本地 # helm pull stable/mysql --untar
repo添加,列出,移除,更新和索引chart仓库。可用子命令:add、index、list、remove、update
rollback从之前版本回滚
search根据关键字搜索chart。可用子命令:hub、repo
show查看chart详细信息。可用子命令:all、chart、readme、values
status显示已命名版本的状态
template本地呈现模板
uninstall卸载一个release
upgrade更新一个release
version查看helm客户端版本
七、推荐仓库

难免需要安装一些三方的基础服务,常用仓库如下 :

bitnami官方地址: https://bitnami.com/微软仓库 : http://mirror.azure.cn/kubernetes/charts/阿里云仓库 : https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts官方仓库 : https://hub.kubeapps.com/charts/incubatorelasticsearch : https://helm.elastic.co

添加微软仓库为 stable
$ helm repo add stable http://mirror.azure.cn/kubernetes/charts
"stable" has been added to your repositories
 
添加阿里云仓库为 aliyun
$ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
"aliyun" has been added to your repositories

查看本地已添加的仓库
$ helm repo list 
NAME    URL                                                   
stable  http://mirror.azure.cn/kubernetes/charts              
aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

查看仓库所有的包
$ helm search repo stable

移除仓库
$ helm repo remove stable

列出仓库中相关的包
$ helm search repo mysql

八、Charts 8.1、目录结构
demochart/
├── charts                          # 目录用于存放所依赖的子chart
├── Chart.yaml                      # 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
├── templates                       # 模板目录,通常会使用values.yaml配置内容进行填充,板引擎渲染此目录的文件后Tiller将渲染得到的结果 提交给Kubernetes创建响应的对象
│   ├── deployment.yaml             # deployment 控制器的 Go 模板文件
│   ├── _helpers.tpl                # 模板助手文件,定义的值可在模板中使用
│   ├── ingress.yaml                # ingress 的模板文件 
│   ├── NOTES.txt                   # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值,可以理解为帮助文档
│   ├── serviceaccount.yaml
│   ├── service.yaml                # service 的 Go 模板文件
└── values.yaml                     # 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件
8.2、构建一个无状态应用模版charts

部分常用语法说明 : http://masterminds.github.io/sprig/strings.html

目录结构

$ tree demochart/
demochart/
├── charts
├── Chart.yaml
├── templates                   
│   ├── deployment.yaml  
└── values.yaml

Chart.yaml

apiVersion: v2
name: demochart
description: A Helm chart for Kubernetes, The author is Daizhe
type: application
version: 0.1.0
appVersion: 1.16.0

templates/deployment.yaml

$ vim templates/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deployment
  name: {{ .Values.Name }}
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: deployment
  template:
    metadata:
      labels:
        app: deployment
    spec:
      containers:
      - image: {{ .Values.image }}
        name: nginx

values.yaml

Name: demo-deploy-nginx
replicas: 1
image: nginx:latest

install 安装

$ helm install nginx-dep demochart/ --dry-run
$ helm install nginx-dep demochart/
$ helm list

upgrade 升级

$ helm upgrade -f values.yaml nginx-dep demochart

rollback 回滚

$ helm history nginx-dep
$ helm rollback nginx-dep 1
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号