Helm入门+部署mysql

1简介

Helm 为团队提供了在 Kubernetes 内部创建、安装和管理应用程序时需要协作的工具。
有了 Helm,开发者可以:
1.查找要安装和使用的预打包软件(Chart);
2.轻松创建和托管自己的软件包;
3.将软件包安装到任何 K8s 集群中;
4.查询集群以查看已安装和正在运行的程序包;
5.更新、删除、回滚或查看已安装软件包的历史记录;
一言以蔽之,通过 Helm,你可以轻松在 Kubernetes 中运行应用程序。
Helm 3 以 Helm 2 的核心功能为基础,对 Chart repo、发行版管理、安全性和 library Charts 进行了改进。
相比 Helm 2,Helm 3 最明显的变化是 Tiller 的删除,它新增丰富功能,某些功能已被弃用或重构,与 Helm 2 不再兼容。此外,Helm 3 还引入了一些新的实验功能,包括 OCI 支持。
Helm Go SDK 已重构为通用,目标是共享和重用 Go 社区开源代码。
Helm 3 的新变化
面对新版本,相信很多开发者都有这样的疑问:
Helm 3 的工作流程与 Helm 2 相比有什么变化?
如果我还是使用Helm 2 运行这些命令,是否可以看到相同的输出?
Helm 2 描述了用于创建、安装和管理 Chart 的工作流程。Helm 3 建立在该工作流程的基础上,更改了基础架构,以满足不断发展的生态系统的需求。

  1. 移除 Tiller
    在 Helm 2 开发周期中,Helm 团队引入了 Tiller。它使多个不同的操作员可以与同一组发行版进行交互,对于在共享集群中工作的团队非常有用。
    但 Kubernetes v1.6 默认启用基于角色的访问控制(RBAC),这之后在生产环境中用 Tiller 会变得难以管理。同时出于安全策略考虑,Helm 3 移除了 Tiller,安全模型从根本上得以简化。
  2. 三方战略合并补丁
    Helm 2 使用双向战略合并补丁,在升级过程中,它会比较最新 Chart 清单与建议 Chart 清单的差异,以确定需要对 Kubernetes 中的资源进行哪些更改。
    在 Helm 3 中,它现在使用三向战略合并补丁。生成补丁时,Helm 会考虑旧清单、当前状态和新清单,充分保障资源能回滚到以前的状态。
  3. Release Names 现在位于命名空间
    随着 Tiller 的删除,在 Helm 3 中,有关特定版本的版本信息现在存储在与版本本身相同的命名空间中。
  4. Secrets 作为默认存储驱动程序
    Helm 2 默认情况下使用 ConfigMaps 存储发行信息。在 Helm 3 中,现在将 Secrets 用作默认存储驱动程序。
    5.Go 导入路径更改
    在 Helm 3 中,它将 Go 导入路径从k8s.io/helm切换为helm.sh/helm/v3。
  5. 使用 JSONSchema 验证 Chart 值
    Helm 现在可以将 JSON Schema 强加于 Chart 值。这样可以确保用户提供的值遵循 Chart 维护者设计的架构,当用户为 Chart 提供一组错误值时,它能提供更好的错误报告。
  6. 合并
    Chart 依赖关系管理系统已从requirements.yaml和requirements.lock移至Chart.yaml和Chart.lock。
  7. 安装时现在需要名称
    在 Helm 2 中,如果未提供名称,它会给出一个自动生成的名称。但在Helm 3 中,如果未提供名称,则会引发错误。
  8. 将 Chart 推送到 OCI 注册中心
    对于 Chart 的远程托管,Helm 3 希望实现 Docker Registry 那样的功能,借助 OCI Registry As Storage,根据镜像 OCI 标准规范,复用 Registry 来存储 Chart。
    Helm 的下阶段规划
    核心维护人员对此次发布 Helm 3.0 感到非常满意。Helm 的下一个开发阶段将围绕稳定性新功能和对现有功能的增强。
    增强Helm test的功能;
    对 Helm OCI 集成的改进;
    Go 客户端库的增强功能。
    而对于 Helm 2,开发团队将继续接受错误修复并修复出现的任何安全问题,但不会接受任何新功能。所有功能开发将移至 Helm 3。
    在 Helm 3 公开发布 6 个月后,团队将停止接受除安全问题以外的 Helm 2错误修复。
    charts: 包。 relieases: 实例。

2 安装

