使用 MinIO 和 Rafay 简化多云 Kubernetes

使用 MinIO 和 Rafay 简化多云 Kubernetes

企业正在以前所未有的规模部署多云服务。Kubernetes 是多云成功的关键推动因素,因为它建立了一个通用的、声明式的基于软件的平台,无论底层硬件和软件如何,该平台都能提供一致的 API 驱动体验。但是,跨多云管理大量 Kubernetes 集群及其应用程序和数据可能既耗时又容易出错。

众所周知,手动管理 Kubernetes 需要相当多的技能才能有效扩展。挑战随着规模的扩大而增加,因为您正在支持更多更大的 Kubernetes 集群。在某些时候,Kubernetes 的复杂性甚至可能威胁到您使遗留软件适应云原生时代的能力。将外部存储添加到组合中会加剧这些挑战,尤其是当您必须处理硬件变化和不一致的 API 时。如果您的架构不是为多云设计的,那么您将面临在多云中失败的风险。  

我们与 Rafay 合作开发了本教程,向您展示如何使用 Rafay 充分利用多云 Kubernetes 来部署、更新和管理 Kubernetes 以及使用 MinIO 进行对象存储的应用程序。Rafay是一个基于 SaaS 的 Kubernetes 运维解决方案,它通过单一界面标准化、配置、监控、自动化和管理一组 Kubernetes 集群。MinIO 是最快的软件定义、Kubernetes 原生对象存储。它包括复制、集成、自动化和在 Kubernetes 运行的任何地方运行——公共/私有云、边缘、开发人员笔记本电脑等等。

MinIO 为 Kubernetes 带来了 S3 API 功能和对象存储,在您运行 Kubernetes 的任何地方提供一致的界面。DevOps 和平台团队使用MinIO Operator和 kubectl 插件跨多云部署和管理对象存储。云原生 MinIO 集成了外部身份管理、加密密钥管理、负载平衡、证书管理以及监控和警报应用程序和服务——它可以与您在组织中已经使用的任何东西一起工作。MinIO 经常用于在边缘构建数据湖/湖屋,并在数据中心提供对象存储即服务。

MinIO 和 Rafay 都以强大和简单的结合而闻名。按照下面的教程开始探索他们如何标准化和自动化您的 Kubernetes 集群的操作并管理其应用程序和数据。

拉菲安装

我们需要一个 Kubernetes 集群来开始我们的工作。常规 EKS 或 GKE 集群可以工作,但本地裸机 Kubernetes 集群也可以工作。我们的精神一直是简单,任何人都可以只使用他们的笔记本电脑开始并从那里发展生产系统。我们将在本教程中使用笔记本电脑,以展示 Rafay 和 MinIO 的简单性。

下载 MicroK8s

让我们从使用 brew 安装 MicroK8s 开始

% brew install ubuntu/microk8s/microk8s

....

==> microk8s
Run `microk8s install` to start with MicroK8s

安装 MicroK8s

% microk8s install

% microk8s kubectl get namespace
NAME          STATUS   AGE
kube-system   Active   92s
kube-public   Active   92s
kube-node-lease   Active   92s
default       Active   90s

在 bash 中添加快捷方式别名,这样您就不必每次都重复整个命令

% vim ~/.bash_profile

alias mk8s="microk8s kubectl"

检查别名是否有效

% mk8s get ns
NAME          STATUS   AGE
kube-system   Active   5m34s
kube-public   Active   5m34s
kube-node-lease   Active   5m34s
default       Active   5m32s  

太好了,如果可行,让我们继续启用集群运行所需的一些基本插件。

启用 DNS、StorageClass 和 RBAC

为了让 MicroK8s 集群中的 pod 能够在内部对话并路由外部 DNS 请求,让我们启用 DNS,它基本上由 CoreDNS 管理。为了让我们的 MinIO 安装有一个持久卷,我们将启用 Microk8s 主机路径存储。最后但同样重要的是,我们还需要 RBAC 来安全地启用对 Calico 的访问,以使用 Rafay 控制台配置路由和其他基于内部用户的kubectl访问。

启用 DNS、主机路径存储和 RBAC MicroK8s 附加组件。

% microk8s enable dns
Infer repository core for addon dns
Enabling DNS
No valid resolv.conf file could be found
Falling back to 8.8.8.8 8.8.4.4 as upstream nameservers
Applying manifest
serviceaccount/coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created
clusterrole.rbac.authorization.k8s.io/coredns created
clusterrolebinding.rbac.authorization.k8s.io/coredns created
Restarting kubelet
DNS is enabled

