【云原生-Kurbernetes篇】 玩转K8S不得不会的HELM

Helm

  • 一、Helm
    • 1.1 使用背景
    • 1.2 Helm简介
    • 1.3 Helm的几个概念
    • 1.4 helm2 和 helm3 的区别
    • 1.5 chart包的关键组成
  • 二、Helm相关命令
    • 2.1 应用管理操作
    • 2.2 Helm repository仓库管理命令
    • 2.2 Helm chart包管理命令
    • 2.3 Helm release(实例) 管理命令
    • 2.4 Helm私有仓库管理命令
  • 三、部署Helm
    • 3.1 安装 helm
    • 3.2 使用Helm构建应用(使用仓库)
  • 四、自定义 Chart
    • 4.1 具体步骤
    • 4.2 实例
      • Step1 创建自定义chart
      • Step2 部署chart
      • Step3 部署ingress,进行访问测试
    • 4.3 升级与回滚测试
      • 4.3.1 升级
      • 4.3.2 回滚
    • 补充:另一种升级方式
  • 五、Helm仓库
    • 5.1 安装harbor
    • 5.2 安装 push 插件

一、Helm

官方网站: [Helm]

1.1 使用背景

在这里插入图片描述

近些年随着容器技术的流行,容器编排管理也随之蓬勃发展,其中尤其以Kubernetes(以下均简称为K8s)最为著名。

作为DevOps开发人员,产品的容器化部署、发布和测试是我们关注的焦点。

随着业务的深入,配置的复杂性也随之增长,因此我们采用Helm来进行容器化应用的配置管理。

1.2 Helm简介

HelmK8S的软件包(chart)管理器,类似于apt,yum和homebrew。

在这里插入图片描述

Helm可以实现将软件应用所有需要的资源及配置打包在一起,让k8s的应用管理实现高度的可配置化,并可通过单个helm命令一键部署和管理应用

1.3 Helm的几个概念

在这里插入图片描述

Helm的三大概念: chart(软件包)release(基于chart运行的实例)repository(存放chart的仓库)

  • Charts: Helm使用的打包格式,一个Chart包含了一组K8s资源集合的描述文件。Chart有特定的文件目录结构,如果开发者想自定义一个新的 Chart,只需要使用Helm create命令生成一个目录结构即可进行开发。
  • Release: 通过Helm将Chart部署到 K8s集群时创建的特定实例,包含了部署在容器集群内的各种应用资源。
  • Chart Repository: Helm Chart包仓库,提供了很多应用的Chart包供用户下载使用,官方仓库的地址是https://hub.helm.sh,可以在上面发现很多有意思的项目。之后我们会在官方hub找一个应用做个简单的Demo。

总结:Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。

1.4 helm2 和 helm3 的区别

功能Helm 3Helm 2
依赖关系无 Tiller,直接与 Kubernetes API 交互使用 Tiller 作为与 Kubernetes API 的代理
安全性直接使用 Kubernetes 的 RBACTiller 拥有 ClusterAdmin 权限
存储Values 存储在 release 对象中,无需 ConfigMapValues 存储在 Tiller 的 ConfigMap 中
配置文件仅需一个 Chart.yaml 文件来描述 Chart需要 Chart.yaml、values.yaml、requirements.yaml 文件来描述 Chart
CRD 支持支持使用 CRD (Custom Resource Definition)不支持使用 CRD
升级策略支持原子性升级,失败可以回滚支持原子性升级,失败不会回滚至上一版本
命名空间默认安装到 kube-system 命名空间默认安装到默认命名空间
插件系统插件架构更简单,更易于开发和维护插件系统相对复杂
API 版本支持最新的 Kubernetes API 版本仅支持 Helm 版本发布时所对应的 Kubernetes API 版本
安装配置去除了初始化、升级、删除等命令的需求,直接使用 Helm chart 安装需要先初始化并部署 Tiller,然后才能使用 Helm
社区支持新版本的默认版本,得到更多活跃社区的关注仍然有相关社区支持,但主要关注点已转向 Helm 3
兼容性在 Helm 3 中,可以通过 helm 2to3 插件进行迁移不支持向后兼容,需重新安装 Chart

