【Kubernetes】k8s使用minio作为对象存储

这篇具有很好参考价值的文章主要介绍了【Kubernetes】k8s使用minio作为对象存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Kubernetes】k8s使用minio作为对象存储,Kubernetes,kubernetes,linux,容器

一、部署minio operator

  • k8s version:v1.20.15
  • minio version :v4.4.16

(1)安装kubectl-minio插件

自选minio-operaterd的版本下载包

minio-operater plugin

# 上传服务器并解压
unzip kubectl-minio_linux_amd64.zip "kubectl-minio" -d /usr/local/bin/

# 查看是否安装成功。如返回版本信息则安装成功
kubectl minio version

# 初始化
kubectl minio init

# operator默认部署到minio-operator命名空间中,如果需要指定命名空间,可使用kubectl minio init --namespace {YOUR-NAMESPACE}。
# 使用群集。在配置operator的DNS主机名时,将本地作为群集域。指定kubectl minio init --cluster域参数以设置不同的集群域值。

# 验证是否安装成功
[root@k8s-master-4 ~]# kubectl get all -n minio-operator 
NAME                                 READY   STATUS    RESTARTS   AGE
pod/console-5f4f574656-5s2wx         1/1     Running   0          5h52m
pod/minio-operator-c78cb4c65-875rt   1/1     Running   0          5h52m
pod/minio-operator-c78cb4c65-x4869   1/1     Running   0          5h52m

NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/console    ClusterIP   10.98.66.116    <none>        9090/TCP,9443/TCP   5h52m
service/operator   ClusterIP   10.96.133.155   <none>        4222/TCP,4221/TCP   5h52m

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/console          1/1     1            1           5h52m
deployment.apps/minio-operator   2/2     2            2           5h52m

NAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/console-5f4f574656         1         1         1       5h52m
replicaset.apps/minio-operator-c78cb4c65   2         2         2       5h52m


# 访问Operator Console,新开一个终端窗口
[root@k8s-master-4 ~]# kubectl minio proxy -n minio-operator

Starting port forward of the Console UI.

To connect open a browser and go to http://localhost:9090

Current JWT to login: eyJhbGciOiJSUzI1NiIsImtpZCI6Ii1MY0QybWl6YklaUzE1MHZQNzcxcFNpc2JrUk1NdGU1X1MzaHUtY0hmMWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtaW5pby1vcGVyYXRvciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJjb25zb2xlLXNhLXRva2VuLThwcTRtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImNvbnNvbGUtc2EiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIyMzY4ODJjZS1hMDhhLTQ0MzEtOWY5MC1iN2IxMWJkZWJmMDEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6bWluaW8tb3BlcmF0b3I6Y29uc29sZS1zYSJ9.VpR7HaUT6AU_u61AgGAe5thnXoWcPP7nSK2S7zorUXVShdKfNIO1pdvTz1XJ9X1b7hlk3Yqn6LfLz1WJXxDBhEz_pHSqJ0s-RCv00hEHGRLPzyUdI-s9zjOwwqU7yITxkyNswodiZ6jRCOiMwqPRZEHKetzMZlckK6xvIO6gpcQd0dDwXagNyHGArb8-zvBLzqWhgx0PoB3B-FHuy7VabGzVDoFdMQiIU20KOjvdQEXPPZRfk-RBMM-hy7HdCM-rk4sTYEhTGz9dUzj1_umvQbupZw7kEcw588MMF9Q2Q66hOCOC-6YbQTPJIHzqwuYNv4SOzkj5hds2eUi_1FHHDA

Forwarding from 0.0.0.0:9090 -> 9090
Handling connection for 9090

# JWT的值为后续登陆界面时使用

【Kubernetes】k8s使用minio作为对象存储,Kubernetes,kubernetes,linux,容器

访问地址:http://ip:9090

二、创建StorageClass

1、sc-minio.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: minio-local-storage     # SC-NAME
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

创建

kubectl apply -f sc-minio.yaml

# 查看是否创建成功
[root@k8s-master-4 ~]# kubectl get sc
NAME                  PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
minio-local-storage   kubernetes.io/no-provisioner   Retain          WaitForFirstConsumer   false                  5h38m

2、创建所需的永久卷

序号 路径 容量 (G) 说明 所在节点
1 /data/1 5 租户使用 3个节点各1个
2 /data/log1 5 租户使用 3个节点各1个
3 /data/minio-tenant-1-log-0 5 审计日志 k8s-master-4
4 /data/minio-tenant-1-prometheus 5 监控数据 k8s-master-4

租户:30G

# 创建目录(三个节点)
mkdir -p /data/1 /data/log1

# 在K8s-master-4创建审计日志目录、监控目录
mkdir -p /data/minio-tenant-1-log-0 /data/minio-tenant-1-prometheus

三、PV && PVC

