K8s - 3 核心概念 - 15 Helm


K8s - 目录



一、kubernetes 核心技术-Helm


1. Helm 引入

K8S 上的应用对象,都是由特定的资源描述组成,包括 deployment、service 等。都保存各自文件中或者集中写到一个配置文件。然后kubectl apply –f 部署。如果应用只由一个或几个这样的服务组成,上面部署方式足够了。而对于一个复杂的应用,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,而这种组织和管理应用的方式就显得力不从心了。且由于缺少对发布过的应用版本管理和控制,使 Kubernetes上的应用维护和更新等面临诸多的挑战,主要面临以下问题:

  • 如何将这些服务作为一个整体管理 ;
  • 这些资源文件如何高效复用;
  • 不支持应用级别的版本管理。

2. Helm 介绍

Helm 是一个 Kubernetes 的包管理工具,就像 Linux 下的包管理器,如 yum/apt 等,可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。

Helm 有 3 个重要概念:

  • helm: 一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、打包、发布和管理;
  • Chart: 应用描述,一系列用于描述 k8s 资源相关文件的集合;
  • Release: 基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release。 将在 k8s 中创建出真实运行的资源对象。

3. Helm v3 变化

2019 年 11 月 13 日, Helm 团队发布 Helm v3 的第一个稳定版本。

该版本主要变化如下:

  • 架构变化:

    1. 最明显的变化是 Tiller 的删除。
      在这里插入图片描述

    2. Release 名称可以在不同命名空间重用。

    3. 支持将 Chart 推送至 Docker 镜像仓库中。

    4. 使用 JSONSchema 验证 chart values。

    5. 其他。

4. Helm 客户端

4.1 部署 helm 客户端

Helm 客户端下载地址:
https://github.com/helm/helm/releases

解压移动到/usr/bin/目录即可。

wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
tar zxvf helm-v3.8.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/

helm 常用命令

命令描述
dependency管理 chart 依赖
get下载一个 release。可用子命令: all、hooks、manifest、notes、values
history获取 release 历史
install安装一个 chart
list列出 release
package将 chart 目录打包到 chart 存档文件中
pull从远程仓库中下载 chart 并解压到本地 # helm pull stable/mysql – untar
repo添加,列出,移除,更新和索引 chart 仓库。可用子命令: add、index、 list、remove、update
rollback从之前版本回滚
search根据关键字搜索 chart。可用子命令: hub、repo
show查看 chart 详细信息。可用子命令: all、chart、readme、values
status显示已命名版本的状态
template本地呈现模板
uninstall卸载一个 release
upgrade更新一个 release
version查看 helm 客户端版本

4.2 配置国内 chart 仓库

  • 微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本上官网有的 chart 这里都有。
  • 阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)
  • 官方仓库(https://hub.kubeapps.com/charts/incubator)官方 chart 仓库,国内用户不太推荐。

添加存储库

helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update

查看配置的存储库

helm repo list 
helm search repo stable

删除存储库

helm repo remove aliyun

5. helm 基本使用

主要介绍三个命令:

  • chart install
  • chart upgrade
  • chart rollback

5.1 使用 chart 部署一个应用

查找 chart

helm search repo weave
NAME               CHART VERSION APP VERSION DESCRIPTION
aliyun/weave-cloud 0.1.2                     Weave Cloud is a add-on to Kubernetes which pro...
aliyun/weave-scope 0.9.21.6.5                A Helm chart for the Weave Scope cluster visual...
stable/weave-cloud 0.3.71.4.0                Weave Cloud is a add-on to Kubernetes cluster visual...
stable/weave-scope 0.3.71.4.0                A Helm chart for the Weave Scope cluster visual...

查看 chrt 信息

helm show chart stable/mysql

安装包

helm install ui stable/weave-scope

查看发布状态

helm list
NAME NAMESPACE REVISION UPDATED                              STATUS   CHART              APP VERSION
ui   default   1        2020-05-2817:45:01.696109626+0800CST deployed weave-scope-1.1.10 1.12.0
helm status ui
NAME: ui
LAST DEPLOYED: Mon Feb 21 12:26:26 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
You should now be able to access the Scope frontend in your web browser, by
using kubectl port-forward:

kubectl -n default port-forward $(kubectl -n default get endpoints \
ui-weave-scope -o jsonpath='{.subsets[0].addresses[0].targetRef.name}') 8080:4040

then browsing to http://localhost:8080/.
For more details on using Weave Scope, see the Weave Scope documentation:

https://www.weave.works/docs/scope/latest/introducing/

修改 service Type: NodePort 即可访问 ui。

5.2 安装前自定义 chart 配置选项

自定义选项是因为并不是所有的 chart 都能按照默认配置运行成功,可能会需要一些环境依赖,例如 PV。

所以我们需要自定义 chart配置选项,安装过程中有两种方法可以传递配置数据:

  • –values(或-f) :指定带有覆盖的 YAML 文件。这可以多次指定,最右边的文件优先;
  • –set: 在命令行上指定替代。如果两者都用,–set 优先级高。

–values 使用
先将修改的变量写到一个文件中。

helm show values stable/mysql
cat config.yaml
persistence:
  enabled: true
  storageClass: "managed-nfs-storage"
  accessMode: ReadWriteOnce
  size: 8Gi
  mysqlUser: "k8s"
  mysqlPassword: "123456"
  mysqlDatabase: "k8s
helm install db -f config.yaml stable/mysql
kubectl get pods
NAME                      READY STATUS  RESTARTS AGE
db-mysql-57485b68dc-4xjhv 1/1   Running 0        8m51s 
kubectl run -it db-client --rm --restart=Never --image=mysql:5.7 -- bash
If you don't see a command prompt, try pressing enter.
mysql -hdb-mysql -uk8s -p123456
mysql: [Warning] Using a password on the command line
interface can be insecure. Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.7.30 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation
and/or its affiliates. Other names may be trademarks of
their respective owners.
Type 'help;' or '\h'for help. Type '\c' to clear the current input statement. 
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| k8s                |
+--------------------+

以上将创建具有名称的默认 MySQL 用户k8s,并授予此用户访问新创建的k8s数据库的权限,但将接受该图表的所有其余默认值。

命令行替代变量:

helm install db --set persistence.storageClass="managed-nfs-storage" stable/mysql

也可以把 chart 包下载下来查看详情:

helm pull stable/mysql --untar

values yaml 与 set 使用:
在这里插入图片描述
该 helm install 命令可以从多个来源安装:

  • chart 存储库;
  • 本地 chart 存档(helm install foo-0.1.1.tgz);
  • 本地 chart 存档(helm install foo-0.1.1.tgz);
  • 完整的 URL(helm install https://example.com/charts/foo-1.2.3.tgz)。

6. 构建一个 Helm Chart

6.1 chart 模板

6.2 调试

6.3 内置对象

6.4 Values

6.5 升级、回滚和删除

6.6 管道与函数

7. 流程控制

7.1 if

7.2 range

7.3 with

7.4 变量

8. 开发自己的 chart

  1. 先创建模板。
  2. 修改 Chart.yaml,Values.yaml,添加常用的变量。
  3. 在 templates 目录下创建部署镜像所需要的 yaml 文件,并变量引用 yaml 里经常变动的字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qumy97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值