为 Kubernetes 部署 Redis Enterprise 软件

如何为 Kubernetes 安装 Redis Enterprise 软件。

要为 Kubernetes 部署 Redis Enterprise 软件并启动 Redis Enterprise 集群 (REC),您需要执行以下操作:

  • 在您的 Kubernetes 集群中创建一个新的命名空间。
  • 下载操作员捆绑包。
  • 应用操作员包并验证其是否正在运行。
  • 创建 Redis Enterprise 集群 (REC)。

本指南适用于大多数受支持的 Kubernetes 发行版。如果您使用的是 OpenShift,请参阅OpenShift 上的 Redis Enterprise。有关当前支持的详细信息,请参阅受支持的发行版

先决条件

要为 Kubernetes 部署 Redis Enterprise,您需要:

  • 受支持发行版中的 Kubernetes 集群
  • 至少三个工作节点
  • Kubernetes 客户端 (kubectl)
  • 访问 DockerHub、RedHat Container Catalog 或可以保存所需图像的私有存储库。

创建新的命名空间

重要提示:每个命名空间只能包含一个 Redis Enterprise 集群。具有不同运算符版本的多个 REC 可以共存于同一个 Kubernetes 集群上,只要它们位于不同的命名空间中即可。

在本指南中,每个命令都应用于​​ Redis Enterprise 集群运行的命名空间。

  1. 创建新的命名空间
kubectl create namespace <rec-namespace>
  1. 更改命名空间上下文,使新创建的命名空间成为未来命令的默认命名空间。
kubectl config set-context --current --namespace=<rec-namespace>

您可以使用现有命名空间,只要它不包含任何现有 Redis Enterprise 集群资源即可。最佳做法是创建新命名空间,以确保没有可能干扰部署的 Redis Enterprise 资源。

安装操作符

Redis Enterprise for Kubernetes 软件包以容器镜像的形式发布。每个版本的发行说明中提供了所需镜像的列表。

运算符定义和参考资料可在 GitHub 上找到。运算符定义打包为单个通用 YAML 文件

笔记:
如果您不从 DockerHub 或其他公共注册表中提取映像,则需要使用私有容器注册表

下载运营商捆绑包

拉取最新版本的操作员包:

VERSION=`curl --silent https://api.github.com/repos/RedisLabs/redis-enterprise-k8s-docs/releases/latest | grep tag_name | awk -F'"' '{print $4}'`

如果您需要不同的版本,请替换VERSION为特定的版本标签。

检查GitHub 上与操作员发布一起列出的版本标签或使用 GitHub API来确保捆绑包的版本正确。

部署操作员包

在您的 REC 命名空间中应用操作符包:

kubectl apply -f https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/$VERSION/bundle.yaml

您应该看到类似这样的结果:

role.rbac.authorization.k8s.io/redis-enterprise-operator created
serviceaccount/redis-enterprise-operator created
rolebinding.rbac.authorization.k8s.io/redis-enterprise-operator created
customresourcedefinition.apiextensions.k8s.io/redisenterpriseclusters.app.redislabs.com configured
customresourcedefinition.apiextensions.k8s.io/redisenterprisedatabases.app.redislabs.com configured
deployment.apps/redis-enterprise-operator created
警告:
请勿修改或删除在部署过程中创建的 StatefulSet。这样做可能会破坏您的 Redis Enterprise 集群 (REC)。

验证操作员是否正在运行

检查操作员部署以验证它是否在您的命名空间中运行:

kubectl get deployment redis-enterprise-operator

您应该看到类似这样的结果:

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
redis-enterprise-operator   1/1     1            1           0m36s

创建 Redis Enterprise 集群 (REC)

Redis Enterprise 集群 (REC) 是从RedisEnterpriseCluster包含集群规范的自定义资源创建的。

以下示例创建一个最小的 Redis Enterprise 集群。有关各种可用选项的更多信息,请参阅RedisEnterpriseCluster API 参考。

  1. 创建一个定义具有三个节点的 Redis Enterprise 集群的文件。

    笔记:
    集群创建后, REC 名称(my-rec在此示例中)无法更改。

    cat <<EOF > my-rec.yaml
    apiVersion: "app.redislabs.com/v1"
    kind: "RedisEnterpriseCluster"
    metadata:
      name: my-rec
    spec:
      nodes: 3
    EOF
    

    这将使用默认请求(即每个节点 2 个 CPU 和 4GB 内存)来请求具有三个 Redis Enterprise 节点的集群。

    要使用更大的配置进行测试,请使用以下示例将节点资源添加到spec测试集群的部分(my-rec.yaml)。

    redisEnterpriseNodeResources:
      limits:
        cpu: 2000m
        memory: 16Gi
      requests:
        cpu: 2000m
        memory: 16Gi
    
    笔记:
    Each cluster must have at least 3 nodes. Single-node RECs are not supported.
    

    有关调整 Redis Enterprise 节点资源请求大小的更多信息,请参阅Redis Enterprise 硬件要求。

  2. 将您的自定义资源文件应用到与 相同的命名空间中my-rec.yaml

