Docker 普雷斯托-将工人从码头工人转移到库伯内特斯

Docker 普雷斯托-将工人从码头工人转移到库伯内特斯,docker,kubernetes,presto,Docker,Kubernetes,Presto,我有一个要扩展的最小(工作)presto安装(同一主机上有一个协调器和一个工作器)。我已经创建了一个带有工作节点的容器,当通过docker部署时,它可以工作(即显示在presto CLI中) 从system.runtime.nodes中选择* 当我将容器移动到我的k8集群并创建几个pod时,这些pod似乎可以联系协调器,但它们从未出现在CLI中。POD的日志显示他们已经发现了协调器,协调器日志中没有任何错误msgs,因此我不知道断开连接的位置 部署.yaml 看起来您已经将部署和服务的各个部分组

我有一个要扩展的最小(工作)presto安装(同一主机上有一个协调器和一个工作器)。我已经创建了一个带有工作节点的容器,当通过docker部署时,它可以工作(即显示在presto CLI中)

从system.runtime.nodes中选择*

当我将容器移动到我的k8集群并创建几个pod时,这些pod似乎可以联系协调器,但它们从未出现在CLI中。POD的日志显示他们已经发现了协调器,协调器日志中没有任何错误msgs,因此我不知道断开连接的位置

部署.yaml
看起来您已经将部署和服务的各个部分组合在一起了;它们是两个不同的物体。您可以将其分解:

---
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: presto-worker
spec:
  selector:
    matchLabels:
      app: presto-worker
  replicas: 2 
  template:
    metadata:
      labels:
        app: presto-worker
    spec:
      containers:
      - name: presto-image
        image: docker.io/mystuff/presto-image:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1 
kind: Service
metadata:
  name: presto-worker
spec:
  type: NodePort
  selector:
    matchLabels:
      app: presto-worker
  ports:
  - name: http
    port: 8080

服务选择器指向特定的POD;它需要匹配部署规范的pod模板标签。部署选择器命名部署管理的POD。在这两种情况下,它们都指向POD,但它们的用途不同。

看起来您已经将部署和服务的一部分结合起来了;它们是两个不同的物体。您可以将其分解:

---
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: presto-worker
spec:
  selector:
    matchLabels:
      app: presto-worker
  replicas: 2 
  template:
    metadata:
      labels:
        app: presto-worker
    spec:
      containers:
      - name: presto-image
        image: docker.io/mystuff/presto-image:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1 
kind: Service
metadata:
  name: presto-worker
spec:
  type: NodePort
  selector:
    matchLabels:
      app: presto-worker
  ports:
  - name: http
    port: 8080

服务选择器指向特定的POD;它需要匹配部署规范的pod模板标签。部署选择器命名部署管理的POD。在这两种情况下,它们都指向POD,但它们的用途不同。

这里是presto的工作舵图(即k8s资源的模板包):

