晓夏

YoungCheung

Zhang Sir's technical way

helm 基本使用和案例

浏览量:146

一、什么是 Helm Helm

 为团队提供了在 Kubernetes 内部创建、安装和管理应用程序时需要协作的工具,有点类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。

有了 Helm,开发者可以:

  • 查找要安装和使用的预打包软件(Chart)

  • 轻松创建和托管自己的软件包

  • 将软件包安装到任何 K8s 集群中

  • 查询集群以查看已安装和正在运行的程序包

  • 更新、删除、回滚或查看已安装软件包的历史记录

Helm 组件和相关术语

helm

  • Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

Chart

  • Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

Repoistory

  • Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

Release

  • 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。

是直接与k8s api互通 无需再helm init 创建服务端,

比较大的改动是,移除 Tiller(Helm 2 是一种 Client-Server 结构,客户端称为 Helm,服务器称为 Tiller)。Helm 3 只有客户端结构,客户端仍称为 Helm。如下图所示,它的操作类似于 Helm 2 客户端,但客户端直接与 Kubernetes API 服务器交互

去除Tiller后关系图如下

image.png


二、Helm安装

地址 https://helm.sh/docs/intro/install/

$ wget https://get.helm.sh/helm-v3.8.1-linux-amd64.tar.gz
$ tar xf helm-v3.8.1-linux-amd64.tar.gz
$ mv linux-amd64/helm /usr/local/bin/helm
$ helm version
version.BuildInfo{Version:"v3.8.1", GitCommit:"5cb9af4b1b271d11d7a97a71df3ac337dd94ad37", GitTreeState:"clean", GoVersion:"go1.17.5"}

#命令补全
$  vim ~/.bashrc
 source <(helm completion bash) 
$  source ~/.bashrc


三、helm使用

先添加常用的chart源
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add aliyuncs https://apphub.aliyuncs.com

#查看chart列表
$ helm repo list
NAME         	URL                                       
bitnami      	https://charts.bitnami.com/bitnami        
aliyuncs     	https://apphub.aliyuncs.com

案例:以部署nginx为例

$ helm search repo nginx
NAME                             	CHART VERSION	APP VERSION         	DESCRIPTION                                       
aliyuncs/nginx                   	5.1.5        	1.16.1              	Chart for the nginx server                        
aliyuncs/nginx-ingress           	1.30.3       	0.28.0              	An nginx Ingress controller that uses ConfigMap...
aliyuncs/nginx-ingress-controller	5.3.4        	0.29.0              	Chart for the nginx Ingress controller            
aliyuncs/nginx-lego              	0.3.1        	                    	Chart for nginx-ingress-controller and kube-lego  
aliyuncs/nginx-php               	1.0.0        	nginx-1.10.3_php-7.0	Chart for the nginx php server                    
bitnami/nginx                    	9.9.7        	1.21.6              	NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller 	9.1.14       	1.1.2               	NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel              	0.1.9        	0.4.7               	NGINX Open Source for Intel is a lightweight se...
ingress-nginx/ingress-nginx      	4.0.18       	1.1.2               	Ingress controller for Kubernetes using NGINX a...
bitnami/kong                     	5.0.2        	2.7.0               	Kong is a scalable, open source API layer (aka ...

选择aliyuncs/nginx 的chart包 先下载看看包有什么内容

$ helm pull aliyuncs/nginx --untar
#查看结构
$ tree nginx/
nginx/
├── Chart.yaml
├── ci
│?? └── values-with-ingress-metrics-and-serverblock.yaml
├── README.md
├── templates
│?? ├── deployment.yaml
│?? ├── _helpers.tpl
│?? ├── ingress.yaml
│?? ├── NOTES.txt
│?? ├── server-block-configmap.yaml
│?? ├── servicemonitor.yaml
│?? ├── svc.yaml
│?? └── tls-secrets.yaml
├── values.schema.json
└── values.yaml

2 directories, 13 files

现在开始正式安装nginx到我们的集群中

直接在线安装aliyuncs/nginx

my-ngiinx为release名称

service.type=NodePort表示将tomcat的service对外暴露端口的方式改为NodePort(缺省为LoadBalancer)

persistence.enabled=false 表示将不启用持久化存储卷,测试暂不需要使用这个

$ helm install my-nginx aliyuncs/nginx --set service.type=NodePort --set persistence.enabled=false
NAME: my-nginx
LAST DEPLOYED: Tue Mar 29 15:48:21 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Get the NGINX URL:

  export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services my-nginx)
  export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
  echo "NGINX URL: http://$NODE_IP:$NODE_PORT/"
  
$ kubectl get all
NAME                            READY   STATUS    RESTARTS   AGE
pod/my-nginx-5c4ccb468f-895gr   1/1     Running   0          39s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/kubernetes   ClusterIP   172.252.0.1      <none>        443/TCP                      20d
service/my-nginx     NodePort    172.252.84.184   <none>        80:38421/TCP,443:32480/TCP   39s

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-nginx   1/1     1            1           39s

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/my-nginx-5c4ccb468f   1         1         1       39s


image.png

多个节点部署成功。










神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。