跳至主要內容

Kubernetes|Helm

Kevin 吴嘉文大约 2 分钟知识笔记Linux

https://blog.csdn.net/weixin_53072519/article/details/126693667

helm

官网open in new window

Helm 为 K8S 提供了包管理工具,如 Linux 下的 yum,apt 等。

Helm 的三个概念:

  • Chart:一系列用于创建 K8S 应用的信息。相当于 helm 的安装包。类似于 apt 的 dpkg 或者 Yum 的 RPM。
  • config:配置文件
  • release:运行 chart 之后生成的实例,与对应的 config 绑定在一起。release 与 chart 类似于 docker 中的容器实例与镜像的关系。

快速开始

安装

下载 helm 包 desired versionopen in new window ,而后解压。

移动到系统的 /usr/local/bin/ 即可:

tar -zxvf helm-v3.10.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

其他安装方式参考官网。

测试安装成功:helm help

配置仓库

一般国内的话,配置微软或者阿里云仓库。添加仓库时,通常会因为网络连接问题出现添加不上的情况,可以切换下 VPN 多次尝试添加。

helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo update

查看已经配置的仓库:

helm repo list

删除仓库

helm repo remove stable

安装应用

  1. 搜索应用

在已添加的仓库里搜索你的应用:

helm search repo mysql

在 Artifact Hub 中搜索你的应用(包括你未添加的仓库)

helm search hub mysql
  1. 查看 chart 的配置属性,如依赖镜像,资源限制,端口服务等。
helm show values stable/mysql

我们可以将 show values 得到的文件进行修改,以配置我们自己的 chart:

helm show values stable/mysql > my_chart_values.yaml
  1. 安装应用
helm upgrade --cleanup-on-fail \
  --install myhub jupyterhub/jupyterhub \
  --namespace dev \
  --create-namespace \
  --values my_config.yaml

除了用 --values 传递配置函数,还可以直接传递 --set 参数。


查看安装进度:

自定义 Chart

helm create mychart

生成一个 mychart 文件夹,里面包括 Chart 模板目录,目录下包括:

  • charts 文件夹
  • Chart.yaml
  • templates 文件夹
  • values.yaml(上一节中我们 show value 得到的就是这个文件的内容)

在 templates 中创建服务所需要的各种 yaml 文件。如

  • deployment.yaml
  • service.yaml

安装 Chart

可以直接使用刚刚的 mychart 文件夹安装:

helm install myapp mychart/

修改 yaml 文件后,同样可以直接使用 helm 升级 app:

helm upgrade myapp mychart/

高效复用 yaml 文件

可以在 values.yaml 中配置参数,而后 helm 会将全局参数引用到 templates 中的文件,从而实现仅通过修改 values.yaml,就可以部署不同配置的同类型 k8s 服务。

values.yaml 中定义:

replicas: 1
image: myimage
tag: 1.0
label: mylabel
port: 80

deployment.yaml 中引用:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: myweb1
  name: {{ .Release.Name}}-deploy
spec:
  replicas: {{ .Values.replicas}}
  selector:
    matchLabels:
      app: {{ .Values.label}}
  strategy: {}
  template:
    metadata:
      labels:
        app: {{ .Values.label}}
    spec:
      containers:
      - image: {{ .Values.image}}
...

储存方案

上次编辑于:
贡献者: kevinng77