1.5 chart包的关键组成

在这里插入图片描述

1)Chart.yaml

chart软件包的自描述文件。

描述chart的元数据信息,包括chart名称(name)chart版本(version)应用版本(appVersion)应用描述(description)

2)templates目录:

目录里包含部署应用所需要的各种资源对象的yaml配置模板文件

3)values.yaml

包含templates目录中的yaml配置模板文件所引用的变量的值

比如templates目录中的yaml配置模板文件中的变量 {{ .Values.busybox.image}} 引用的是 values.yaml 文件中的 busybox.image 字段值

二、Helm相关命令

2.1 应用管理操作

# 列出charts仓库中所有可用的应用
helm search# 查询指定应用
helm search memcached# 查询指定应用的具体信息
helm inspect stable/memcached# 用helm安装软件包,--name:指定release名字
helm install --name memcached1 stable/memcached# 查看安装的软件包
helm list# 删除指定引用
helm delete memcached1

2.2 Helm repository仓库管理命令

#添加chart仓库
helm repo add <仓库名称> <仓库URI地址>   #查看chart仓库列表
helm repo list#更新chart仓库中的chart软件包列表
helm repo update#删除chart仓库
helm repo remove  <仓库名称>#查看仓库中可用的chart包列表
helm search repo <仓库名称>#查看仓库中指定的chart包的所有历史版本列表
helm search repo <仓库名称/软件包> -l#查看chart包的基本信息
helm show chart <仓库名称/软件包>   #查看chart包的所有信息
helm show all <仓库名称/软件包>

2.2 Helm chart包管理命令

#从仓库拉取chart包
helm pull <仓库名称/软件包> #创建一个chart目录
helm create <软件包>  #检查chart配置语法是否正确
helm lint <chart目录> #将chart目录打包成chart包(tar包格式)
helm package <chart目录>

2.3 Helm release(实例) 管理命令

#通过chart包安装实例
helm install <实例名称> <仓库名称/软件包> -n 命名空间 [--version=<chart版本>] #查看helm安装的实例
helm ls|list -n 命名空间#查看实例的状态
helm status <实例名称> -n 命名空间#卸载实例
helm uninstall <实例名称> -n 命名空间、#升级实例
helm upgrade -n 命名空间 <实例名称> <chart包>#查看实例的历史版本列表
helm history -n 命名空间 <实例名称>#回滚实例到指定的chart历史版本
helm rollback -n 命名空间 <实例名称> <chart版本序号>    

2.4 Helm私有仓库管理命令

私有仓库地址格式: http://<私有仓库URL地址>/chartrepo/<项目名>

helm repo add <私有仓库名称> <私有仓库地址> --username=<仓库用户> --password=<用户密码>helm push <chart包> <私有仓库名称>

三、部署Helm

3.1 安装 helm

下载二进制 Helm client 安装包

下载地址:https://github.com/helm/helm/tags

在这里插入图片描述

#解压
tar -zxvf helm-v3.6.0-linux-amd64.tar.gzmv linux-amd64/helm /usr/local/bin/helm
#版本查看
helm version

在这里插入图片描述

#命令补全
source <(helm completion bash)

在这里插入图片描述

3.2 使用Helm构建应用(使用仓库)

添加常用的 chart 仓库

#添加 Bitnami 官方仓库
helm repo add bitnami https://charts.bitnami.com/bitnami#添加 Azure 中国提供的稳定版 Helm Charts 仓库,该仓库中包含了丰富的 Kubernetes 应用的 Helm Charts
helm repo add stable http://mirror.azure.cn/kubernetes/charts#阿里云提供的 Helm Charts 仓仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartshelm repo add incubator https://charts.helm.sh/incubator

在这里插入图片描述

仓库(repository)相关操作

#更新仓库列表
helm repo update          
helm repo list

在这里插入图片描述

#查看stable仓库可用的 charts 列表(稳定版)
helm search repo stable

在这里插入图片描述

 #查看指定 chart 的基本信息
helm show chart stable/mysql #获取指定 chart 的所有信息
helm show all stable/mysql		 

