企业正在以前所未有的规模部署多云服务。Kubernetes 是多云成功的关键推动因素,因为它建立了一个通用的、声明式的基于软件的平台,该平台提供了与底层硬件和软件无关的一致 API 驱动体验。但是,管理跨多云的大量 Kubernetes 集群及其应用程序和数据可能非常耗时且容易出错。
众所周知,手动管理 Kubernetes 需要相当高的技能才能有效地扩展。随着您扩展规模,挑战也随之增加,因为您需要支持更多、更大的 Kubernetes 集群。在某些时候,Kubernetes 的复杂性甚至可能威胁您将传统软件适应云原生时代的能力。向其中添加外部存储会加剧这些挑战,尤其是在您必须处理硬件差异和不一致的 API 时。如果您没有为多云架构,您就有可能在多云中失败。
我们与 Rafay 携手合作开发了本教程,向您展示如何使用 Rafay 部署、更新和管理 Kubernetes 和应用程序,并使用 MinIO 进行对象存储,从而最大程度地利用多云 Kubernetes。 Rafay 是一种基于 SaaS 的 Kubernetes 操作解决方案,它通过单个界面标准化、配置、监控、自动化和管理一组 Kubernetes 集群。MinIO 是最快的软件定义的、Kubernetes 原生的对象存储。它包括复制、集成、自动化,并且可以在 Kubernetes 所在的任何地方运行——公有云/私有云、边缘、开发人员笔记本电脑等等。
MinIO 为 Kubernetes 带来了 S3 API 功能和对象存储,在您运行 Kubernetes 的任何地方提供一致的界面。DevOps 和平台团队使用MinIO 运算符 和 kubectl 插件在跨多云中部署和管理对象存储。云原生 MinIO 与外部身份管理、加密密钥管理、负载均衡、证书管理以及监控和警报应用程序和服务集成——它只需与您组织中已使用的任何内容协同工作。MinIO 常用于构建数据湖/湖仓,在边缘,以及在数据中心交付对象存储即服务。
MinIO 和 Rafay 都以其强大功能和易用性的结合而闻名。按照下面的教程开始探索它们如何标准化和自动化您的 Kubernetes 集群的操作,并管理其应用程序和数据。
Rafay 安装
我们需要一个 Kubernetes 集群才能开始我们的工作。常规的 EKS 或 GKE 集群可以使用,但本地裸机 Kubernetes 集群也可以。我们的理念一直是简单,任何人都可以使用他们的笔记本电脑开始,并从此扩展生产系统。为了演示 Rafay 和 MinIO 的简单性,我们将在本教程中使用我们的笔记本电脑。
下载 MicroK8s
让我们从使用 brew 安装 MicroK8s 开始。
% brew install ubuntu/microk8s/microk8s
....
==> microk8s 运行 `microk8s install` 以开始使用 MicroK8s |
安装 MicroK8s
% microk8s kubectl get namespace NAME STATUS AGE kube-system Active 92s kube-public Active 92s kube-node-lease Active 92sdefault Active 90s |
在 bash 中添加一个快捷别名,这样您就不必每次都重复整个命令。
% vim ~/.bash_profile
alias mk8s="microk8s kubectl" |
检查别名是否有效
% mk8s get ns 名称 状态 年龄 kube-system 活动 5m34s kube-public 活动 5m34s kube-node-lease 活动 5m34sdefault 活动 5m32s |
很好,如果一切正常,让我们继续启用集群运行所需的一些基本附加组件。
启用 DNS、存储类和 RBAC
为了让 MicroK8s 集群中的 Pod 能够在内部通信并路由外部 DNS 请求,让我们启用 DNS,它本质上由 CoreDNS 管理。为了让我们的 MinIO 安装有一个持久卷,我们将启用 Microk8s hostpath 存储。最后,我们还需要 RBAC 来安全地启用对 Calico 的访问,以便路由和其他内部用户基于 `kubectl` 的访问权限,这些权限是使用 Rafay 控制台配置的。
启用 DNS、hostpath 存储和 RBAC MicroK8s 附加组件。
% microk8s enable dns 推断存储库核心 for 附加组件 dns 启用 DNS 找不到有效的 resolv.conf 文件 回退到 8.8.8.8 8.8.4.4 作为上游名称服务器 应用清单 serviceaccount/coredns 已创建 configmap/coredns 已创建 deployment.apps/coredns 已创建 service/kube-dns 已创建 clusterrole.rbac.authorization.k8s.io/coredns 已创建 clusterrolebinding.rbac.authorization.k8s.io/coredns 已创建 重新启动 kubelet DNS 已启用
% microk8s enable hostpath-storage 推断存储库核心 for 附加组件 hostpath-storage 启用 默认 存储类。 警告:Hostpath 存储不适合 for 生产环境。
deployment.apps/hostpath-provisioner 已创建 storageclass.storage.k8s.io/microk8s-hostpath 已创建 serviceaccount/microk8s-hostpath 已创建 clusterrole.rbac.authorization.k8s.io/microk8s-hostpath 已创建 clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath 已创建 存储将很快可用。 |
% microk8s enable rbac 推断存储库核心 for 附加组件 rbac 启用 RBAC 重新配置 apiserver RBAC 已启用 |
验证 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 运算符并引导集群
% mk8s apply -f ~/Downloads/mk8sdesktop-bootstrap.yaml [346/1984] namespace/rafay-system 创建 serviceaccount/system-sa 创建 clusterrole.rbac.authorization.k8s.io/rafay:manager 创建 clusterrolebinding.rbac.authorization.k8s.io/rafay:rafay-system:manager-rolebinding 创建 clusterrole.rbac.authorization.k8s.io/rafay:proxy-role 创建 clusterrolebinding.rbac.authorization.k8s.io/rafay:rafay-system:proxy-rolebinding 创建 priorityclass.scheduling.k8s.io/rafay-cluster-critical-v3 创建 priorityclass.scheduling.k8s.io/rafay-cluster-critical 创建 role.rbac.authorization.k8s.io/rafay:leader-election-role 创建 rolebinding.rbac.authorization.k8s.io/rafay:leader-election-rolebinding 创建 customresourcedefinition.apiextensions.k8s.io/namespaces.cluster.rafay.dev 创建 customresourcedefinition.apiextensions.k8s.io/tasklets.cluster.rafay.dev 创建 customresourcedefinition.apiextensions.k8s.io/tasks.cluster.rafay.dev 创建 service/controller-manager-metrics-service-v4 创建 deployment.apps/controller-manager-v3 创建 configmap/connector-config-v3 创建 configmap/proxy-config-v3 创建 deployment.apps/rafay-connector-v3 创建 service/rafay-drift-v3 创建 validatingwebhookconfiguration.admissionregistration.k8s.io/rafay-drift-validate-v3 创建 |
应用完引导文件后,所有 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 |
在可达性检查中,您应该看到成功,并且控制平面应该显示为健康。

