运维开发实践 - helm

news2024/11/16 19:58:03

1. helm介绍

helm 是一个用于管理部署在kubernetes上的应用的工具
使用要求:一个Kubernetes集群

在这里插入图片描述

2.下载安装

Helm Github Download
在这里插入图片描述
Helm Huawei Source
在这里插入图片描述
按照自己的操作系统版本下载相应的helm压缩包
并将helm添加到环境变量中;

# 检查是否安装成功
helm version

在这里插入图片描述

3.创建一个example

helm create example-nginx && cd example-nginx 
# 开启ingress 和 hpa 配置
sed -i 's/enabled: false/enabled: true/g' values.yaml

以下即为helm生成的example-nginx的配置文件,

原理:将变量书写在values.yaml配置文件中,在使用helm install时会将这些变量替换到templates下所有的yaml文件中并应用至Kubernetes.
在这里插入图片描述
values.yaml
在这里插入图片描述
templates/deployment.yaml
在这里插入图片描述


# 安装当前应用到Kubernetes
helm upgrade --install example-nginx .

# 查看安装的example-nginx 服务
helm list

# 查看当前helm部署的Pod和Service
kubectl get po,svc,ing | grep example

Note: 若你发现你的ingress的ingressclass字段值为空,请先安装一个ingress-nginx控制器
请参考运维开发实践 - Kubernetes - 从外部访问k8s服务第二章节
并 reinstall 上述 example-nginx Chart

在这里插入图片描述

# 访问该应用
curl http://192.168.31.175:30001 -H "Host: chart-example.local"

在这里插入图片描述

4. Helm基本命令

可自行按顺序执行以下命令(已测试过)

# (0) 该目录用于测试使用
mkdir -p ~/helm_test && cd ~/helm_test

# (1)搜索应用
helm search repo nginx

# (2)!!以下命令3选1!!,我们可以任意安装上述搜索出来的应用
# i.直接安装
helm install example-nginx bitnami/nginx
# ii.升级example-nginx应用,若该应用不存在则直接安装
helm upgrade --install example-nginx bitnami/nginx
# iii.或者我们创建自定义应用
helm create example-nginx && helm upgrade --install example-nginx ~/helm_test/example-nginx

#(3)查看example-nginx应用的状态
helm status example-nginx

#(4) 查看安装的应用
helm list

#(5) 导出example-nginx应用的变量配置(values.yaml)
helm show values example-nginx > ~/helm_test/values.yaml
# 修改该values.yaml变量配置文件并开启ingress 和 hpa 配置
sed -i 's/host: chart-example.local/host: liyuan-nginx.com/g' ~/helm_test/values.yaml
sed -i 's/enabled: false/enabled: true/g' ~/helm_test/values.yaml

# (6) 应用该配置
helm upgrade --install -f values.yaml example-nginx ~/helm_test/example-nginx
# 查看ingress host是否被修改
kubectl get ing

#(7) 查看example-nginx应用部署的历史版本
helm history example-nginx

#(8)回滚应用到某个指定版本
helm rollback example-nginx 1
# 查看回滚是否生效
kubectl get ing

# (9) 将example-ngnix应用打包
helm package ~/helm_test/example-nginx

# (10)安装该应用包
helm install example-nginx2 ~/helm_test/example-nginx-0.1.0.tgz

helm list
#(10) 卸载应用
helm uninstall example-nginx
helm uninstall example-nginx2

5. helm templates模板语法

通过helm create example-nginx && cd example-nginx创建的应用默认包含 deployment*1, hpa*1, ingress*1, serviceaccount*1, service*1, 但通常来说默认的应用配置往往无法满足我们的业务需求,我们需要对其进行定制化…
在这里插入图片描述

helm create example-nginx3 && helm upgrade --install example-nginx3 ./example-nginx3
# 获取变量替换后的yaml文件
helm template example-nginx3 > tmp.yaml

# 我们可以看出该文件是example-nginx3 应用的是templates目录下所有文件从values.yaml中进行变量替换的值
vim tmp.yaml

如果现有的模板文件满足你的需求,直接修改value.yaml即可;
反之,需要你直接修改模板文件

Note: .Values 代表values.yaml

5.1.for循环

# ~/helm_test/example-nginx/values.yaml 添加如下声明
...
host: liyuan.com

ingresses:
  - ingress:
      name: ing-liyuan01
      path: /liyuan01
      backend:
        name: liyuan01-svc
        port: 8001
  - ingress:
      name: ing-liyuan02
      path: /liyuan02
      backend:
      	name: liyuan02-svc 
      	port: 8002
  - ingress:
      name: ing-liyuan03
      path: /liyuan03
      backend:
      	name: liyuan03-svc 
      	port: 8003
...

“.” 代表当前正在被遍历的元素
"$"代表values.yaml的root值