为MinIO租户中的每个卷创建一个PV。例如,假设一个Kubernetes集群有3个节点,每个节点有2个本地连接的驱动器,那么总共创建6个本地PV。名称、容量大小、目录等可根据个人环境进行配置:

1、pv-tenant.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-k8s-master-4-data1  # PV-NAME
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/1  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s-master-4  # NODE-NAME
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-k8s-master-4-log1  # PV-NAME
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/log1  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s-master-4  # NODE-NAME
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-k8s-node1-5-data1  # PV-NAME
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/1  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s-node1-5  # NODE-NAME
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-k8s-node1-5-log1  # PV-NAME
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/log1  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s-node1-5  # NODE-NAME

---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-k8s-node2-6-data1  # PV-NAME
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/1  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s-node2-6  # NODE-NAME
              
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-k8s-node2-6-log1  # PV-NAME
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/log1  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s-node2-6  # NODE-NAME

创建审计日志PV、PVC配置文件(后续备用):

2、pv-pvc-minio-tenant-1-log-0.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-tenant-1-log  # PV-NAME
   namespace: minio-tenant-1
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/minio-tenant-1-log-0  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s-master-4  # NODE-NAME

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    v1.min.io/log-pg: minio-tenant-1-log
  name: minio-tenant-1-log-minio-tenant-1-log-0
  namespace: minio-tenant-1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: "5368709120"
  storageClassName: minio-local-storage
  volumeMode: Filesystem
  volumeName: minio-tenant-1-log

创建租户监控prometheus使用的PV、PVC配置文件(后续备用):

3、pv-pvc-minio-tenant-prometheus.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
   name: minio-tenant-1-prometheus  # PV-NAME
   namespace: minio-tenant-1
spec:
   capacity:
      storage: 5Gi  # capacity
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce  # default ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage  # SC-NAME
   local:
      path: /data/minio-tenant-1-prometheus  # SC local-path
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - k8s3-master  # NODE-NAME
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    v1.min.io/prometheus: minio-tenant-1-prometheus
  name: minio-tenant-1-prometheus-minio-tenant-1-prometheus-0
  namespace: minio-tenant-1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: minio-local-storage  
  volumeMode: Filesystem
  volumeName: minio-tenant-1-prometheus
# 为MinIO Tenant创建命名空间
kubectl create namespace minio-tenant-1

# 创建租户pvc
 kubectl apply -f pv-tenant.yaml

# 查看创建的pv
kubectl get pv | grep minio

【Kubernetes】k8s使用minio作为对象存储,Kubernetes,kubernetes,linux,容器

四、创建MinIO Tenant租户

使用kubectl minio租户创建命令创建minio租户。该命令始终使用MinIO服务器和MinIO控制台的最新稳定Docker映像。

以下示例创建了一个3节点MinIO部署,6个驱动器的总容量为30Gi。此时会同时创建审计日志、prometheus监控相关pod。

# 查看minio支持的api-resource版本
[root@k8s-master-4 ~]# kubectl api-resources 
NAME             SHORTNAMES          APIVERSION                     NAMESPACED            KIND
......
tenants          tenant              minio.min.io/v2                true                  Tenant
......


[root@k8s-master-4 ~]# kubectl minio tenant create minio-tenant-1 \
>  --servers 3 \
>  --volumes 6  \
>  --capacity 30Gi \
>  --storage-class minio-local-storage \
>  --namespace minio-tenant-1
  
Tenant 'minio-tenant-1' created in 'minio-tenant-1' Namespace


  Username: W175STC2EU3QG0KXEEUN 

  Password: BhbYGhIZamMlYQXjYOZaD8TZzJno9zNwXa0VUmrq 

  Note: Copy the credentials to a secure location. MinIO will not display these again.


APPLICATION  SERVICE NAME            NAMESPACE       SERVICE TYPE  SERVICE PORT 

MinIO        minio                   minio-tenant-1  ClusterIP     443           

Console      minio-tenant-1-console  minio-tenant-1  ClusterIP     9443


# 查看租户状态
# 当前状态在初始化过程中,等待Log Search就绪,此过程可能要花费一段时间,租户成功后,状态会显示Initialized:
[root@k8s-master-4 ~]# kubectl get tenants -n minio-tenant-1
NAME             STATE         AGE
minio-tenant-1   Initialized   19h

# 各pod、服务等对象成功状态
kubectl -n minio-tenant-1 get all

# 查看创建的pvc(如图二)
kubectl -n minio-tenant-1 get pvc

# 查看当前租户
[root@k8s-master-4 ~]# kubectl minio tenant list

Tenant 'minio-tenant-1', Namespace 'minio-tenant-1', Total capacity 30 GiB

  Current status: Initialized 
  MinIO version: minio/minio:RELEASE.2022-04-16T04-26-02Z 
  
  


# 可以使用kubectl端口转发程序临时公开每个服务。运行以下示例将流量从运行kubectl的主机转发到Kubernetes集群内运行的服务。
# 租户端口转发
[root@k8s-master-4 ~]# kubectl port-forward service/minio 443:443 -n minio-tenant-1 
Forwarding from 127.0.0.1:443 -> 9000
Forwarding from [::1]:443 -> 9000