部署 MinIO
有多种方法可以部署 MinIO:使用 go 二进制文件和 systemctl
文件,在 Kubernetes 中作为运算符,以及使用 Helm 图表。在本例中,我们将使用 Helm 图表来演示在 Rafay 控制台中导入 Helm 图表的流程。
要开始,请添加 MinIO Helm 图表仓库
% helm repo add minio https://helm.min.io/ |
下载 MinIO tar.gz Helm 图表包,该包将用于上传到 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 命名空间

验证它是否已在您的集群中创建
% 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 文件和要部署到集群的命名空间。接下来,创建一个新的工作负载,将其命名为“minio”,并将其包类型设置为“Helm 3”。这很有用,因为它告诉 Rafay 控制台使用我们之前创建的 Helm 先决条件文件。选择“手动上传文件”以上传 helm chart tar.gz 和 helm values yaml 文件。

选择 MinIO 包和 values yaml 文件,然后发布工作负载。

等待几分钟,然后验证工作负载是否已准备就绪。

单击调试 -> Pod 以查看运行中的 MinIO pod。

MinIO 控制台
接下来,使用 Kubernetes 端口转发公开 MinIO 控制台,这是一个基于浏览器的 GUI,用于管理 MinIO 租户。
打开一个 port-forward
并转到 https://: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 chart 的 values 文件中设置的凭据登录 MinIO 控制台。

在右下角点击“+”创建存储桶。

我们将此存储桶命名为“testbucket”。

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

多云 Kubernetes 成功实现的无缝、简单和简化的解决方案
在 MiniO,我们始终致力于使我们的软件尽可能无缝和直观。它始于详细、易于阅读的文档和单命令部署。您可以获得从开发人员笔记本电脑到生产 Kubernetes 或裸机集群的任何地方运行的软件定义的对象存储,并结合基于浏览器的 MinIO 控制台用户界面的简便性。商业订阅增加了对 MinIO 订阅网络的访问,并将订阅网络与我们革命性的 SUBNET 门户网站上的工程师实时协作联系在一起。本教程向您展示了如何使用 MinIO 对象存储和 Rafay System 的 Kubernetes 管理控制台在 Microk8s 集群上设置 Kubernetes 工作负载。安装必要的运营商后,您将能够在 Rafay 控制台中看到本地运行的 Microk8s 集群的状态。
这个简短的教程可以在笔记本电脑上运行,以演示使用 MinIO 和 Rafay 开始使用起来有多么快速和容易。完成本教程后,您将看到使用 Rafay Systems 管理 MinIO 对象存储部署是多么简单。您可以专注于在多个位置运行 MinIO 集群,并将它们全部连接回 Rafay Systems,以在单一视图中进行管理和监控。
随着平均企业在 超过 2 个位置的 100 多个 Kubernetes 集群 上运行,它为他们提供了团队自主权和可靠性,而 MinIO 和 Rafay Systems 的结合为在整个多云环境中成功部署和维护应用程序奠定了基础。