% microk8s enable hostpath-storage
Infer repository core for addon hostpath-storage
Enabling default storage class.
WARNING: Hostpath storage is not suitable for production environments.

deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon.

% microk8s enable rbac
Infer repository core for addon rbac
Enabling RBAC
Reconfiguring apiserver
RBAC is enabled

验证 DNS 是否已启用

% mk8s get po -A
NAMESPACE NAME                                   READY   STATUS RESTARTS   AGE
kube-system   calico-kube-controllers-869878fccf-84l9q   1/1 Running   0      15m
kube-system   calico-node-x4xsj                      1/1 Running   0      15m
kube-system   coredns-6f5f9b5d74-p4skc

MinIO集群

有几种方法可以让我们的 MinIO Kubernetes 集群连接到 Rafay。我们可以转到 Rafay 控制台并在 AWS、GCP、Azure 甚至裸机上启动集群,以将已经运行的现有 Kubernetes 导入 Rafay 控制台。在这种情况下,我们已经有一个正在运行的 MicroK8s Kubernetes 集群,所以我们将继续导入它。

按照本页的步骤 1 和 2导入我们在本地设置的 MicroK8s 集群。进入第 3 步后,您将获得一个引导程序 yaml 文件,您需要将该文件应用于 Microk8s 集群。

引导集群

安装 Rafay operator 并引导集群

% mk8s apply -f ~/Downloads/mk8sdesktop-bootstrap.yaml       [346/1984]
namespace/rafay-system created
serviceaccount/system-sa created
clusterrole.rbac.authorization.k8s.io/rafay:manager created
clusterrolebinding.rbac.authorization.k8s.io/rafay:rafay-system:manager-rolebinding created
clusterrole.rbac.authorization.k8s.io/rafay:proxy-role created
clusterrolebinding.rbac.authorization.k8s.io/rafay:rafay-system:proxy-rolebinding created
priorityclass.scheduling.k8s.io/rafay-cluster-critical-v3 created
priorityclass.scheduling.k8s.io/rafay-cluster-critical created
role.rbac.authorization.k8s.io/rafay:leader-election-role created
rolebinding.rbac.authorization.k8s.io/rafay:leader-election-rolebinding created
customresourcedefinition.apiextensions.k8s.io/namespaces.cluster.rafay.dev created
customresourcedefinition.apiextensions.k8s.io/tasklets.cluster.rafay.dev created
customresourcedefinition.apiextensions.k8s.io/tasks.cluster.rafay.dev created
service/controller-manager-metrics-service-v4 created
deployment.apps/controller-manager-v3 created
configmap/connector-config-v3 created
configmap/proxy-config-v3 created
deployment.apps/rafay-connector-v3 created
service/rafay-drift-v3 created
validatingwebhookconfiguration.admissionregistration.k8s.io/rafay-drift-validate-v3 created

应用引导程序文件后,所有 Pod 启动大约需要 5 分钟

% mk8s get po -n rafay-system
NAME                                 READY   STATUS RESTARTS   AGE
relay-agent-75bb76cc64-wxjmh         1/1 Running   0      3m
rafay-connector-v3-c965fc7cf-pjx9x   1/1 Running   0      96s
controller-manager-v3-58cf8f6445-mv55l   1/1 Running   0      95s
edge-client-767b87fb5-44fpn          1/1 Running   0      70s

在可达性检查中,您应该看到成功并且控制平面应该看起来很健康。


Screen Shot 2023-03-07 at 11.42.18 AM.png


部署 MinIO

有几种部署 MinIO 的方法:使用 go 二进制文件和systemctl文件,在 Kubernetes 中作为操作员,以及使用 Helm 图表。我们将在此示例中使用 Helm chart 来显示 Rafay 控制台中导入 helm chart 的工作流程。

为了开始,添加 MinIO Helm chart 存储库

% helm repo add minio https://helm.min.io/

下载MinIO tar.gz helm chart包,稍后用于上传到Rafay控制台。

% helm fetch minio/minio

创建以下minio-custom-values.yaml文件以稍后在 Rafay 控制台中上传

## Enable persistence using Persistent Volume Claims
#
persistence:
  #Specify the size for MinIO Storage
  size: 50Gi

## Configure resource requests and limits for your MinIO container
##
resources:
  requests:
memory: 2Gi
cpu: 500m
  limits:
memory: 4Gi
cpu: 1

