Kubernetes核心技术Helm

Helm就是一个包管理工具【类似于npm】

为什么引入Helm

首先在原来项目中都是基于yaml文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分成很多个组件来部署,每个组件可能对应一个deployment.yaml,一个service.yaml,一个Ingress.yaml还可能存在各种依赖关系,这样一个项目如果有5个组件,很可能就有15个不同的yaml文件,这些yaml分散存放,如果某天进行项目恢复的话,很难知道部署顺序,依赖关系等,而所有这些包括

  • 基于yaml配置的集中存放
  • 基于项目的打包
  • 组件间的依赖

但是这种方式部署,会有什么问题呢?

  • 如果使用之前部署单一应用,少数服务的应用,比较合适
  • 但如果部署微服务项目,可能有几十个服务,每个服务都有一套yaml文件,需要维护大量的yaml文件,版本管理特别不方便

Helm的引入,就是为了解决这个问题

  • 使用Helm可以把这些YAML文件作为整体管理
  • 实现YAML文件高效复用
  • 使用helm应用级别的版本管理

Helm介绍

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

Helm有三个重要概念

  • helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理
  • Chart:应用描述,一系列用于描述k8s资源相关文件的集合
  • Release:基于Chart的部署实体,一个chart被Helm运行后将会生成对应的release,将在K8S中创建出真实的运行资源对象。也就是应用级别的版本管理
  • Repository:用于发布和存储Chart的仓库

Helm组件及架构

Helm采用客户端/服务端架构,有如下组件组成

  • Helm CLI是Helm客户端,可以在本地执行
  • Tiller是服务器端组件,在Kubernetes集群上运行,并管理Kubernetes应用程序
  • Repository是Chart仓库,Helm客户端通过HTTP协议来访问仓库中Chart索引文件和压缩包

Helm v3变化

2019年11月13日,Helm团队发布了Helm v3的第一个稳定版本

该版本主要变化如下

  • 架构变化

    • 最明显的变化是Tiller的删除
    • V3版本删除Tiller
    • relesase可以在不同命名空间重用

V3之前

V3版本

helm配置

首先我们需要去 官网下载

  • 第一步,下载helm安装压缩文件,上传到linux系统中
  • 第二步,解压helm压缩文件,把解压后的helm目录复制到 usr/bin 目录中
  • 使用命令:helm

我们都知道yum需要配置yum源,那么helm就就要配置helm源

helm仓库

添加仓库

helm repo add 仓库名  仓库地址

例如

# 配置微软源
helm repo add stable http://mirror.azure.cn/kubernetes/charts
# 配置阿里源
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 配置google源
helm repo add google https://kubernetes-charts.storage.googleapis.com/ # 更新
helm repo update

然后可以查看我们添加的仓库地址

# 查看全部
helm repo list
# 查看某个
helm search repo stable

或者可以删除我们添加的源

helm repo remove stable

helm基本命令

  • chart install
  • chart upgrade
  • chart rollback

使用helm快速部署应用

使用命令搜索应用

首先我们使用命令,搜索我们需要安装的应用

# 搜索 weave仓库
helm search repo weave

根据搜索内容选择安装

搜索完成后,使用命令进行安装

helm install ui aliyun/weave-scope

可以通过下面命令,来下载yaml文件【如果】

kubectl apply -f weave-scope.yaml

安装完成后,通过下面命令即可查看

helm list

同时可以通过下面命令,查看更新具体的信息

helm status ui

但是我们通过查看 svc状态,发现没有对象暴露端口

所以我们需要修改service的yaml文件,添加NodePort

kubectl edit svc ui-weave-scope

这样就可以对外暴露端口了

然后我们通过 ip + 32185 即可访问

如果自己创建Chart

使用命令,自己创建Chart

helm create mychart

创建完成后,我们就能看到在当前文件夹下,创建了一个 mychart目录

目录格式

  • templates:编写yaml文件存放到这个目录
  • values.yaml:存放的是全局的yaml文件
  • chart.yaml:当前chart属性配置信息

在templates文件夹创建两个文件

我们创建以下两个

  • deployment.yaml
  • service.yaml

我们可以通过下面命令创建出yaml文件

# 导出deployment.yaml
kubectl create deployment web1 --image=nginx --dry-run -o yaml > deployment.yaml
# 导出service.yaml 【可能需要创建 deployment,不然会报错】
kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml

安装mychart

执行命令创建

helm install web1 mychart

应用升级

当我们修改了mychart中的东西后,就可以进行升级操作

helm upgrade web1 mychart

chart模板使用

通过传递参数,动态渲染模板,yaml内容动态从传入参数生成

刚刚我们创建mychart的时候,看到有values.yaml文件,这个文件就是一些全局的变量,然后在templates中能取到变量的值,下面我们可以利用这个,来完成动态模板

  • 在values.yaml定义变量和值
  • 具体yaml文件,获取定义变量值
  • yaml文件中大题有几个地方不同
    • image
    • tag
    • label
    • port
    • replicas

定义变量和值

在values.yaml定义变量和值

获取变量和值

我们通过表达式形式 使用全局变量 {{.Values.变量名称}}

例如: {{.Release.Name}}

安装应用

在我们修改完上述的信息后,就可以尝试的创建应用了

helm install --dry-run web2 mychart