kubectl apply -f my-rec.yaml

您应该看到类似这样的结果:

redisenterprisecluster.app.redislabs.com/my-rec created
  1. 您可以使用以下命令验证集群的创建:
kubectl get rec

您应该看到类似这样的结果:

NAME           AGE
my-rec   1m

此时,操作员将经历创建各种服务和 pod 部署的过程。

您可以通过检查与集群关联的 StatefulSet 来跟踪进度:

kubectl rollout status sts/my-rec

或者查看命名空间中所有资源的状态:

kubectl get all

启用准入控制器

准入控制器会动态验证操作员配置的 REDB 资源。强烈建议您在 Redis 企业集群 (REC) 上使用准入控制器。每个操作员部署只需配置一次准入控制器。

作为 REC 创建过程的一部分,操作员将准入控制器证书存储在名为 的 Kubernetes 机密中admission-tls。创建 REC 后,您可能需要等待几分钟才能看到机密已创建。

  1. 验证admission-tls秘密是否存在。

     kubectl get secret admission-tls
    

    输出应该类似于

     NAME            TYPE     DATA   AGE
     admission-tls   Opaque   2      2m43s
    
  2. 将证书保存到本地环境变量。

    CERT=`kubectl get secret admission-tls -o jsonpath='{.data.cert}'`
    
  3. 创建一个 Kubernetes 验证 webhook,并将其替换<namespace>为安装 REC 的命名空间。

    webhook.yaml模板可以在redis-enterprise-k8s-docs/admission中找到

    sed 's/OPERATOR_NAMESPACE/<namespace>/g' webhook.yaml | kubectl create -f -
    
  4. 为 Kubernetes 验证 webhook 创建一个补丁文件。

    cat > modified-webhook.yaml <<EOF
    webhooks:
    - name: redisenterprise.admission.redislabs
      clientConfig:
        caBundle: $CERT
      admissionReviewVersions: ["v1beta1"]
    EOF
    
  5. 使用证书修补 webhook。

    kubectl patch ValidatingWebhookConfiguration \
      redis-enterprise-admission --patch "$(cat modified-webhook.yaml)"
    

将 webhook 限制到相关命名空间

操作员包包含一个 webhook 文件。除非您编辑 webhook 以定位特定命名空间,否则它将拦截来自所有命名空间的请求。您可以通过将部分添加namespaceSelector到 webhook 规范以定位命名空间上的标签来实现这一点。

  1. 确保命名空间具有唯一的namespace-name标签。

    apiVersion: v1
    kind: Namespace
    metadata:
       labels:
        namespace-name: example-ns
    name: example-ns
    
  2. 修补 webhook 以添加该namespaceSelector部分。

    cat > modified-webhook.yaml <<EOF
    webhooks:
    - name: redisenterprise.admission.redislabs
      namespaceSelector:
        matchLabels:
          namespace-name: staging
    EOF
    
  3. 应用补丁。

    kubectl patch ValidatingWebhookConfiguration \
      redis-enterprise-admission --patch "$(cat modified-webhook.yaml)"
    

验证准入控制器是否正常工作

  1. 通过应用无效资源来验证准入控制器是否安装正确。这应该会强制准入控制器进行更正。

    kubectl apply -f - << EOF
    apiVersion: app.redislabs.com/v1alpha1
    kind: RedisEnterpriseDatabase
    metadata:
      name: redis-enterprise-database
    spec:
      evictionPolicy: illegal
    EOF
    

您应该会看到您的请求已被拒绝admission webhook "redisenterprise.admission.redislabs"

Error from server: error when creating "STDIN": admission webhook "redisenterprise.admission.redislabs" denied the request: eviction_policy: u'illegal' is not one of [u'volatile-lru', u'volatile-ttl', u'volatile-random', u'allkeys-lru', u'allkeys-random', u'noeviction', u'volatile-lfu', u'allkeys-lfu']

创建 Redis 企业数据库 (REDB)

您可以在与 REC 相同的命名空间内或其他命名空间中创建多个数据库。

请参阅管理 Kubernetes 的 Redis Enterprise 数据库来创建新的 REDB。

给此页面评分
返回顶部 ↑