## Enable and configure ingress to expose MinIO service externally
##
ingress:
  enabled: false
  annotations:
# Add annotation to use built-in nginx ingress controller
kubernetes.io/ingress.class: nginx
# Add annotation to use cert-manager for generating and maintaining the cert for MinIO ingress
cert-manager.io/cluster-issuer: "letsencrypt-http"
  path: /
  hosts:
# Change the host to your domain
- minio.ajtest.local
  tls:
- secretName: minio-ingress-tls
  hosts:
    - minio.ajtest.local

## Change below settings if you would like to use K8S secrets for the MinIO's access and secret key
## Remove this if you are planning to use the Vault integration
##
existingSecret: ""
accessKey: "minioadmin"
secretKey: "minioadmin"


使用 Rafay 接口创建 MinIO 命名空间


Screen Shot 2023-03-08 at 11.42.07 AM.png


验证它是否已在您的集群中创建

% mk8s get ns
NAME          STATUS   AGE
default       Active   2d
kube-system   Active   2d
kube-public   Active   2d
kube-node-lease   Active   2d
rafay-system  Active   2d
minio         Active   4s


我们现在拥有所有先决条件:Helm Chart tar.gz、Helm Values yaml 文件和要在集群上部署的 Namespce。接下来,创建一个新的工作负载,将其命名为“minio”,包类型为“Helm 3”。这很有用,因为它告诉 Rafay 控制台使用我们之前创建的 Helm 先决条件文件。选择“手动上传文件”以上传 helm 图表 tar.gz 和 helm 值 yaml 文件。


Screen Shot 2023-03-08 at 11.45.02 AM.png



选择 MinIO 包和值 yaml 文件并发布工作负载


Screen Shot 2023-03-08 at 11.48.54 AM.png



给它几分钟,然后验证工作负载是否准备就绪


Screen Shot 2023-03-09 at 11.49.08 AM.png



点击 Debug -> Pods 可以看到 MinIO pod 正在运行


Screen Shot 2023-03-09 at 11.54.56 AM.png


MinIO 控制台

接下来,公开MinIO 控制台,这是一个基于浏览器的 GUI,用于使用 Kubernetes 端口转发来管理 MinIO 租户。

打开port-forward并转到http://localhost:9000

% mk8s -n minio port-forward service/minio 9000:9000 --address 0.0.0.0
Forwarding from 0.0.0.0:9000 -> 9000
Handling connection for 9000
Handling connection for 9000
Handling connection for 9000

使用在 Helm 图表的值文件中设置的凭据登录到 MinIO 控制台。


Screen Shot 2023-03-14 at 10.29.14 AM.png


在右下角点击 + 创建一个桶


Screen Shot 2023-03-14 at 11.22.36 AM.png



我们将其命名为“testbucket”


Screen Shot 2023-03-14 at 11.23.18 AM.png



通过单击屏幕右下角的上传图标,将测试对象添加到我们刚刚创建的存储桶中。


Screen Shot 2023-03-14 at 11.24.03 AM.png


无缝、简单和简化的多云 Kubernetes 成功

在 MiniO,我们始终努力使我们的软件尽可能无缝和直接。它从详细、易于阅读的文档和单命令部署开始。您可以获得软件定义的对象存储,它可以在从开发人员的笔记本电脑到生产 Kubernetes 或裸机集群的任何地方运行,并结合基于浏览器的 MinIO 控制台用户界面的简单性。商业订阅增加了对 MinIO 订阅网络的访问并将其联系在一起,并与我们的工程师在我们革命性的 SUBNET 门户上进行实时协作。本教程向您展示如何使用 MinIO 对象存储和 Rafay System 的 Kubernetes 管理控制台在 Microk8s 集群上设置 Kubernetes 工作负载。一旦安装了必要的操作员,

这个简短的教程可以在笔记本电脑上运行,以演示开始使用 MinIO 和 Rafay 是多么快速和容易。完成本教程后,您将看到使用 Rafay Systems 管理 MinIO 对象存储部署是多么简单。您可以专注于在多个位置运行您的 MinIO 集群,并将它们全部连接回去,以由 Rafay Systems 在一个单一的玻璃视图窗格中进行管理和监控。

一般企业在超过 2 个位置运行 100 个 Kubernetes 集群,MinIO 和 Rafay Systems 的结合为他们提供了团队自主权和可靠性,为在整个多云存在中成功部署和维护应用程序奠定了基础


上一篇 下一篇