在这里插入图片描述

Release的相关操作

##创建实例##
#指定 release 的名字为 my-redis,-n 指定部署到 k8s 的 namespace
helm install my-redis bitnami/redis [-n default]  #不指定 release 的名字时,需使用 –generate-name 随机生成一个名字
helm install bitnami/redis --generate-name 

在这里插入图片描述
在这里插入图片描述

#查看所有 release
helm ls/list

在这里插入图片描述

#删除指定的 release
helm uninstall my-redis 

在这里插入图片描述

四、自定义 Chart

Charts 可以在 Helm 仓库中下载,也可以自己创建和定义。

4.1 具体步骤

  1. 创建 Chart 文件夹结构: 包括 Chart.yaml、values.yaml 以及 templates 文件夹等。
  2. 编写 Chart.yaml: 定义了 Chart 的名称、版本、描述信息等。
  3. 编写 values.yaml: 定义了用户可以定制化的变量,如应用名称、镜像版本、端口号等。
  4. 编写模板文件: 定义了实际的 Kubernetes 资源以及如何填充变量。

创建完成 Chart 后,用户可以使用 Helm 将其部署到 Kubernetes 集群中,Helm 会按照 Chart 中定义的内容生成实际的 Kubernetes 资源并将其部署到集群中

4.2 实例

以nginx为例

Step1 创建自定义chart

创建 Chart 文件夹结构

#工作目录
mkdir -p /opt/helm
cd /opt/helmhelm create nginx

在这里插入图片描述

修改 Chart.yaml文件

vim nginx/Chart.yamlapiVersion: v2
name: nginx                     #chart名字
description: A Helm chart for Kubernetes
type: application               #chart类型,application或library
version: 0.1.0                  #chart版本
appVersion: 1.16.0              #application部署版本

在这里插入图片描述

修改 values.yaml文件

vim nginx/values.yaml
replicaCount: 1image:repository: nginxpullPolicy: IfNotPresenttag: "latest"                 #设置镜像标签imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""serviceAccount:create: trueannotations: {}name: ""podAnnotations: {}podSecurityContext: {}# fsGroup: 2000securityContext: {}# capabilities:#   drop:#   - ALL# readOnlyRootFilesystem: true# runAsNonRoot: true# runAsUser: 1000service:type: ClusterIPport: 80ingress:enabled: true                 #开启 ingressclassName: ""annotations: {}# kubernetes.io/ingress.class: nginx# kubernetes.io/tls-acme: "true"hosts:- host: www.kgc.com         #指定ingress域名paths:- path: /pathType: Prefix      #指定ingress路径类型tls: []#  - secretName: chart-example-tls#    hosts:#      - chart-example.localresources:limits:cpu: 100mmemory: 128Mirequests:cpu: 100mmemory: 128Miautoscaling:enabled: falseminReplicas: 1maxReplicas: 100targetCPUUtilizationPercentage: 80# targetMemoryUtilizationPercentage: 80nodeSelector: {}tolerations: []affinity: {}

在这里插入图片描述

在这里插入图片描述

打包 chart

#检查依赖和模版配置是否正确
helm lint nginx        

在这里插入图片描述

#打包 chart
helm package nginx   

在这里插入图片描述

Step2 部署chart

#使用 --dry-run 参数验证 Chart 的配置,并不执行安装
helm install nginx ./nginx --dry-run --debug

在这里插入图片描述

#部署 chart,release 版本默认为 1
helm install nginx ./nginx -n default           
或者
helm install nginx ./nginx-0.1.0.tgz

在这里插入图片描述

helm lskubectl get pod,svc

在这里插入图片描述

##补充##
#可根据不同的配置来 install,默认是 values.yaml
#values-prod.yaml为自定义的配置清单文件
helm install nginx ./nginx -f ./nginx/values-prod.yaml

Step3 部署ingress,进行访问测试

Ingress部署

#获取yaml文件
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yamlwget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

在这里插入图片描述

#部署
kubectl apply -f mandatory.yaml
kubectl apply -f service-nodeport.yaml#查看
kubectl get pod,svc -n ingress-nginxkubectl get ingress

