presto-将工人从docker移至kubernetes

时间:2018-07-08 22:50:34

标签: docker kubernetes presto

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

  

从system.runtime.nodes中选择*;

当我说我的k8集群容器并创建一些Pod时,这些Pod似乎可以与协调器联系,但它们从未出现在CLI中。 Pod的日志显示他们已经找到了协调器,并且协调器日志中没有任何错误消息,因此Im困惑于断开连接的位置。

deployment.yaml

apiVersion: apps/v1 
kind: Deployment
metadata:
  name: presto-worker
spec:
  type: NodePort
  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

2 个答案:

答案 0 :(得分:2)

您似乎已将Deployment和Service的各个部分结合在一起;他们是两个不同的对象。您可以将其分解:

---
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模板标签匹配。部署选择器为部署管理的窗格命名。在这两种情况下,它们都指向吊舱,但它们的目的不同。

答案 1 :(得分:1)

以下是适用于https://github.com/helm/charts/tree/master/stable/presto的有效Helm图表(即,k8s资源的模板包)。

从图表上方看,这是k8s中的presto集群的基本设计:

  1. 单身协调员。可以在http://:8080上发现(由工作人员发现)-这是您需要向协调员公开的k8s服务的地方,以便所有工作人员都可以针对此协调员执行发现(实际上,这是协调员公开的发现服务)。
  2. 通过k8s部署,
  3. 许多无国籍工人。您不需要公开任何端口或k8s服务,因为根本没有外部进程可以到达工作进程。
  4. 使用k8s configMap注入自定义的presto配置。对于presto群集,最重要的配置是presto协调器的discovery-server.enabled=true中的<presto-home>/etc/config.properties或根本找不到协调器。 (也就是,不能通过网络进行外部工作进程)。

根据此问题,您需要确保工作进程可以通过DNS名称(如http://my-presto-coordinator:8080访问presto协调器。


这是我通过运行stable/presto(在stdout中渲染所有模板)从图表helm template .获得的结果。您将需要用小写字符串替换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:
            {}