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后关系图如下

二、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
多个节点部署成功。

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