Helm基础应用
helm是个包管理工具,类似Linux操作系统。Ubuntu的apt或者centos yum的包管理工具,helm就是u我们给k8s集群加了一个对应的仓库,然后用helm命令行装软件包,通过helm命令装,他会直接装在你的k8s集群里面去,helm属于一个k8s集群的包管理工具
15年年底发布的,目前三个三个版本v1 v2 v3 ,v1 和v2 已经很少用了,直接用v3
helm概念:
我们自己构建helm仓库的时候:有个chart的概念
Chart
chart就是helm的程序包,一个chart就是一个包,相当于rpm 或者deb包,chart本身包含了一个包所依赖的所有东西,对应的安装包安装文件,还有对应的仓库数据库之类的,一个chart相当于一个包 rpm或者deb包
Repository
集中存储和分发chart的仓库,类似于yum仓库或者apt仓库,类似docker的harbor
我们要自己做这个仓库,自己做的chart要放到这个仓库里面去
Config
配置信息,一个chart安装实例化安装运行时使用的配置信息
Release
Chart实例化配置后运行于Kubernetes集群中的一个应用实例;在同一个集群上,一个 Chart可以使用不同的Config重复安装多次,每次安装都会创建一个新的Release(发布),我们装一个chart一个程序本身安装一个会对应一个release 可以理解为一个版本,如果更新了会装另外一个版本,就是你当前安装到你群集上的一个应用程序的版本,一个chart的一个版本
说白了就是把我们写的deployment的yaml 文件 service文件 对应的配置还有依赖的信息集中起来,然后有对应的命令行给我们生成对应的数据库(一个本地数据库)然后helm有个create 会给我们自动创建对应的包名称。
主流版本v2 v3 现在v2用的很少了,以前v2的版本里面helm本身有个客户端以及与kubernetes的 api交互的服务端叫Tiller,Helm主要由与用户交互的客户端、与Kubernetes API交互的服务端Tiller和Chart仓库(repository)组成,v3已经没有Tiller了,
helm客户端从对应的chart仓库下载东西,然后把他安装部署到k8s集群上去,k8s集群会有个类似Tiller的服务器,Tiller负责在k8s上版本管理,release版本管理
v3 Tiller被取消了,现在都是各种各样的crd,自定义的资源
之前我们写deployment的时候一个一个写,一次性装一个deployment或者deployment里面写service,也可以一个yaml文件里面可以写deployment出来,没有问题,但是先后顺序无法定义,但是chart本身可以管理复杂应用,这个复杂应用就是,我们装一个chart包里面,里面包含很多很多应用,这些应用可以定义你的先后顺序,相互之间依赖关系,升级简单,定义钩子升级更新,分享:可以共享权限,有权限就可以使用,还可以回滚
chart最主要就是为了一次性部署多个应用的时候,chart更加方便一些,可能公司一次性部署十几个微服务,这十几个微服务,一个一个部署会很慢,可以做成chart,这个chart就包含会使用到的程序包,就可以通过chart一次性安装部署,一次性可以更新升级
使用
helm在操作系统上安装就是个helm客户端,把这个客户端命令行安装就行了,对应的想使用仓库,还得指定你的yum源,apt源,这里也是一样,集群上默认没有helm工具的,需要下载安装
下载3.11.2
https://github.com/helm/helm/releases/tag/v3.11.2
wget https://get.helm.sh/helm-v3.11.2-linux-amd64.tar.gz
root@k8s-master1:/apps# tar xf helm-v3.11.2-linux-amd64.tar.gz
#解包
root@k8s-master1:/apps# cd linux-amd64/
#进去
root@k8s-master1:/apps/linux-amd64# cp helm /usr/bin/
#这就是个命令行 移动到 $PATH认识的位置 就可以使用了
root@k8s-master1:/apps/linux-amd64# helm version
version.BuildInfo{Version:"v3.11.2", GitCommit:"912ebc1cd10d38d340f048efaf0abda047c3468e", GitTreeState:"clean", GoVersion:"go1.18.10"}
#出现这些就说明安装成功了
安装成功以后就可以在本地添加官方的仓库
root@k8s-master1:/apps/linux-amd64# helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
root@k8s-master1:/apps/linux-amd64# helm repo add incubator https://charts.helm.sh/incubator
"incubator" has been added to your repositories
# helm repo add 添加仓库命令
我们就可以用helm命令行和查询yum或者apt似的之间查询
第三方包
Helm Hub上还维护有众多第三方仓库,这些仓库都可以由helm repo命令添加到本地直接使用,而且也只能添加为本地仓库后才能够作为内部Chart使用。例如,维护有众多应用Chart且活跃度较高的Bitnami组织也拥有自己的Chart仓库,我们同样可以将其添加为本地仓库,如下面的命令所示。
root@k8s-master1:/apps/linux-amd64# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
提示
Bitnami是一个开源项目,由Daniel Lopez Ridruejo于2003年在西班牙塞维利亚创立,其核心目标 旨
在为开源的Web应用程序、开发栈以及虚拟设备提供安装程序或安装软件包。
然后就可以更新目前三个仓库的源
root@k8s-master1:/apps/linux-amd64# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "incubator" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈
查询某个包的版本
在Helm中搜索与关键词 "etcd" 相关的 Helm Charts(Helm包)的命令
对现有的仓库搜索
root@k8s-master1:/apps/linux-amd64# helm search repo etcd
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/etcd 9.5.0 3.5.9 etcd is a distributed key-value store designed ...
#chart版本 #app版本
incubator/etcd 0.7.7 3.2.26 DEPRECATED Distributed reliable key-value store...
stable/etcd-operator 0.11.2 0.9.4 DEPRECATED CoreOS etcd-operator Helm chart for ...
stable/zetcd 0.1.11 0.0.3 DEPRECATED CoreOS zetcd Helm chart for Kubernetes
root@k8s-master1:/apps/linux-amd64#
helm:这是Helm命令行工具的名称,用于管理和部署Kubernetes应用程序的包。它允许您查找、安装、升级和删除Helm Charts。
search:这是Helm命令的一个子命令,用于在Helm Chart仓库中搜索特定关键词的Charts。
repo:这是Helm命令的另一个子命令,用于与Helm Chart仓库进行交互,包括搜索、添加、删除和列出Charts。
etcd:这是您要搜索的关键词。在这种情况下,您正在搜索与 "etcd" 相关的Helm Charts,以查找适合部署etcd(分布式键值存储系统)的Helm Charts。
还可以通过对全部的仓库进行搜索
root@k8s-master1:/apps/linux-amd64# helm search hub etcd
URL CHART VERSION APP VERSION DESCRIPTION
https://artifacthub.io/packages/helm/bitnami-ak... 8.5.8 3.5.5 etcd is a distributed key-value store designed ...
https://artifacthub.io/packages/helm/bitnami/etcd 9.5.0 3.5.9 etcd is a distributed key-value store designed ...
https://artifacthub.io/packages/helm/wenerme/etcd 9.5.0 3.5.9 etcd is a distributed key-value store designed ...
https://artifacthub.io/packages/helm/wener/etcd 9.5.0 3.5.9 etcd is a distributed key-value store designed ...
https://artifacthub.io/packages/helm/kubeblocks... 0.7.0-alpha.8 v3.5.6 etcd is a strongly consistent, distributed key-...
https://artifacthub.io/packages/helm/cloudnativ... 2.2.3 3.3.13 etcd is a distributed key value store that prov...
https://artifacthub.io/packages/helm/riftbit/etcd 6.8.4 3.5.0 etcd is a distributed key value store that prov...
https://artifacthub.io/packages/helm/gardener-c... 5.3.2 v3.5.2 Helm chart for etcd
https://artifacthub.io/packages/helm/media-stre... 0.0.5 A Helm chart to deploy etcd for MSM
####省略下面内容
对某个包进行详细查看
root@k8s-master1:/apps/linux-amd64# helm show all bitnami/etcd
annotations:
category: Database
images: |
- name: etcd
image: docker.io/bitnami/etcd:3.5.9-debian-11-r118
- name: os-shell
image: docker.io/bitnami/os-shell:11-debian-11-r60
licenses: Apache-2.0
apiVersion: v2
appVersion: 3.5.9
dependencies:
- name: common
repository: oci://registry-1.docker.io/bitnamicharts
tags:
- bitnami-common
version: 2.x.x
description: etcd is a distributed key-value store designed to securely store data
across a cluster. etcd is widely used in production on account of its reliability,
fault-tolerance and ease of use.
home: https://bitnami.com
icon: https://bitnami.com/assets/stacks/etcd/img/etcd-stack-220x234.png
keywords:
#省略下面内容
安装
安装可以执行去那个仓库下载或者指定名称
安装前测试有没有错误
root@k8s-master1:/apps/linux-amd64# helm install testop stable/etcd-operator --dry-run -n test
# testop 是起的名字
# stable/etcd-operator 这个是上面查到etcd的地址
# --dry-run 是不安装 测试下有没有报错
# -n test 指定名称空间
执行后会打印出很多yaml文件 ,这是安装的程序本身包含的chart里面 包含的安装 yaml文件
直接安装
root@k8s-master1:/apps/linux-amd64# kubectl create namespace test
namespace/test created
#创建个名称空间 因为我们要把etcd安装到这个名称空间里面
安装
root@k8s-master1:/apps/linux-amd64# helm install testop stable/etcd-operator -n test
WARNING: This chart is deprecated
W0913 10:33:16.536818 98208 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W0913 10:33:16.568109 98208 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W0913 10:33:18.571132 98208 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
NAME: testop
LAST DEPLOYED: Wed Sep 13 10:33:18 2023
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. etcd-operator deployed.
If you would like to deploy an etcd-cluster set 'customResources.createEtcdClusterCRD' to true in values.yaml
Check the etcd-operator logs
export POD=$(kubectl get pods -l app=testop-etcd-operator-etcd-operator --namespace test --output name)
kubectl logs $POD --namespace=test
安装成功
查看一下
root@k8s-master1:/apps/linux-amd64# kubectl get all -n test
NAME READY STATUS RESTARTS AGE
pod/testop-etcd-operator-etcd-backup-operator-777d6d9c9c-69fnk 1/1 Running 0 46s
pod/testop-etcd-operator-etcd-operator-777d9bbfc5-7bzb5 1/1 Running 0 46s
pod/testop-etcd-operator-etcd-restore-operator-5567d7b586-jltr7 1/1 Running 0 46s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/etcd-restore-operator ClusterIP 10.103.42.65 <none> 19999/TCP 46s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/testop-etcd-operator-etcd-backup-operator 1/1 1 1 46s
deployment.apps/testop-etcd-operator-etcd-operator 1/1 1 1 46s
deployment.apps/testop-etcd-operator-etcd-restore-operator 1/1 1 1 46s
NAME DESIRED CURRENT READY AGE
replicaset.apps/testop-etcd-operator-etcd-backup-operator-777d6d9c9c 1 1 1 46s
replicaset.apps/testop-etcd-operator-etcd-operator-777d9bbfc5 1 1 1 46s
replicaset.apps/testop-etcd-operator-etcd-restore-operator-5567d7b586 1 1 1 46s
卸载
root@k8s-master1:/apps/linux-amd64# helm uninstall testop -n test
release "testop" uninstalled
1.26版本无法使用helm
因为api群组不一样