【presto on kubernates】presto on kubernates解决方案2

同上篇文章,上篇文章使用了两个镜像presto coordinator和worker,这篇文章展示只用一个镜像,并且动态配置presto参数的情况

 

一。 镜像打包

首先删除presto中内存参数,jvm参数的设置文件。保留hive的链接文件(这里hive的链接也可以配置动态,因为hive的链接不会经常变动,所以直接打在镜像里)

接下去编写Dockerfile,与前面类似

FROM python

MAINTAINER 682556

RUN useradd --create-home --no-log-init --shell /bin/bash hive

RUN adduser hive sudo

RUN mkdir -p /opt

RUN mkdir -p /opt/presto/data

ADD java-1.8.0-openjdk-1.8.0.232.b09-0.el8_0.x86_64 /opt/jdk

ADD presto-server-0.220.tar.gz /opt

ADD whiletrue.sh /opt/rcommand.sh

ENV PRESTO_HOME /opt/presto-server-0.220

ENV JAVA_HOME /opt/jdk

ENV PATH $PATH:$JAVA_HOME/bin

EXPOSE 8099

RUN chmod -R 777 /opt

USER hive

ENTRYPOINT ["/opt/rcommand.sh"]

修改启动命令rcommand.sh,这里的/opt/bootstrap路径,会在后面deployment启动时使用configmap来挂载文件倒这个目录,将/opt/bootstrap下的node.properties,jvm.config,config.properties,log.properties复制到presto的etc目录

#! /bin/bash
i=1
while ((i<100))
do
if((i<2)); then
    cd /opt/bootstrap
    cat ./node.properties > $PRESTO_HOME/etc/node.properties
    cat ./jvm.config > $PRESTO_HOME/etc/jvm.config
    cat ./config.properties > $PRESTO_HOME/etc/config.properties
    cat ./log.properties > $PRESTO_HOME/etc/log.properties
    sed -i 's/${COORDINATOR_NODE}/'$COORDINATOR_NODE'/g' $PRESTO_HOME/etc/config.properties
    $PRESTO_HOME/bin/launcher start
    pwd;
else
    sleep 10000000000
fi
let i++
done

打包完成,上传到harbor

 

二。启动presto coordinator和worker

分别编写coordinator和worker的configmap挂载文件

presto-configMap-coordinator.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: presto-config-cm
  labels:
    app: presto-coordinator
data:
  node.properties: |-
    node.environment=staging
    node.data-dir=/opt/presto/data
  jvm.config: |-
    -server
    -Xmx4G
    -XX:+UseG1GC
    -XX:G1HeapRegionSize=32M
    -XX:+UseGCOverheadLimit
    -XX:+ExplicitGCInvokesConcurrent
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:+ExitOnOutOfMemoryError
  config.properties: |-
    coordinator=${COORDINATOR_NODE}
    node-scheduler.include-coordinator=false
    http-server.http.port=8099
    query.max-memory=4GB
    query.max-memory-per-node=0.6GB
    query.max-total-memory-per-node=0.6GB
    discovery-server.enabled=true
    discovery.uri=http://presto-coordinator-service:8099
  log.properties: |-
    com.facebook.presto=INFO

presto-configMap-worker.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: presto-config-worker-cm
  labels:
    app: presto-worker
data:
  node.properties: |-
    node.environment=staging
    node.data-dir=/opt/presto/data
  jvm.config: |-
    -server
    -Xmx2G
    -XX:+UseG1GC
    -XX:G1HeapRegionSize=32M
    -XX:+UseGCOverheadLimit
    -XX:+ExplicitGCInvokesConcurrent
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:+ExitOnOutOfMemoryError
  config.properties: |-
    coordinator=${COORDINATOR_NODE}
    http-server.http.port=8099
    query.max-memory=10GB
    query.max-memory-per-node=0.6GB
    query.max-total-memory-per-node=0.6GB
    discovery.uri=http://presto-coordinator-service:8099
  log.properties: |-
    com.facebook.presto=INFO

编写presto coordinator的deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: presto-coordinator
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: presto-coordinator
  template:
    metadata:
      labels:
        app: presto-coordinator
    spec:
      nodeSelector:
        type: lab1
      containers:
        - name: presto-coordinator
          image: 10.38.150.64:8090/library/presto-dy:latest
          ports:
            - name: http-coord
              containerPort: 8099
              protocol: TCP
          env:
            - name: COORDINATOR_NODE
              value: "true"
          volumeMounts:
            - name: presto-config-volume   
              mountPath: /opt/bootstrap
              readOnly: false
            - name: presto-data-volume
              mountPath: /opt/presto/data
              readOnly: false
          readinessProbe:
            initialDelaySeconds: 10
            periodSeconds: 5
            httpGet:
              path: /v1/cluster
              port: http-coord
      volumes:
        - name: presto-config-volume
          configMap:
            name: presto-config-cm   ##使用configmap挂载本地文件到pod
        - name: presto-data-volume
          emptyDir: {}

编写presto worker的deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: presto-worker
spec:
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: presto-worker
  template:
    metadata:
      labels:
        app: presto-worker
    spec:
      nodeSelector:
        type: lab1
      containers:
        - name: presto-worker
          image: 10.38.150.64:8090/library/presto-dy:latest
          resources:
            requests:
              memory: 3000Mi
            limits:
              memory: 3000Mi
          ports:
            - name: http-coord
              containerPort: 8099
              protocol: TCP
          env:
            - name: COORDINATOR_NODE
              value: "false"
          volumeMounts:
            - name: presto-config-volume
              mountPath: /opt/bootstrap
              readOnly: false
            - name: presto-data-volume
              mountPath: /opt/presto/data
              readOnly: false
      volumes:
        - name: presto-config-volume
          configMap:
            name: presto-config-worker-cm  #使用configmap挂载本地文件到pod
        - name: presto-data-volume
          emptyDir: {}

编写coordinator的service

kind: Service
apiVersion: v1
metadata:
  labels:
    app: presto-coordinator
  name: presto-coordinator-service
spec:
  type: NodePort
  sessionAffinity: ClientIP
  ports:
    - port: 8099
      targetPort: http-coord
      name: http-coord
      protocol: TCP
      nodePort: 30012
  selector:
    app: presto-coordinator

编写presto worker的HPA组件

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: presto-worker
spec:
  maxReplicas: 10
  minReplicas: 3
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: presto-worker
  metrics:
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 50

 

各个组件编写完成按照顺序启动

kubectl apply -f presto-configMap-coordinator.yaml
kubectl apply -f presto-configMap-worker.yaml
kubectl apply -f presto-coordinator.yaml
kubectl apply -f presto-service.yaml
kubectl apply -f presto-worker.yaml
kubectl apply -f presto-hpa.yaml

捎带片刻,启动完成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值