14.Kubernetes核心技术Helm的更多相关文章

  1. Kubernetes核心技术-Controller

    Kubernetes核心技术-Controller 内容 什么是Controller Pod和Controller的关系 Deployment控制器应用场景Deployment控制器应用 yaml文件 ...

  2. Kubernetes核心技术Pod

    Kubernetes核心技术Pod Pod概述 Pod是K8S系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在K8S上运行容器化应用的资源对象,其它的资源对象 ...

  3. kubernetes 1.14安装部署helm插件

    简单介绍: Helm其实就是一个基于Kubernetes的程序包(资源包)管理器,它将一个应用的相关资源组织成为Charts,并通过Charts管理程序包.再简单点说,可以当做RHEL/CentOS系 ...

  4. Kubernetes用Helm安装Ingress并踩一下使用的坑

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Ingress是Kubernetes一个非常重要的Controller,它类似一个路由转发的组件,可以让外界访问Kubern ...

  5. 研发效能|Kubernetes核心技术剖析和DevOps落地经验

    本文主要介绍Kubernetes 的核心组件.架构.服务编排,以及在集群规模.网络&隔离.SideCar.高可用上的一些使用建议,尤其是在CICD中落地,什么是 GitOps. 通过此文可彻底 ...

  6. kubernetes组件helm

    1.安装helm Helm由客户端helm命令行工具和服务端tiller组成,Helm的安装十分简单. 下载helm命令行工具到master节点node1的/usr/local/bin下(只需要在其中 ...

  7. Kubernetes 与 Helm:使用同一个 Chart 部署多个应用

    k8s 集群搭建好了,准备将 docker swarm 上的应用都迁移到 k8s 上,但需要一个一个应用写 yaml 配置文件,不仅要编写 deployment.yaml 还要编写 service.y ...

  8. EggJS 云原生应用硬核实战(Kubernetes+Traefik+Helm+Prometheus+Grafana),提供 Demo

    介绍 这是一个关于 Egg.js 应用上云️的示例,笔者所在的大前端团队的已应用于生产. CI/CD & DevOps & GitOps & HPA 等这里暂不做讨论,因为每一 ...

  9. kubernetes 核心技术-Controller 控制器

    一.什么是Controller? Controller是在集群上管理和运行容器的对象,Controller是实际存在的,Pod是抽象的,主要创建管理pod 二.Pod和Controller的关系 Po ...

  10. kubernetes 核心技术概念(二)之 volume namespace annoation

    volume k8s通过数据卷来提供pod数据的持久化,k8s的数据卷是对docker数据卷的扩展,k8s的数据卷是pod级别的,用来实现pod中容器的文件共享 volume是pod中能被多个容器访问 ...

随机推荐

  1. Linux查看硬件信息超强命令sar,以及可视化工具ksar

    一.概述 sar(System Activity Reporter,系统活动情况报告)是Linux下系统运行状态统计工具,可从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情况.磁盘 ...

  2. Win32 菜单添加复选标记和单选标记

    在菜单中添加复选标记用CheckMenuItem函数 CheckMenuItem函数原型: DWORD WINAPI CheckMenuItem( _In_ HMENU hMenu, //菜单句柄 _ ...

  3. 折腾 Quickwit,Rust 编写的分布式搜索引擎(专为从对象存储中实现亚秒级搜索而设计)

    什么是 Quickwit? Quickwit 是首个能在云端存储上直接执行复杂的搜索与分析查询的引擎,并且具有亚秒级延迟.它借助 Rust 语言和分离计算与存储的架构设计,旨在实现资源高效利用.易于操 ...

  4. 【测试平台开发】——04Flask后端api开发实战(一)

    一.测试平台开发模式 要开发一套平台有两种开发模式,一个[大而全],一个[小而简]. 说道[大而全]想到目前大型项目都使用的语言[JAVA],[小而简]想到的是[Python]语言. 重武器(大而全) ...

  5. Drools与动态加载规则文件

    Drools与动态加载规则文件 Drools简介 对系统使用人员来说: 对开发人员来说: Drools架构图 快速开始 Drools简介 Drools是一款基于Java的开源规则引擎,将规则与业务代码 ...

  6. 【YashanDB知识库】数据变化率超过阈值统计信息失效

    [问题分类]性能优化 [关键字]统计信息 [问题描述] SQL --创建表结构 drop table t1; create table t1 (id int,name varchar2(200)); ...

  7. 光影精灵10 Win1+Ubuntu18.04 双系统 踩坑记录

    前言 第二年准备报名智能车了,当然还是创意组别.刚好买了今年新出的电脑光影精灵10,我想着也给它安一个双系统.但是没想到,相比于之前那个老电脑,新电脑的新硬件和驱动问题远比老电脑麻烦的多. 在经历了一 ...

  8. vue3 如何获取 dom

    1. 通过 ref     1. 在 html 标签上指定 ref 属性     2. 在 setup 中定义并返回.注意:标签上的 ref 属性名需要跟 setup 中的对应 <h1 ref= ...

  9. 搭建ipv6并发代理池

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 学习目标 ounter(l ...

  10. MOGA-Net: 多目标遗传算法求解复杂网络中的社区《A Multiobjective Genetic Algorithm to Find Communities in Complex Networks》(遗传算法、多目标优化算法、帕累托最优)

    论文:A Multiobjective Genetic Algorithm to Find Communities in Complex Networks GitHub: IEEE 2012的论文. ...