//可以直接从GitHub网站上获取helm项目。
[root@master helm]# wget https://get.helm.sh/helm-v3.2.0-linux-amd64.tar.gz
tar -zxf helm-v3.2.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/sbin/
chmod +x /usr/local/sbin/helm

helm version
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
helm repo list
在这里插入图片描述

3 指定k8s集群

指定对应的k8s集群
这一步非常关键,它是helm与k8s通讯的保证,这一步就是把k8s环境变量KUBECONFIG进行配置
export KUBECONFIG=/root/.kube/config
或者
vim /etc/profile
KUBECONFIG=/root/.kube/config
source /etc/profile

4安装MySQL

查询一个charts
helm search repo mysql
在这里插入图片描述
helm的 hub 网址:https://hub.helm.sh/
Helm基本概念
//在安装某个Charts包之前,可以先去查找,由于国内网络环境原因,通常我们直接在上述添加的阿里云的Charts仓库内查找,比如,要下载一个MySQL服务。

 helm install test-mysql aliyun/mysql

PS: 注意,helm2版本,在部署的时候,如果不自定名称,会生产自定义的名称,但在helm3版本中,如果没有自定义名称会报错。
//可以去查看一下刚才安装过后的Charts包的信息,注意,一个Charts包在部署安装过后,我们称之为一个releases版本。

helm list
helm status new-mysql

//在我们部署安装一个releases之后,会在/root/.cache/helm/repository目录下生产一些文件,并且会有一个tar包。
[root@master repository]# pwd
/root/.cache/helm/repository
[root@master repository]# ls
aliyun-charts.txt aliyun-index.yaml mysql-0.3.5.tgz

[root@master repository]# tar -zxf mysql-0.3.5.tgz
[root@master repository]# yum -y install tree
[root@master repository]# tree -C mysql
mysql
├── Chart.yaml
├── README.md
├── templates
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── NOTES.txt
│   ├── pvc.yaml
│   ├── secrets.yaml
│   └── svc.yaml
└── values.yaml

1 directory, 10 files

分析Chart包解压过后的文件

1、Chart.yaml
这个是一个chart包的概要信息。其中name和version字段相对重要一些。
2、README.md
记录了关于这个Chart包的使用描述信息。
3、values.yaml
这个yaml文件,描述了整个Chart包的所有资源对象涉及到的默认的值。
//再按照某个Chart包之前,可以先将Chart包下载下来,然后解压对应的Chart包,查看详细信息。比如我们要部署一个redis的服务。
//在repo仓库中,先查找某个Chart包。

5 PVC添加PV支持

由于PVC没有PV支持,所以PVC现在一直处于Pending的状态,导致Pod绑定这个PVC之后,也会出现问题,所以,解决思路是给这PVC创建一个PV。
//这里做基于NFS服务的PV服务,先开启NFS服务。(k8s集群三个节点都下载nfs)

[root@master ~]# yum -y install nfs-utils
[root@master ~]# mkdir /nfsdata
[root@master ~]# vim /etc/exports
/nfsdata *(rw,sync,no_root_squash)
[root@master ~]# systemctl start rpcbind
[root@master ~]# systemctl enable rpcbind
[root@master ~]# systemctl start nfs-server.service
[root@master ~]# systemctl enable nfs-server.service
[root@master ~]# showmount -e
Export list for master:
/nfsdata *
[root@node01 ~]# showmount -e 192.168.1.20
Export list for 192.168.1.20:
/nfsdata *
[root@node02 ~]# showmount -e 192.168.1.20
Export list for 192.168.1.20:
/nfsdata *

//为PVC创建一个PV.

[root@master templates]# mkdir /nfsdata/new-pv
[root@master ~]# vim new-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: new-pv
spec:
  capacity:
    storage: 8Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /nfsdata/new-pv
    server: 192.168.1.20
[root@master ~]# kubectl apply -f new-pv.yaml

//查看对应的PV,PVC状态,已经成功绑定。

[root@master ~]# kubectl get pv,pvc
NAME                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
persistentvolume/new-pv   8Gi        RWO            Retain           Bound    default/new-mysql-mysql                           101s

NAME                                    STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/new-mysql-mysql   Bound    new-pv   8Gi        RWO                           19m

//此时,查看Pod,已经正常运行了。

[root@master ~]# kubectl get pod -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
new-mysql-mysql-6cf95546fb-sj5j9   1/1     Running   0          20m   10.244.1.2   node01   <none>           <none>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值