redis - 在 Kubernetes 中多次部署相同的部署

标签 redis kubernetes

我打算在 Kubernetes 中部署依赖于 Redis 服务器的在线服务。到目前为止,我有:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
    name: "redis"
spec:
    replicas: 1
template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis
          image: redis
          ports:
            - containerPort: 6379
              protocol: TCP

我还可以将 redis 作为服务公开:

apiVersion: v1
kind: Service
metadata:
  name: redis
  labels:
    app: redis
spec:
  ports:
  - port: 6379
    protocol: TCP
  selector:
    app: redis

有了这个,我可以使用 Redis 服务器运行单个 pod 并将其公开。

但是,我的应用程序需要联系多个 Redis 服务器(这可以配置,但理想情况下不应实时更改)。 它确实关心它与哪个 Redis 服务器通信,所以我不能只使用副本并将其公开为单个服务,因为服务抽象不允许我知道我也在与哪个实例通信。我知道我的应用程序需要了解这一点会阻碍可扩展性,因此我很高兴失去一些灵 active 。

我想多次部署相同的部署并为每次部署声明一个服务,但我在 Kubernetes 文档中找不到任何相关内容。我当然可以复制粘贴我的部署和服务 YAML 文件并为每个文件添加一个后缀,但这看起来很愚蠢而且太手动(坦率地说太复杂)。

Kubernetes 中有什么可以帮助我实现目标的吗?

最佳答案

你应该看看pet sets .宠物集将获得一个唯一但可确定的每个实例名称,如 redis0、redis1、redis2。 它们也被视为宠物,而不是被视为牛的部署舱。

请注意,宠物套装通常更难升级、删除和处理,但这是获得可靠性和可确定性的代价。

您作为宠物的部署:

apiVersion: apps/v1alpha1
kind: PetSet
metadata:
  name: redis
spec:
  serviceName: "redis"
  replicas: 3
  template:
    metadata:
      labels:
        app: redis
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      terminationGracePeriodSeconds: 0
      containers:
      - name: redis
        image: redis
        ports:
        - containerPort: 6379
          protocol: TCP

还可以考虑使用卷来更轻松地访问 pod 中的数据。

关于redis - 在 Kubernetes 中多次部署相同的部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094541/

相关文章:

java - IBM Redis 数据库 + Spring boot

javascript - 为什么 redis 返回 [239, 191, 189] 响应缓冲区?

redis - Redis中如何批量删除几十万个带有特殊字符的key

kubernetes - 与服务器本地主机的连接 :8080 was refused when the configuration does not point to localhost

kubernetes - 有没有办法在 kubernetes statefulset 配置文件中获取 pod 的序号索引?

amazon-web-services - 添加的 SSL 不适用于使用 ACM 的 AWS 负载均衡器

kubernetes - 如何在本地Kubernetes或OpenShift集群上运行Snakemake工作流程?

Azure Kubernetes 服务 (AKS) 预留 VM?

用于高性能的 Scala Redis 驱动程序

Redis 将所有键从一个数据库移动到另一个数据库