【云原生-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.mzph.cn/news/159516.shtml

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

相关文章

Linux常用操作 Vim一般使用 SSH介绍 SSH密钥登录

目录 1. 常用命令 2. vim一般使用 3. SSH介绍 4. ssh密钥登录 1. 常用命令 1&#xff09;# 与 $ 提示的区别 # 表示用户有root权限&#xff0c;一般的以root用户登录提示符为#&#xff0c; $提示符表示用户为普通用户 2&#xff09;ifconfig 查看ip地址 eno1: 代表由主板…

“图纸保密大作战:上海迅软DSE解决方案守护机械公司核心资料

机械行业是我国重要的工业制造行业之一&#xff0c;相关企业在发展中往往需要用到ERP、PDM、PLM等系统来对产品信息进行管理&#xff0c;其中便涉及到大量文档和图纸等重要数据。然而随着业务的快速发展和数字化转型&#xff0c;机械行业也面临着如数据泄露、外来袭击攻击、内部…

以45°斜抛水平距离最远

已知&#xff1a;斜抛物体的初速度为 v 0 v_0 v0​&#xff08;与水平方向的夹角为 θ \theta θ&#xff09;&#xff0c;重力加速度为 g g g。 求&#xff1a;抛物轨迹方程&#xff1f; 垂直方向的速度为 v y v 0 sin ⁡ θ − g t v_yv_0 \sin \theta -gt vy​v0​sinθ−…

CNVD-2023-12632:泛微E-cology9 browserjsp SQL注入漏洞复现 [附POC]

文章目录 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC] 0x…

如何查找批量企业的联系方式?

​我们都知道&#xff0c;企业的联系方式在企业的年报中就能找到&#xff0c;但是年报上的电话真的是你要找的吗&#xff1f; 很多企业年报上留的是第三方代记账公司&#xff0c;或者是其他没用的号码&#xff0c;这对于做B端业务的企业来说是不够精准的。 市面上有很多做企业…

一起学docker系列之六如何搭建私服版本的Docker镜像仓库

目录 前言1 下载并运行私服版本的Docker镜像仓库2 准备上传私服的Docker镜像3 为镜像打上符合私服规范的标签4 修改Docker守护进程的配置文件5 推送镜像到私服版本的Docker镜像仓库6 验证私服的镜像结语 前言 Docker是一种开源的容器技术&#xff0c;可以让开发者和运维人员快…

Android : ListView + BaseAdapter-2简单应用

​​容器与适配器&#xff1a;​​​​​ http://t.csdnimg.cn/ZfAJ7 实体类 News.java package com.example.mylistviewadapter2.entity;public class News {private String title;private String content;private int img;public News(String title, String conte…

金蝶云星空部署包导出文件

文章目录 金蝶云星空部署包导出文件 金蝶云星空部署包导出文件 打开补丁包后&#xff0c;贴入导出文件的文件夹&#xff0c;然后按F2即可导出到目标文件夹。

2023年最佳Aspera替代方案,选择适合的Aspera替代方案

查找当前可用的Aspera替代方案。比较 2023年Aspera替代方案的评级、评论、定价和功能。列出了市场上最好的Aspera替代方案&#xff0c;它们提供与 IBM Aspera 类似的竞争产品。对下面的Aspera替代方案进行排序&#xff0c;以根据需求做出最佳选择。 1、镭速 镭速&#xff08;私…

java继承和重写(代码演示)

java中的继承和重写 概念 继承 在 Java 中&#xff0c;继承是面向对象编程中的重要概念&#xff0c;它允许一个类&#xff08;称为子类&#xff09;继承另一个类&#xff08;称为父类&#xff09;的属性和方法。子类可以继承父类的非私有属性和方法&#xff0c;并且可以添加…

每日一题 2304. 网格中的最小路径代价(中等,动态规划)

由于他每一行的每一个值都可以到下一行的所有节点&#xff0c;且路径的代价没有什么相关性&#xff0c;所以只能用 O(mn2) 的动态规划求解 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])…

PC分页操作

page-size 每页显示条目个数 current-page 当前页数 total 数据总数 current-change【currentPage 改变时会触发】 <el-paginationbackgroundlayout"prev, pager, next"align"right"style"padding: 10px":page-size"pageParams.pagesize…

连接k8s和凌鲨

通过连接k8s和凌鲨&#xff0c;可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接&#xff0c;通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…

【Java】基于SaaS模式的Java基层医院卫生健康云HIS系统源码

一、模板管理 模板分为两种&#xff1a;病历模板和报表模板。模板管理是运营管理的核心组成部分&#xff0c;是基层卫生健康云中各医疗机构定制电子病历和报表的地方&#xff0c;各医疗机构可根据自身特点特色定制电子病历和报表&#xff0c;制作的电子病历及报表可直接在业务…

【qsort学习及改造冒泡排序能排序任何数】

qsort学习及改造冒泡排序能排序任何数 qsort的使用 qsort的使用 这个函数也不是很复杂&#xff01;&#xff01;&#xff01; qsort(void*base,size_t num,size_t width,int(int (__cdecl *compare )(const void *elem1, const void *elem2 )))  void * base,为数组的基地…

【深度学习】python调用超分Real-ESRGAN

Real-ESRGAN是超分自然场景图和动漫图&#xff0c;视频也可以&#xff0c;项目地址&#xff1a;https://github.com/xinntao/Real-ESRGAN/tree/master 安装python包&#xff1a; basicsr>1.4.2 facexlib>0.2.5 gfpgan>1.3.5 numpy opencv-python Pillow torch>1.…

GD32替换STM32使用HAL库开发问题

GD32HAL库开发问题 1can初始化进入error handle2发送邮箱不能按照填写顺序发送3 GD32修改代码被stm32cudemx覆盖问题 1can初始化进入error handle HAL库的HAL_CAN_Init中&#xff0c;hcan->Instance->MSR寄存器无法清零&#xff0c;STM32先清零&#xff0c;再退出睡眠模…

编译 CUDA加速的 OpenCV-4.8.0 版本

文章目录 前言一、编译环境二、前期准备三、CMake编译四、VS编译OpenCV.sln五、问题 前言 由于项目需要用上CUDA加速的OpenCV&#xff0c;编译时也踩了不少坑&#xff0c;所以这里记录一下。 一、编译环境 我的编译环境是&#xff1a; Win10 RTX4050 CUDA-12.0 CUDNN 8.9.…

代码混淆不再愁:一篇掌握核心技巧

​ 1. 概述 代码混淆是将计算机程序的代码转换成一种功能上等价&#xff0c;但是难以阅读和理解的形式。 对于软件开发者来说&#xff0c;代码混淆可以在一定程度上保护程序免被逆向。 对于逆向工程师来说&#xff0c;学习代码混淆可以帮助我们研究反混淆技术。 2. 常见混淆…

半导体工艺控制设备1

半导体工艺控制设备对芯片良率至关重要&#xff0c;随着制程微缩需求倍增。工艺节点每缩减一代&#xff0c;工艺中产生的致命缺陷数量会增加 50%&#xff0c;因此每一道工序的良品率都要保持在非常高的水平才能保证最终的良品率。当工序超过 500 道时&#xff0c;只有保证每一道…