[root@k8s-master-4 ~]# kubectl port-forward service/minio-tenant-1-console 9443:9443 -n minio-tenant-1 
Forwarding from 127.0.0.1:9443 -> 9443

【Kubernetes】k8s使用minio作为对象存储,Kubernetes,kubernetes,linux,容器

【Kubernetes】k8s使用minio作为对象存储,Kubernetes,kubernetes,linux,容器

现在我们进入minio的控制台查看

【Kubernetes】k8s使用minio作为对象存储,Kubernetes,kubernetes,linux,容器

【Kubernetes】k8s使用minio作为对象存储,Kubernetes,kubernetes,linux,容器

租户状态已经ok了文章来源地址https://www.toymoban.com/news/detail-845088.html

五、其他操作

# 删除minio-operater
kubectl minio delete

# 删除tenant
kubectl minio tenant delete minio-tenant-1 --namespace minio-tenant-1

# 删除pvc、pv
kubectl delete pvc --all -n minio-tenant-1 
kubectl delete pv --all -n minio-tenant-1 

# 删除命名空间
kubectl delete ns minio-tenant-1

到了这里,关于【Kubernetes】k8s使用minio作为对象存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(K8S)使用PV和PVC做存储安装mysql

    首先你需要一个k8s环境,可以参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122 我们可以简单看一下官网的描述:https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/#introduction 持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用

    2024年02月03日
    浏览(29)
  • Kubernetes(K8S之存储)

    configMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件,命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制。ConfigMap可以被用来保存单个属性。 也可以用来保存整个配置文件或者JSON二进制大对象。 1,使用目录创建 $ls d

    2024年03月08日
    浏览(46)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(46)
  • Kubernetes/k8s的存储卷/数据卷

    k8s的存储卷/数据卷 容器内的目录和宿主机的目录挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消失 容器和节点之间创建一个可以持久化保存容器内文件

    2024年01月24日
    浏览(30)
  • Kubernetes(k8s)实战:深入详解Volume,详解k8s文件同步存储

    Volume官网:https://kubernetes.io/docs/concepts/storage/volumes/ On-disk files in a Container are ephemeral, which presents some problems for non-trivial applications when running in Containers. First, when a Container crashes, kubelet will restart it, but the files will be lost - the Container starts with a clean state. Second, when running Containers to

    2024年02月13日
    浏览(35)
  • Kubernetes基础(二十三)-k8s持久化存储详解

    1.1 介绍 在容器中的磁盘文件是短暂的,当容器崩溃时,Kubelet会重新启动容器,但容器运行时产生的数据文件都将会丢失,之后容器会以最干净的状态启动。另外,当一个Pod运行多个容器时,各个容器可能需要共享一些文件,诸如此类的需求都可以使用Volume解决。Pod只需要通

    2024年03月17日
    浏览(37)
  • 【K8S】Kubernetes 中有状态的资源对象——StatefulSet

    现在基本上很多服务中的应用都是有状态的,比如MySQL数据库、Redis等,因为其中的数据在不断地变化,所以这些应用每个时刻都处于一个不同的状态。或者一个系统中存在多个不同的应用,这些应用存在一定的依赖关系。例如一个博客服务,该服务中包含了Redis缓存和MySQL数

    2024年02月04日
    浏览(37)
  • Kubernetes(K8s)从入门到精通系列之三:K8s的基本概念和术语之资源对象概述

    K8s中的基本概念和术语大多是围绕资源对象(Resource Object)来说的,而资源对象在总体上可分为以下两类: 某种资源的对象,例如节点(Node)、Pod、服务(Service)、存储卷(Volume)。 与资源对象相关的事物与动作,例如标签(Label)、注解(Annotation)、命名空间(Namespace)、部署(Deployment)、

    2024年02月14日
    浏览(47)
  • Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

    它是一款全栈的 Kubernetes 容器云 PaaS 解决方案(来源于官网),而我觉得它是一款强大的Kubernetes图形界面,它继承了如下组件 (下面这段内容来自官网): Kubernetes DevOps 系统 基于 Jenkins 为引擎打造的 CI/CD,内置 Source-to-Image 和 Binary-to-Image 自动化打包部署工具 基于 Istio 的微

    2024年02月09日
    浏览(29)
  • 【云原生 | Kubernetes 系列】K8s 实战 Kubernetes 对象管理之指令式命令管理和配置文件命令式管理

    kubectl 工具能够支持三种对象管理方式: 声明式对象配置 指令式命令 指令式对象配置 前面我使用了两篇文章讲解了 使用配置文件对 Kubernetes 对象进行声明式管理 的相关知识点,本篇文章我将带领大家一起学习剩下的两个Kubernetes 对象管理的指令式命令管理和配置文件命令式

    2023年04月15日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包