Helm v3安装与应用

Stella981
• 阅读 398

系统环境

系统版本:CentOS Linux release 7.8.2003 (Core)
Docker版本:Docker version 20.10.0, build 7287ab3
Helm 版本:v3.2.3
Kubernetes 版本:v1.17.3

Helm简单说明

有关 Helm V2 和 Helm V3 的架构和使用差异,以及Helm相关基本概念,网上有太多的资源,本文不再多做说明,重点说明下Helm安装与应用。

Helm 用途

做为 Kubernetes 的一个包管理工具,Helm具有如下功能:

  • 创建新的 chart

  • chart 打包成 tgz 格式

  • 上传 chart 到 chart 仓库或从仓库中下载 chart

  • 在Kubernetes集群中安装或卸载 chart

  • 管理用Helm安装的 chart 的发布周期

Helm 重要概念

Helm 有三个重要概念:

  • chart:包含了创建Kubernetes的一个应用实例的必要信息

  • config:包含了应用发布配置信息

  • release:是一个 chart 及其配置的一个运行实例

下载并安装 Helm 客户端

访问 Helm Github 下载页面 https://github.com/helm/helm/releases找到最新的客户端,里面有不同系统下的包,这里我们选择 Linux amd64,然后在 Linux 系统中使用 Wget 命令进行下载。

#下载Helm客户端
$ wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz
#接下来解压下载的包,然后将客户端放置到 /usr/local/bin/ 目录下:

#解压 Helm
$ tar -zxvf helm-v3.2.3-linux-amd64.tar.gz

#复制客户端执行文件到 bin 目录下,方便在系统下能执行 helm 命令
$ cp linux-amd64/helm /usr/local/bin/

注意:helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上,否则 helm 将不可用。

如果你不是在k8s集群master节点上使用helm,可使用如下方法:

# 安装当前k8s版本的kubectl工具
yum install -y kubectl-1.17.3-0

# 从master节点上拷贝/root/.kube文件:
scp -r root@MasterIP:/root/.kube /root/

# 我们可以在helm客户端执行安装,查看kubernetes命令
kubectl get pod -n kube-system

添加 Chart 仓库

在 Helm 中默认是不会添加 Chart 仓库,所以这里我们需要手动添加,下面是添加一些常用的 Charts 库,命令如下:

# 添加微软的仓库

helm repo add stable  http://mirror.azure.cn/kubernetes/charts/
helm repo add incubator  http://mirror.azure.cn/kubernetes/charts-incubator/
helm repo add bitnami  https://charts.bitnami.com/bitnami

# 查看仓库信息
helm repo list

#执行更新命令,将仓库中的信息进行同步:
helm repo update

# 移除仓库:
helm repo remove stable

Helm 的基本操作

安装应用

通过 Helm 在 Repo 中查询可安装的 Nginx 包:

helm search repo nginx
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
stable/nginx-ingress            1.41.3          v0.34.1         DEPRECATED! An nginx Ingress controller that us...
stable/nginx-ldapauth-proxy     0.1.6           1.13.5          DEPRECATED - nginx proxy with ldapauth
stable/nginx-lego               0.3.1                           Chart for nginx-ingress-controller and kube-lego
stable/gcloud-endpoints         0.1.2           1               DEPRECATED Develop, deploy, protect and monitor...

使用 -n Namespace 部署我们的应用:

# 创建命名空间blog
kubectl create namespace blog

# 查看创建的命名空间
kubectl get ns

# 选择一个chart在k8s上部署我们的应用
helm install nginx bitnami/nginx -n blog

# 查看应用状态
helm status nginx -n blog
helm list -n blog 

自定义参数安装应用

Helm 中支持使用自定义yaml 文件--set命令参数对要安装的应用进行参数配置,使用如下:

查看应用 chart 可配置参数

首先使用helm show values {仓库名称}/{应用名称}来查看对应应用的可配置参数:

helm show values bitnami/nginx

image:
  registry: docker.io
  repository: bitnami/nginx
  tag: 1.17.10-debian-10-r33
resources:
  limits: 
     cpu: 100m
     memory: 128Mi
  requests: 
     cpu: 100m
     memory: 128Mi
  ......(太长,略)

方式一:使用自定义 values.yaml 文件安装应用

使用自定义配置文件来配置安装应用的参数:

(1)创建自定义配置文件 values.yaml

cat > values.yaml << EOF

image:
  registry: docker.io
  repository: bitnami/nginx
resources:
  limits:
     cpu: 1000m
     memory: 1024Mi
  requests:
     cpu: 1000m
     memory: 1024Mi
service:
  type: NodePort
  port: 80

EOF

(2)使用自定义配置文件运行应用

helm install -f values.yaml nginx bitnami/nginx -n blog

(3)查看应用和服务

helm list -n blog

kubectl get svc -n blog
NAME    TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.105.233.105   <none>        80:30384/TCP   4m13s

方式二:使用 --set 配置参数进行安装

--set 参数是在使用 helm 命令时候添加的参数,可以在执行 helm 安装与更新应用时使用,多个参数间用,隔开,使用如下:

注意:如果配置文件和 --set 同时使用,则 --set 设置的参数会覆盖配置文件中的参数配置。

# 使用set创建一个release
helm install --set 'registry.registry=docker.io,registry.repository=bitnami/nginx' nginx bitnami/nginx -n blog

# 更新一个release
helm upgrade --set 'servers[0].port=8080' nginx bitnami/nginx -n blog

卸载应用

# 卸载应用,并保留安装记录
helm uninstall nginx -n blog --keep-history

# 查看全部应用(包含安装和卸载的应用)
helm list -n blog --all

# 卸载应用,不保留安装记录
helm delete nginx -n blog

升级应用

# 创建新的配置参数文件 values.yaml:
cat > values.yaml << EOF

service.type: NodePort
service.nodePorts.http: 30002

EOF

# 应用更新:
helm upgrade -f values.yaml nginx bitnami/nginx -n blog

# 查看新配置是否生效:
helm get values nginx -n blog

USER-SUPPLIED VALUES:
service.nodePorts.http: 30002
service.type: NodePort

渲染模板

如果想查看通过指定的参数渲染的 Kubernetes 部署资源模板,可以通过下面命令:

helm template bitnami/nginx -n mydlqcloud 

# 可以看到渲染的模板如下:

---
# Source: nginx/templates/svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: RELEASE-NAME-nginx
  labels:
    app.kubernetes.io/name: nginx
    helm.sh/chart: nginx-5.3.1
    app.kubernetes.io/instance: RELEASE-NAME
    app.kubernetes.io/managed-by: Helm
spec:
  type: LoadBalancer
  externalTrafficPolicy: "Cluster"
  ports:
    - name: http
      port: 80
      targetPort: http
  selector:
    app.kubernetes.io/name: nginx
    app.kubernetes.io/instance: RELEASE-NAME
---
# Source: nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: RELEASE-NAME-nginx
  labels:
    app.kubernetes.io/name: nginx
    helm.sh/chart: nginx-5.3.1
    app.kubernetes.io/instance: RELEASE-NAME
    app.kubernetes.io/managed-by: Helm
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: nginx
      app.kubernetes.io/instance: RELEASE-NAME
  replicas: 1
  template:
    metadata:
      labels:
        app.kubernetes.io/name: nginx
        helm.sh/chart: nginx-5.3.1
        app.kubernetes.io/instance: RELEASE-NAME
        app.kubernetes.io/managed-by: Helm
    spec:
      containers:
        - name: nginx
          image: docker.io/bitnami/nginx:1.17.3-debian-10-r63
          imagePullPolicy: "IfNotPresent"
          ports:
            - name: http
              containerPort: 8080

参考文档

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这