Helm包管理器

1、Helm 是一个用于 Kubernetes 应用程序部署和管理的包管理工具。它允许用户将Kubernetes应用程序打包成 chart,以方便在 Kubernetes 集群中部署和管理。

2、Helm 由两个核心组件组成:Helm Client 和 Tiller Server。Helm Client 是一个命令行工具,用于创建、打包、安装、更新和删除 Helm Charts。Tiller Server 是一个Kubernetes部署,它与Helm Client交互,并将 Charts 安装到 Kubernetes 集群中。

3、对于Helm,有三个重要的概念:

​ ①、chart 创建Kubernetes应用程序所必需的一组信息。

​ ②、config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象。

​ ③、release 是一个与特定配置相结合的chart的运行实例。

4、以下是 Helm 架构的基本组成部分:

​ ①、Helm Client:Helm 的命令行工具,用于打包、安装、升级和删除 Helm Charts。

​ ②、Chart:用于描述 Kubernetes 应用程序的打包格式。Chart 包含了应用程序的 Kubernetes 部署文件、服务文件、配置文件和依赖关系等。

​ ③、Repository:Helm Chart 存储库,用于存储和分发 Chart。存储库可以是本地目录、HTTP/HTTPS URL 或者 Git 仓库等。

​ ④、Tiller Server:Helm 的服务端组件,负责将 Charts 安装到 Kubernetes 集群中。Tiller Server 需要有足够的权限才能在集群中执行安装操作。

​ ⑤、Release:Helm 在 Kubernetes 集群中安装的应用程序实例。Release 是 Chart 的一个实例化对象,它包含了部署的应用程序的所有相关信息和配置。

Redis chart实战

一、安装Helm

下载二进制文件:

①、解压至/root/helm目录下,然后将解压得到的文件里的一个可执行文件helm移动到usr/local/bin/helm

②、命令自动补全:helm completion bash > /etc/bash_completion.d/helm,终端重新连接就自动生效了

③、helm常用命令:

helm repo 列出、增加、更新、删除 chart 仓库
helm search 使用关键词搜索 chart
helm pull 拉取远程仓库中的 chart 到本地
helm create 在本地创建新的 chart
helm dependency 管理 chart 依赖
helm install 安装 chart
helm list 列出所有 release
helm lint 检查 chart 配置是否有误
helm package 打包本地 chart
helm rollback 回滚 release 到历史版本
helm uninstall 卸载 release
helm upgrade 升级 release

wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz

二、创建StorageClass制备器,配置NFS动态制备

1、k8s 中提供了一套自动创建 PV 的机制,就是基于 StorageClass 进行的,通过 StorageClass 可以实现仅仅配置 PVC,然后交由 StorageClass 根据 PVC 的需求动态创建 PV。

2、每个 StorageClass 都有一个制备器(Provisioner),用来决定使用哪个卷插件制备 PV。

# 在master节点上安装nfs服务,(每个node节点上都安装下nfs,这样的目的是为了node节点可以驱动nfs设备)
[root@k8s-master01 ~]# yum install nfs-utils -y

# 准备共享目录
 [root@k8s-master01 ~]# mkdir /nfs_data/rw/ 
 [root@k8s-master01 ~]# mkdir /nfs_data/ro/

# 暴露服务
[root@k8s-master01 ~]# vim /etc/exports
/nfs_data/rw 192.168.18.0/24(rw,sync,no_subtree_check,no_root_squash)
/nfs_data/ro 192.168.18.0/24(ro,sync,no_subtree_check,no_root_squash)

# 启动nfs服务
[root@k8s-master01 ~]# systemctl restart nfs

三、配置yaml

1、创建 nfs-provisioner-RABC.yaml

①、RABC是 k8s 中的一种访问控制机制,可以帮助管理员在 Kubernetes 集群中控制用户或者服务的访问权限;需要使用 RABC 角色和绑定,以授予该 Provisioner 执行所需操作的权限

②、创建命名空间[root@k8s-master01 redis]# kubectl create namespace redis

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
- apiGroups: [""]
  resources: ["persistentvolumes"]
  verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
  resources: ["persistentvolumeclaims"]
  verbs: ["get", "list", "watch", "update"]
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get", "list", "watch", "create", "update", "patch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
- kind: ServiceAccount
  name: nfs-client-provisioner
  namespace: redis
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
rules:
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
subjects:
- kind: ServiceAccount
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: redis
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

在这里插入图片描述

2、创建nfs-provisioner-Deploy.yaml

nfs-provisioner容器将在k8s集群中运行,并使用RABC角色和绑定来执行创建、删除和管理NFS PV的操作

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  namespace: redis
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: redis
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccount: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0  #在 k8s 1.20 之后,出于对性能和统一 apiserver 调用方式的初衷,移除了对 SelfLink 的支持,该镜像可以不需要SekfLINK。
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: cai.pri/ifs
            - name: NFS_SERVER
              value: 192.168.18.101
            - name: NFS_PATH
              value: /nfs_data/rw
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.18.101
            path: /nfs_data/rw

在这里插入图片描述

3、创建nfs-StorageClass.yaml

nfs-StorageClass是k8s中的一个存储类资源,用于定义动态NFS存储的配置和属性。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
  namespace: redis
  annotations:
    storageclass.kubernetes.io/is-default-class: "false"  ## 是否设置为默认的storageclass
provisioner: cai.pri/ifs                                  ## 动态卷分配者名称,必须和上面创建的"provisioner"变量中设置的Name一致
reclaimPolicy: Retain                                     ## 指定回收政策,storage 默认为 Delete
volumeBindingMode: Immediate # 默认为 Immediate,表示创建 PVC 立即进行绑定,只有 azuredisk 和 AWSelasticblockstore 支持其他值

在这里插入图片描述

四、配置Helm

1、修改helm源
# 查看默认仓库
helm repo list

# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add aliyun https://apphub.aliyuncs.com/stable
helm repo add azure http://mirror.azure.cn/kubernetes/charts
2、搜索下载redis chart
# 搜索 redis chart
helm search repo redis

# 查看安装说明
helm show readme bitnami/redis

# 将 chart 拉到本地
helm pull bitnami/redis

# 解压
tar -xvf xxx -C /root/helm

这次用到这个包bitnami/redis

在这里插入图片描述

3、修改配置:

[root@k8s-master01 redis]# vim /root/helm/redis/values.yaml

# 修改 storageClass 为 managed-nfs-storage
storageClass: "managed-nfs-storage"

# 设置 redis 密码 password
password: "123456"

# 修改集群架构 architecture,默认是主从(replication,3个节点),可以修改为 standalone 单机模式
architecture: replication

# 修改实例存储大小 persistence.size 为需要的大小(看情况给)
    size: 8Gi

# 修改 service.nodePorts.redis 向外暴露端口,范围 <30000-32767>
nodePorts:
      redis: "32221"
4、安装
# 安装(可以使用相对路径)
[root@k8s-master01 redis]# helm install redis /root/helm/redis -n redis

在这里插入图片描述

显示这个就代表安装成功了!

# 查看 redis 命名空间下所有对象信息
[root@k8s-master01 redis]# kubectl get all -n redis
在这里插入图片描述

搞定!

5、升级与回滚
3升级版本
[root@k8s-master01 redis]# helm upgrade redis ./ -n redis

# 查看历史
helm history redis

# 回退到指定版本
helm rollback redis 3

六、卸载redis

[root@k8s-master01 redis]# helm delete redis -n redis
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