将一项服务链接到Kubernetes的另一项服务

时间:2017-11-30 15:38:18

标签: kubernetes docker-compose

我有个别的kubernetes容器正在运行。有人可以帮助我如何链接他们? 我曾在docker compose上工作,它的工作方式如下:

redis:
    image: redis
    hostname: redis
    expose:
      - "6379"

  nginx:
    image: xxx.xx.xx.xx:5000/nginx:0.1
    expose:
      - "8080"
    ports:
      - "8080:8080"
    depends_on:
      - active-webserver
      - passive-webserver

  active-webserver:
    image: xxx.xx.xx.xx:5000/webserver:0.1
    hostname: active-webserver
    depends_on:
      - redis
    links:
      - redis
    expose:
      - "8081"
    ports:
      - "8090:8081"

  passive-webserver:
    image: xxx.xx.xx.xx:5000/webserver:0.1
    hostname: passive-webserver
    depends_on:
      - redis
      - kafka
    links:
      - redis
      - kafka
    expose:
      - "8081"
    ports:
      - "8091:8081"

但是当来到kubernetes时,我不知道如何继续。我有使用kompose后创建的服务和部署文件,但它实际上打破了代码之间的链接。

服务档案:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yaml
    kompose.version: 1.5.0 (999278f)
  creationTimestamp: null
  labels:
    io.kompose.service: nginx
  name: nginx
spec:
  ports:
  - name: "8080"
    port: 8080
    targetPort: 8080
  selector:
    io.kompose.service: nginx
status:
  loadBalancer: {}

我的部署文件是:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yaml
    kompose.version: 1.5.0 (999278f)
  creationTimestamp: null
  labels:
    io.kompose.service: nginx
  name: nginx
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: nginx
    spec:
      containers:
      - image: xxx.xx.xx.xx:5000/nginx:0.1
        name: nginx
        ports:
        - containerPort: 8080
        resources: {}
      restartPolicy: Always
status: {}

1 个答案:

答案 0 :(得分:0)

取决于。

在kubernetes中,容器调度的原子单位是Pod,pod可以包含多个容器,但pod是您的缩放单位。因此,如果容器已链接,并且您始终希望它们将它们一起缩放,则将它们全部放在同一个窗格中。

如果你不想,如果你可能想要一个容器多于另一个容器或者想要独立扩展它们,那么你可以做的最好的事情就是下面的一个或几个来实现某种顺序。

创建一个命名空间来放置整个"堆栈"对于您可能希望独立扩展的每组容器进行部署(或其他),但将它们保存在一个名称空间中。那样你的内部dns名称(如果你使用的是kubedns)就是redis.mystack.svc.cluster.local(其中mystack是你的命名空间的名称,redis是你面前服务的名称,在这里case,你的redis pods。)

使用标签将应用的不同部分绑在一起。标签是组织堆叠的好方法。例如,给每个资源一个标签" app:mystack"。然后你可以做kubectl get pods -l app=mystack

之类的事情

使用像helm(https://github.com/kubernetes/helm)这样的工具,它有一个将资源分组到一个"应用程序"的概念。

任何这些都可以毫无问题地一起使用。