【问题标题】:Converting a docker-compose redis file to work on kubernetes将 docker-compose redis 文件转换为在 kubernetes 上工作
【发布时间】:2021-08-25 21:24:49
【问题描述】:

我正在将我们的 swarm 集群迁移到 k8s 集群,这意味着我需要将所有 compose 文件重写为 k8s 文件。一切都很顺利,直到我到达 redis compose...

redis 中的 compose 文件: 是的,它很简单,因为只是在开发过程中测试缓存的东西......

version: "3"
services:
  db:
    image: redis:alpine
    ports:
      - "6380:6379"
    deploy:
      labels:
      - traefik.frontend.rule=Host:our-redis-url.com
      placement:
        constraints:
          - node.labels.so==linux
    networks:
      - traefik
networks:
  traefik:
    external: true

所以,我们在该集群中有 4 个节点...我的 DNS (our-redis-url.com) 指向其中一个节点,它就像一个魅力。我使用该 url + 端口 6380 简单地连接到 redis。

现在....我已经创建了同样的东西,但是对于k8s,如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-ms
  namespace: prod
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-ms
  template:
    metadata:
      labels:
        app: redis-ms
    spec:
      containers:
      - name: redis-ms
        image: redis:alpine
        ports:
          - containerPort: 6379
        resources:
          requests:
            cpu: 250m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
  name: redis-ms
  namespace: prod
spec:
  selector:
    app: redis-ms
  ports:
  - protocol: TCP
    port: 6380
    targetPort: 6379
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: redis-ms
  namespace: prod
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: our-redis-url.com
    http:
      paths:
      - backend:
          service:
            name: redis-ms
            port:
              number: 6380
        path: /
        pathType: Prefix

那没有用。 吊舱运行,通过日志我可以看到它正在等待连接,但我不知道如何像在 docker-compose 中那样做这个技巧(traefik.frontend.rule=Host:redis-ms.mstech.com.br绑定url和端口部分)。

我已经尝试使用工具 kompose 来转换这个 compose 文件...它没有工作到大声笑

如果有人能给我一些建议,或者帮助我解决问题,我将不胜感激。

我正在使用带有 traefik 的 k8s 作为入口控制器。

【问题讨论】:

  • Redis 服务不是 HTTP,所以 Kubernetes Ingress 系统默认不知道如何处理。 Exposing Redis with Ingress Nginx Controller 有一个非常详细的演练,但对于 Nginx 入口控制器,而不是 Træfik。不过,您真的希望从集群外部可以访问您的私有数据存储吗?

标签: kubernetes docker-compose redis kubernetes-ingress traefik-ingress


【解决方案1】:

如 cmets 中所述,Ingress 系统仅适用于 HTTP 流量。 Traefik 也支持 TCP 和 UDP 流量,但这与 Ingress 的东西是分开的,并且必须通过 Traefik 更具体的工具(他们的自定义资源或配置文件)进行配置。更常见的是,您会使用 LoadBalancer 类型的服务,该服务会在您的云提供商中创建 TCP LB。

【讨论】:

  • 我会尝试 David Maze 的方法,搜索 Traefik 的东西,比如 Nginx。谢谢你的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多