为Kubernetes部署Redis企业版软件

如何为Kubernetes安装Redis企业版软件。

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

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

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

先决条件

要部署适用于Kubernetes的Redis Enterprise,您需要:

  • Kubernetes集群在支持的发行版
  • 至少三个工作节点
  • Kubernetes 客户端 (kubectl)
  • 访问DockerHub、RedHat容器目录或可以存放所需镜像的私有仓库。 注意:如果您正在应用7.8.2-6或更高版本,请检查节点上安装的OS是否受支持。

创建一个新的命名空间

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

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

  1. 创建一个新的命名空间

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

    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企业集群(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
    

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

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

    redisEnterpriseNodeResources:
      limits:
        cpu: 2000m
        memory: 16Gi
      requests:
        cpu: 2000m
        memory: 16Gi
    
    注意:
    每个集群必须至少有3个节点。不支持单节点的RECs。

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

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

    kubectl apply -f my-rec.yaml
    

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

    redisenterprisecluster.app.redislabs.com/my-rec created
    
  3. 您可以通过以下方式验证集群的创建:

    kubectl get rec
    

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

    NAME           AGE
    my-rec   1m
    

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

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

    kubectl rollout status sts/my-rec
    

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

    kubectl get all
    

启用准入控制器

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

作为REC创建过程的一部分,操作员将准入控制器证书存储在名为admission-tls的Kubernetes秘密中。创建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
    EOF
    
  5. 使用证书修补webhook。

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

将webhook限制在相关的命名空间

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

  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。

RATE THIS PAGE
Back to top ↑