# !/helm_test/example-nginx/templates/test.yaml
{{- if .Values.ingresses}}
{{- range $ing:=.Values.ingresses}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .ingress.name }}
spec:
  rules:
  # 此处 $ 代表 values.yaml的root
  # quote 表示打上引号
  - host: {{ $.Values.host | quote}}
    http:
      paths:
      - path: {{ .ingress.path }}
        pathType: ImplementationSpecific
        backend:
          service:
            name: {{ .ingress.backend.name }}
            port:
              number: {{ .ingress.backend.port }}
---
# 该end匹配 range 的结束
{{- end}}
# 该end匹配 if 的结束
{{- end}}
# 渲染该文件
#如下图可以看到我们在values.yaml中定义的3个ing都被渲染了
helm template example-nginx .

在这里插入图片描述

5.2. with toYaml直接使用我们声明的值

定义直接包含某段代码

# ~/helm_test/example-nginx/values.yaml
...
annotation_test:
  nginx.ingress.kubernetes.io/rewrite-target: /$1
  app: nginx-app-liyuan
...

使用我们声明的值

# ~/helm_test/example-nginx/template/test01.yaml
{{- if .Values.annotation_test}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingressName
  {{- with .Values.annotation_test}}
  annotations:
    {{- toYaml . | nindent 4}}
  {{- end}}
spec:
  rules:
  - host: liyuan.com
    http:
      paths:
      - path: /liyuan
        pathType: ImplementationSpecific
        backend:
          service:
            name: liyuan-svc
            port:
              number: 80
{{- end}}

声明的annotation的值被直接渲染到了指定位置;
在这里插入图片描述

5.3. include使用我们在.tpl定义的值

在此处定义我们的值

# /root/helm_test/example-nginx/templates/_helpers.tpl
...
{{- define "app.owner" -}}
{{- printf "app.owner: liyuan"}}
{{- end}}
...

在此处使用我们的值

# /root/helm_test/example-nginx/templates/test02.yaml
{{- if .Values.annotation_test}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingressNameTest02
  labels:
    {{- include "app.owner" . | nindent 4}}
spec:
  rules:
  - host: liyuan.com
    http:
      paths:
      - path: /liyuan
        pathType: ImplementationSpecific
        backend:
          service:
            name: liyuan-svc
            port:
              number: 80
---
{{- end}}

在这里插入图片描述

Reference
Helm Docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

read_thread解复用线程分析

read_thread() 线程的主要作用从 MP4 里面读取 AVPacket,然后丢进去 PacketQueue 队列。所以需要先学习一下 strcut PacketQueue 跟 struct MyAVPacketList 数据结构。如下: typedef struct MyAVPacketList {AVPacket *pkt;int serial; } MyAVPacketLis…

html文件里怎么引用vue组件?

这里我们使用 http-vue-loader 来实现&#xff1a;https://www.npmjs.com/package/http-vue-loader Load .vue files directly from your html/js. No node.js environment, no build step. 我做了个demo如下&#xff1a; html文件里面写下面的代码 <!DOCTYPE html> &l…

计算机研究生就业方向之当老师(中小学)

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

股票购买接口系统怎么使用vn.py进行量化策略?

一般情况下&#xff0c;股票购买接口系统主要是可以运用在股票量化交易系统开发的一个大方向&#xff0c;也就是说&#xff0c;股票购买接口系统是根据这些量化的特点来开发的&#xff0c;就比如使用vn.py进行量化策略&#xff0c;在这方面&#xff0c;对交易者进行量化分析也起…

Web前端105天-day-41-JSCORE

JSCORE01 目录 前言 一、声明提升 二、宿主 window 三、断点功能 四、匿名函数解决全局污染 五、作用域链 六、闭包 七、私有 八、arguments 九、函数重载 十、方括号属性语法 十一、重载练习 十二、this 总结 前言 JSCORE01学习开始 一、声明提升 报错方案: 让…

走进SpringCloud微服务

微服务概述一、注册中心&#xff1a;Eureka ⭐⭐⭐1.1 原理1.2 代码二、负载均衡&#xff1a;Ribbon ⭐三、远程调用&#xff1a;Feigh ⭐⭐⭐3.1 原理3.2 代码四、熔断限流&#xff1a;Hystrix ⭐⭐⭐4.1线程池策略4.2 信号量隔离策略4.3 方法降级4.4 断路器、熔断器五、网关&…

MongoDB和MongoTemplate对于嵌套数据的判空查询

前言&#xff1a; 不知道有没有和小名一样&#xff0c;接触MongDB时间不长的小伙伴。由于MongoDB是以文档形式存储数据的&#xff0c;所以其中的数据类型相对MySql或者Oracle关系型数据库丰富一些&#xff08;MongoDB是NoSQL数据库这里比较不是很准确&#xff09; 我们在关系…

Dropout方法原理和使用方法

来源&#xff1a;投稿 作者&#xff1a;梦飞翔 编辑&#xff1a;学姐 为什么提出这种方法&#xff1f; 神经网络在训练过程中&#xff0c;由于正负样本不均衡、样本特征显著性不足、训练参数不合适等原因会导致发生过拟合现象&#xff0c;即模型参数陷入局部最优&#xff0c;仅…

QT6操作连接mysql数据库方法_增删改查

QT6操作mysql方法_增删改查 mysql数据库搭建相关方法&#xff1a; MySQL - 随笔分类 - txwtech - 博客园https://www.cnblogs.com/txwtech/category/1973054.htmlMySQL解压版配置方法 MySQL解压版配置方法 - txwtech - 博客园1.下载 https://downloads.mysql.com/archives/co…

【知识学习】C++QT配置opencv遇到的坑

最近要搞图像&#xff0c;老师说尽量用C&#xff0c;就开始研究配置opencv 当然&#xff0c;说在前面&#xff0c;C的比python的要麻烦特别多&#xff0c;所以如果不是必要的话&#xff0c;建议用python pip配opencv吧 C麻烦就在于要自己在本地编译一遍才能跑&#xff0c;直接…

如何将亚马逊Seller Central 用到极致~

不论是新手卖家还是有经验的老手&#xff0c;亚马逊卖家中心都是一个可以帮助卖家发展业务的好工具&#xff0c;对于许多新手小白来说&#xff0c;亚马逊这样巨大的平台仍有许多功能与服务等着挖掘。 什么是亚马逊卖家中心&#xff1f; 亚马逊卖家中心是第三方卖家用来管理和…

微信支付-全面详解(学习总结---从入门到深化)

微信支付_产品介绍 微信支付介绍 微信支付&#xff08;https://pay.weixin.qq.com&#xff09;是腾讯集团旗下中国领先 的第三方支付平台&#xff0c;一直致力于为用户和企业提供安全、便捷、专业的在线支付服务。 付款码支付 付款码支付是指用户展示微信钱包内的“付款码”给商…

指纹浏览器是什么?可以用来解决网络爬虫的什么问题?

在大数据时代的今天&#xff0c;各行各业的许多企业多多少少都会因为涉及到海外市场需要收集大量的市场信息&#xff0c;特别是对于跨境电商领域的商家来说&#xff0c;网络爬虫是必不可少的。因此&#xff0c;一定有很多从业者接触过网络爬虫&#xff0c;但对于刚打算进入这个…

ADI Blackfin DSP处理器-BF533的开发详解36:图像处理专题-RGB888 转 RGB565(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 作为一个最高600M主频&#xff0c;单核或双核的定点DSP&#xff0c;做图像处理还是挺行的&#xff0c;属于是老本行&#xff0c;那么我…

广州蓝景分享—HTML+CSS功能,让页面加载速度提高数倍

Hello&#xff0c;各位小伙伴&#xff0c;今天跟大家分享前端技术干货&#xff0c;页面加载速度问题。 首先我们都讨厌加载缓慢的页面&#xff01; 要知道加载时间每增加1秒&#xff08;0-5秒之间&#xff09;&#xff0c;网站转化率就会平均下降4.42%。页面加载时间的前五秒…

linux 虚拟机nat模式网络配置

文章目录1. linux 版本&#xff1a;2. 下载地址 Index of /centos-store/7.6.1810/isos/x86_64/ (liu.se)3. 账号密码&#xff1a;root root4.选择nat 模式&#xff0c;勾选 将主机虚拟适配器连接到此网络&#xff0c;勾选 使用本地DHCP服务将iP地址分配给虚拟机5.点击Nat 设置…

数据仓库分享

前言 数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它出于分析性报告和决策支持的目的而创建的。 数据仓库是一个数据集合 数据仓库是一个为业务决策提供数据支持的数据集合 数据仓库是通过监控业务流程的形式为业务决策提…

Css不常用的方法

flex布局换行之后&#xff0c;下面一行的布局会异常 .homeItemBox{ display: flex; flex-wrap: wrap; justify-content: flex-start;} .homeItem{ display: flex; width: calc((100% - 20rpx) / 4); flex-direction: column; align-items: center; flex-shrink: 0; …

盘点系列:一度大热的TWS耳机今年表现如何?

根据Canalys最新市场研究数据显示&#xff0c;全球智能个人耳机市场在2022年Q3已连续第二个季度出现下滑&#xff0c;出货量同比下降4%至1.136亿台。 而TWS是唯一出现增长的子类别&#xff01; Q3真无线耳机TWS销量达7690万部&#xff0c;同比增长6%。苹果&#xff08;含beats&…

软件测试基础理论体系学习6-黑盒测试方法白盒测试方法简述

13 白盒测试方法1 黑盒测试1.1 黑盒测试概述1.2 黑盒测试的使用场景1.3 “黑盒”的两种基本方法1.4 黑盒测试的优缺点1.4.1 优点1.4.2 缺点1.5 黑盒测试的测试用例设计方法2 白盒测试2.1 白盒测试概述2.2 逻辑覆盖2.3 语句覆盖2.3.1 基本思想是2.3.2 优点2.3.3 缺点2.4 判定覆盖…