在这里插入图片描述

访问测试

在这里插入图片描述

curl http://www.byyb.com

在这里插入图片描述

4.3 升级与回滚测试

4.3.1 升级

修改为 NodePort 访问 后,进行升级

修改自定义chart

vim nginx/values.yaml
service:type: NodePortport: 80nodePort: 30080ingress:enabled: false

在这里插入图片描述

vim nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:name: {{ include "nginx.fullname" . }}labels:{{- include "nginx.labels" . | nindent 4 }}
spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: httpprotocol: TCPname: httpnodePort: {{ .Values.service.nodePort }}              #指定 nodePortselector:{{- include "nginx.selectorLabels" . | nindent 4 }}

在这里插入图片描述

升级release

#升级 release,release 版本加 1
helm upgrade nginx nginx 

在这里插入图片描述

kubectl get svccurl 192.168.2.105:31134

在这里插入图片描述

4.3.2 回滚

根据 release 版本回滚。

#查看 release 版本历史
helm history nginx             helm rollback nginx 1           #回滚 release 到版本1helm history nginx           #nginx release 已经回滚到版本 1#通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。

在这里插入图片描述

补充:另一种升级方式

在命令行使用 --set 指定参数来部署(install,upgrade)release

注:此参数值会覆盖掉在 values.yaml 中的值,如需了解其它的预定义变量参数,可查看 helm 官方文档。

helm upgrade nginx nginx --set image.tag='1.15'

五、Helm仓库

helm 可以使用 harbor 作为本地仓库,将自定义的 chart 推送至 harbor 仓库。

5.1 安装harbor

#上传 harbor离线安装包 和 docker-compose 文件到 /opt 目录
cd /optcp docker-compose /usr/local/bin/chmod +x /usr/local/bin/docker-composetar zxf harbor-offline-installer-*
cd harbor/

在这里插入图片描述

vim harbor.yml
hostname: 192.168.2.106
harbor_admin_password: Harbor12345     #admin用户初始密码
data_volume: /data                     #数据存储路径,自动创建
chart:absolute_url: enabled                #在chart中启用绝对url
log:level: infolocal:rotate_count: 50rotate_size: 200Mlocation: /var/log/harbor          #日志路径

在这里插入图片描述

#安装带有 Clair service 和 chart 仓库服务的 Harbor
./install.sh --with-clair --with-chartmuseum

在这里插入图片描述

5.2 安装 push 插件

push插件有两种安装方式,在线安装和离线安装,由于网络原因,本次选择离线安装的方式。

补充一下在线安装的方法:helm plugin install https://github.com/chartmuseum/helm-push

离线安装

#获取源码包
wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz
#新建工作目录
mkdir ~/.local/share/helm/plugins/helm-push#解压
tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C 
~/.local/share/helm/plugins/helm-pushhelm repo ls

在这里插入图片描述

#登录 Harbor WEB UI 界面,创建一个新项目
浏览器访问:http://192.168.2.100 
默认的管理员用户名和密码是 admin/Harbor12345点击 “+新建项目” 按钮填写项目名称为 “chart_repo”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目

在这里插入图片描述
在这里插入图片描述

#添加仓库
helm repo add harbor http://192.168.2.100/chartrepo/chart_repo --username=admin --password=Harbor12345
#注:这里的 repo 的地址是<Harbor URL>/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称, 则默认使用 library 这个项目。

在这里插入图片描述

#推送 chart 到 harbor 中
cd /opt/helm
helm push nginx harbor

在这里插入图片描述

查看 chart_repo 项目中的 Helm Charts

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA的音乐偏好度推荐系统

项目编号&#xff1a; S 012 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S012&#xff0c;文末获取源码。} 项目编号&#xff1a;S012&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…

用css实现原生form中radio单选框和input输入框的hover样式以及聚焦focus的样式

一.问题描述&#xff1a;用css实现原生form中radio单选框和input的hover已经focus的样式 在实际的开发中&#xff0c;一般公司ui都会给效果图&#xff0c;比如单选按钮radio样式&#xff0c;input输入框hover的时候样式&#xff0c;以及focus的时候样式&#xff0c;等等&#…