上图显示了k8s中presto集群的基本设计:

  • 单一协调员。可通过http://:8080发现(由工作人员)-这是您需要为协调器公开k8s服务的地方,以便所有工作人员都可以对该协调器执行发现(实际上是协调器公开的发现服务)
  • 通过k8s部署的大量无状态工作人员。您不需要公开任何端口或k8s服务,因为外部进程根本不会到达工作进程
  • 使用k8s configMap注入定制的presto配置。presto群集最重要的配置是presto coordinator的
    /etc/config.properties
    中的
    discovery server.enabled=true
    ,或者根本无法发现您的coordinator。(也就是说,不能通过网络拥有外部工作进程)
  • 根据这个问题,您需要确保工作进程可以通过DNS名称访问presto coordinator,如
    http://my-presto-coordinator:8080


    这是我从图表
    stable/presto
    中通过运行
    helm-template得到的。
    (在stdout中呈现所有模板)。您需要使用小写字符串替换
    RELEASE-NAME

    ---
    # Source: charts/presto/templates/deployment-worker.yaml
    
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: RELEASE-NAME-presto-worker
      labels:
        app: presto
        chart: presto-0.1
        release: RELEASE-NAME
        heritage: Tiller
        component: worker
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: presto
          release: RELEASE-NAME
          component: worker
      template:
        metadata:
          labels:
            app: presto
            release: RELEASE-NAME
            component: worker
        spec:
          volumes:
            - name: config-volume
              configMap:
                name: RELEASE-NAME-presto-worker
          containers:
            - name: presto-worker
              image: "bivas/presto:0.196"
              imagePullPolicy: IfNotPresent
              command: ["/bin/bash"]
              args:
                - /etc/presto/docker-presto.sh
              volumeMounts:
                - mountPath: /etc/presto
                  name: config-volume
              livenessProbe:
                exec:
                  command:
                    - /bin/bash
                    - /etc/presto/health_check.sh
                initialDelaySeconds: 10
                periodSeconds: 25
              readinessProbe:
                exec:
                  command:
                    - /bin/bash
                    - /etc/presto/health_check.sh
                initialDelaySeconds: 5
                periodSeconds: 10
              resources:
                {}
    

    以下是presto的工作舵图(即k8s资源的模板包):

    上图显示了k8s中presto集群的基本设计:

  • 单一协调员。可通过http://:8080发现(由工作人员)-这是您需要为协调器公开k8s服务的地方,以便所有工作人员都可以对该协调器执行发现(实际上是协调器公开的发现服务)
  • 通过k8s部署的大量无状态工作人员。您不需要公开任何端口或k8s服务,因为外部进程根本不会到达工作进程
  • 使用k8s configMap注入定制的presto配置。presto群集最重要的配置是presto coordinator的
    /etc/config.properties
    中的
    discovery server.enabled=true
    ,或者根本无法发现您的coordinator。(也就是说,不能通过网络拥有外部工作进程)
  • 根据这个问题,您需要确保工作进程可以通过DNS名称访问presto coordinator,如
    http://my-presto-coordinator:8080


    这是我从图表
    stable/presto
    中通过运行
    helm-template得到的。
    (在stdout中呈现所有模板)。您需要使用小写字符串替换
    RELEASE-NAME

    ---
    # Source: charts/presto/templates/deployment-worker.yaml
    
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: RELEASE-NAME-presto-worker
      labels:
        app: presto
        chart: presto-0.1
        release: RELEASE-NAME
        heritage: Tiller
        component: worker
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: presto
          release: RELEASE-NAME
          component: worker
      template:
        metadata:
          labels:
            app: presto
            release: RELEASE-NAME
            component: worker
        spec:
          volumes:
            - name: config-volume
              configMap:
                name: RELEASE-NAME-presto-worker
          containers:
            - name: presto-worker
              image: "bivas/presto:0.196"
              imagePullPolicy: IfNotPresent
              command: ["/bin/bash"]
              args:
                - /etc/presto/docker-presto.sh
              volumeMounts:
                - mountPath: /etc/presto
                  name: config-volume
              livenessProbe:
                exec:
                  command:
                    - /bin/bash
                    - /etc/presto/health_check.sh
                initialDelaySeconds: 10
                periodSeconds: 25
              readinessProbe:
                exec:
                  command:
                    - /bin/bash
                    - /etc/presto/health_check.sh
                initialDelaySeconds: 5
                periodSeconds: 10
              resources:
                {}
    

    您的配置不清楚:1。您是否创建了服务?如果是-您能否提供yaml文件以查看您的服务配置?2.你能提供你的日志吗。3.在阅读了您的问题之后,我了解到您的协调器主机位于您创建工作节点的集群之外,并且您还没有创建服务/入口来向协调器公开工作节点。这就是为什么它在集群中不可见的原因。我对服务的理解是,它一次公开一个worker。这是不对的吗?类似的负载均衡器。最好共享更多日志,或者在
    log.properties
    中使用
    com.facebook.presto=DEBUG
    来获取更多反馈,以判断哪里出了问题(到目前为止,我不知道是您的presto配置还是presto集群设置),您是否从该repo中看到了presto集群的k8s tempaltes?您的配置不清楚:1。您是否创建了服务?如果是-您能否提供yaml文件以查看您的服务配置?2.你能提供你的日志吗。3.在阅读了您的问题之后,我了解到您的协调器主机位于您创建工作节点的集群之外,并且您还没有创建服务/入口来向协调器公开工作节点。这就是为什么它在集群中不可见的原因。我对服务的理解是,它一次公开一个worker。这是不对的吗?类似的负载均衡器。最好共享更多日志,或者在
    log.properties
    中使用
    com.facebook.presto=DEBUG
    来获取更多反馈,以判断哪里出了问题(到目前为止,我不知道是您的presto配置还是presto集群设置),您是否从该repo中看到了presto集群的k8s tempaltes?这是否允许同时访问所有吊舱?我对服务的理解(在这种情况下)是it提供的