kubernetes系列(十六) - Helm安装和入门

1. helm简介

1.1 为何须要helm

在没使用helm以前,向kubernetes部署应用,咱们要依次部署deployment,service,configMap等,步骤较繁琐。何况随着不少项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂.node

helm经过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理linux

1.2 helm中几个概念

Helm能够理解为Kubernetes的包管理工具,能够方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念git

  • Chart: 一个Helm包,其中包含了运行一个应用所须要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义

能够理解为docker的imagegithub

  • Release: 在Kubernetes集群上运行的 Chart的一个实例。在同一个集群上,一个 Chart能够安装不少次。每次安装都会建立一个新的release

能够理解为docker的container实例redis

  • Repository: 用于发布和存储 Chart 的仓库。

1.3 helm用途

作为Kubernetes的一个包管理工具,Helm具备以下功能:docker

  • 建立新的chart
  • chart打包成tgz格式
  • 上传chartchart仓库或从仓库中下载 chart
  • Kubernetes集群中安装或卸载chart
  • Helm管理安装的chart的发布周期

2. helm安装

  • 注意:这里安装的是helm v3.2.4,如需下载更新的版本,能够至github官方repo选择

https://github.com/helm/helm/tagsshell

# 如无需更换版本,直接执行下载
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz

# 解压
tar -zxvf helm-v3.2.4-linux-amd64.tar.gz

# 进入到解压后的目录
cd linux-amd64/

# 赋予权限
chmod a+x /usr/local/bin/helm

# 查看版本
helm version

3. helm的基本使用

  • 注意这里的使用是针对Helm v3,由于v3版本和v2某些命令方面差距蛮大的,不彻底兼容!!因此针对v2的操做这里就不赘述了

3.1 安装chart仓库里面的chart

能够直接使用官方的chart仓库或者其余仓库来安装一些chartapi

https://hub.helm.shapp

  • 下面以官方仓库的一个redis为例

https://hub.helm.sh/charts/choerodon/rediside

# 添加仓库
helm repo add choerodon https://openchart.choerodon.com.cn/choerodon/c7n

# 安装
helm install choerodon/redis --version 0.2.5

安装完成! 有没有很简单!!

3.2 建立自定义的chart

这一节介绍如下如何自定义一个chart,并应用与平时项目中

3.2.1 文件目录结构

.
├── Chart.yaml
├── templates
|   ├── deployment.yaml
|   └── service.yaml
├── values.yaml

一个基本的自定义chart的文件目录结构大概是如上:

  • Chart.yaml: 定义当前chart的基本metadata, 好比name,tag啥的
  • templates: 这个文件夹下放当前chart须要的一些yaml资源清单
    • 资源清单支持变量模版语法
  • values.yaml: 定义变量,可被template下的yaml资源清单使用

3.2.2 自定义chart的示例

第一步: 准备自定义chart相关文件

# 1. 新建一个文件夹demo存放chart
mkdir demo && cd demo && mkdir templates

# 2. 新建Chart.yaml
cat << EOF > Chart.yaml
name: hello-world
version: 1.0.0
EOF

# 3. 新建./templates/deployment.yaml
# 注意image部分使用了变量的模板语法,能够动态插入
cat << EOF > ./templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tocgenerator-deploy
  labels:
    app: tocgenerator-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tocgenerator-server
  template:
    metadata:
      labels:
        app: tocgenerator-server
    spec:
      containers:
        - name: tocgenerator
          image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
EOF

# 4. 新建./templates/service.yaml
cat << EOF > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: tocgenerator-svc
spec:
  type: NodePort
  selector:
    app: tocgenerator-server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30075
EOF

# 5. 新建values.yaml
cat << EOF > values.yaml
image:
  repository: lzw5399/tocgenerator
  tag: '951'
EOF

第二步: 使用上面的自定义chart

# 将chart实例化成release
# 格式:helm install [RELEASE-NAME] [CHART-PATH]
helm install testname .

# 查看release
helm ls

# 安装成功!!

3.3 helm的基本操做补充

3.3.1 查看release

# 列出已经部署的Release 
helm ls 

# 查询一个特定的Release的状态 
helm status <RELEASE_NAME> 

# 查看被移除了,但保留了历史记录的release
helm ls --uninstalled

3.3.2 安装release

# 安装
helm install <RELEASE-NAME> <CHART-PATH>

# 命令行指定变量
helm install --set image.tag=233 <RELEASE-NAME> <CHART-PATH>

3.3.3 更新release

# 更新操做, flag是可选操做
helm upgrade [FLAG] <RELEASE> <CHART-PATH>

# 指定文件更新
helm upgrade -f myvalues.yaml -f override.yaml <RELEASE-NAME> <CHART-PATH>

# 命令行指定变量
helm upgrade --set foo=bar --set foo=newbar redis ./redis

3.3.4 卸载release

# 移除Release
helm uninstall <RELEASE_NAME>

# 移除Release,但保留历史记录
# 能够经过如下查看:helm ls --uninstalled
# 能够经过如下回滚:helm rollback <RELEASE> [REVISION]
helm uninstall <RELEASE_NAME> --keep-history

3.3.5 回滚release

# 更新操做, flag是可选操做
helm upgrade [FLAG] <RELEASE> <CHART-PATH>
相关文章
相关标签/搜索