练习九-利用状态机实现比较复杂的接口设计

练习九-利用状态机实现比较复杂的接口设计 1&#xff0c;任务目的&#xff1a;2&#xff0c;RTL代码3&#xff0c;RTL原理框图4&#xff0c;测试代码5&#xff0c;波形输出 1&#xff0c;任务目的&#xff1a; &#xff08;1&#xff09;学习运用状态机控制的逻辑开关&#xff…

小红书干货类笔记怎么写?建议收藏

小红书干货类笔记是指在小红书这个社交平台上&#xff0c;用户分享的各种实用、有价值的生活技巧、经验、心得等内容的笔记。这类笔记通常具有以下特点&#xff1a;内容详实、实用性强、独特见解、图文并茂。 比如&#xff1a;某个妆要怎么化、某种技能该怎么学、某个城市该怎…

Linux 中 .tar 和 tar.gz 的区别

1、前言 有时候你会发现&#xff0c;即便是有些拥有 3 年左右工作经验的运维或开发工程师对 .tar 和 .tar.gz 的区别并不是很清楚。.tar 和 .tar.gz 是在 Linux 系统中用于打包和压缩文件的两种常见格式。它们之间的主要区别在于压缩算法和文件扩展名。 2、区别 .tar .tar 是…

一款好用的window ssh远程终端term工具

这是一款可以在window10上运行的ssh终端工具. 官方下载地址&#xff1a; https://github.com/kingToolbox/WindTerm/releases 具体页面如下 下载解压后&#xff1a; 把它移动到C目录下面&#xff0c;并且搞一个桌面快捷方式&#xff0c;就可以了

厦门某智慧社区的智慧排水监测系统实施落地

厦门某智慧社区的智慧排水监测系统实施落地 智慧社区的排水系统是一种高度智能化、高效且环保的排水解决方案&#xff0c;它结合了自动化控制系统、计算机网络技术、传感监测技术以及环保理念等多个领域的知识。其主要作用是确保社区的排水系统能够高效、稳定、环保地运行&…

【计算方法与科学建模】矩阵特征值与特征向量的计算(一):Jacobi 旋转法及其Python实现

文章目录 一、Jacobi 旋转法1. 基本思想2. 计算过程演示3. 注意事项 二、Python实现迭代过程&#xff08;调试&#xff09; 矩阵的特征值&#xff08;eigenvalue&#xff09;和特征向量&#xff08;eigenvector&#xff09;在很多应用中都具有重要的数学和物理意义。Jacobi 旋转…

作品Demo:大全

实用小demo 1.3D-地图工程 获取连接&#xff1a;nullhttps://m.tb.cn/h.5kzPTgJ?tkRPBlWep4ZIf 2.3D-饼图 获取连接&#xff1a;https://m.tb.cn/h.5Pt4A8k?tkXRzWWepUnu4https://m.tb.cn/h.5Pt4A8k?tkXRzWWepUnu4

Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问

Wagtail-基于Python Django的内容管理系统CMS实现公网访问 文章目录 Wagtail-基于Python Django的内容管理系统CMS实现公网访问前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个…

Redis-Day1基础篇(初识Redis, Redis常见命令, Redis的Java客户端)

Redis-Day1基础篇 初识Redis认识NoSQL认识Redis安装Redis启动RedisRedis客户端 Redis命令数据结构介绍通用命令操作命令StringHashListSetSortedSet Redis的Java客户端客户端对比Jedis客户端Jedis快速入门Jedis连接池 SpringDataRedis客户端SpringDataRedis概述SpringDataRedis…

反电诈指南:如何通过技术手段精准有效的识别银行卡出租出售行为?

目录 出租出售的银行卡被用来做什么&#xff1f; 个人出租出售银行卡的法律后果 如何通过技术手段快速识别被出租出售的银行卡 电信网络诈骗已成为一种普遍且危害性极大的犯罪行为。其中&#xff0c;银行卡和电话卡是诈骗者最常利用的工具。这些卡不仅被用于线上和线下的欺诈活…