【trino ssl】使用rancher部署trino ssl到kubernestes

这边介绍trino在kubernetes上的安装,这个过程遇到了几个难缠的问题,耗费了3周左右,其实都是小问题,但是在部署的过程中没有考虑到,导致时间拉长了。

一.打包镜像

第一步使用trino363打包镜像,使用dockerfile,基本上与之前介绍的presto on kubernetes没有变化

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 wux-prestotest.seagate.com.p12 /opt    //把证书添加到镜像中

ADD jdk.tar.gz /opt    //把jdk11打入镜像

ADD trino-server-363.tar.gz /opt    //把trino安装包打入镜像

ADD whiletrue.sh /opt/rcommand.sh    //这个是定时检测trino服务的,如果服务掉了,再启动。这个可以自己写或者不写

ENV PRESTO_HOME /opt/trino-server-363

ENV JAVA_HOME /opt/jdk

ENV PATH $PATH:$JAVA_HOME/bin

EXPOSE 8080

RUN chmod -R 777 /opt

USER hive

ENTRYPOINT ["/opt/rcommand.sh"]

镜像打包之后,会有点大,没有做优化,上传到harbor,有问题的参照我之前的文章

二.创建kubernestes yaml

configmap.properties,创建一个configmap,定义好各个配置文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: presto-config-cm
  #namespace: ingress-nginx
  labels:
    app: presto-coordinator
data:
  node.properties: |-
    node.environment=staging
    node.id=seadoop-trino-coordinator
    node.data-dir=/opt/presto/data
  jvm.config: |-
    -server
    -Xmx16G
    -XX:-UseBiasedLocking
    -XX:+UseG1GC
    -XX:G1HeapRegionSize=32M
    -XX:+ExplicitGCInvokesConcurrent
    -XX:+ExitOnOutOfMemoryError
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:-OmitStackTraceInFastThrow
    -XX:ReservedCodeCacheSize=512M
    -XX:PerMethodRecompilationCutoff=10000
    -XX:PerBytecodeRecompilationCutoff=10000
    -Djdk.attach.allowAttachSelf=true
    -Djdk.nio.maxCachedBufferSize=2000000
  config.properties: |-
    coordinator=${COORDINATOR_NODE}
    node-scheduler.include-coordinator=true
    http-server.authentication.type=PASSWORD
    http-server.http.port=8080
    query.max-memory=80GB
    query.max-memory-per-node=4.8GB
    query.max-total-memory-per-node=4.8GB
    discovery-server.enabled=true
    discovery.uri=http://presto-coordinator-service:8080
    #http-server.log.max-history=2
    #http-server.log.max-size=1MB
    http-server.https.enabled=true
    http-server.https.port=8443
    http-server.https.keystore.path=/opt/wux-prestotest.seagate.com.p12
    http-server.https.keystore.key=presto-seagate
  log.properties: |-
    io.trino=DEBUG
    com.facebook.presto=DEBUG
    io.airlift.discovery.client=DEBUG
  password-authenticator.properties: |-
    password-authenticator.name=file
    file.password-file=/opt/trino-server-363/etc/password.db

presto-coordinator.yaml,主节点

apiVersion: apps/v1
kind: Deployment
metadata:
  name: presto-coordinator
  #namespace: ingress-nginx
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: presto-coordinator
  template:
    metadata:
      labels:
        app: presto-coordinator
    spec:
      #nodeSelector:
        #type: lab1
      #hostNetwork: true
      containers:
        - name: presto-coordinator
          imagePullPolicy: Always
          image: 10.38.199.203:8090/library/trino:363
          ports:
            - containerPort: 8080
          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: /ui
              #port: 8099
      volumes:
        - name: presto-config-volume
          configMap:
            name: presto-config-cm
        - name: presto-data-volume
          emptyDir: {}

 这里遇到一个问题,困扰了大概1周的时间。当时按照这个yaml去启动,并且在configmap中注释了https相关的配置,意思是使用http启动看是否成功,结果启动之后trino的log中一直报错,无法链接http://presto-coordinator-service:8080,discovery server一直起不来,问题原因是下面这个配置,这个配置是对pod内服务是否已经ok做校验的,如果发现pod内服务还没就绪,pod的就无法对外提供服务,即service在负载均衡的时候是不会将这样的pod考虑在内的,这就导致service无法路由到这个pod,导致pod内一直报错无法链接service。问题的原因是这个探活程序readinessProbe自身一直在报错,因为port:httpd这个配置是错误的,自己在报错,就不会将pod拉起,结果service也无法提供服务,这个问题因为自己对K8S的一些知识点还没有弄清楚导致花费了大量无用的时间在上面,这里我直接将这段注释了,再启动,成功。

readinessProbe:
            initialDelaySeconds: 10
            periodSeconds: 5
            httpGet:
              path: /ui
              port: httpd

presto-service.yaml

kind: Service
apiVersion: v1
metadata:
  labels:
    app: presto-coordinator
  name: presto-coordinator-service
  #namespace: ingress-nginx
spec:
  type: NodePort
  #sessionAffinity: ClientIP
  ports:
    - port: 8443
      targetPort: 8443    //指向pod内部的https端口
      name: https
      #protocol: TCP
      nodePort: 30013    //还需要向外暴露nodeport端口
  selector:
    app: presto-coordinator

三.导入证书

要使用域名启动https链接,需要使用ingress的功能

首先将证书导入,可以选择全局的导入(多个namespace),也可以单个namespace

在rancher界面选中自己的namespace,我这里是default 

【trino ssl】使用rancher部署trino ssl到kubernestes_第1张图片

点击resouces/secret,下面有一个证书导入的tab

添加证书,分别导入key和cert 

【trino ssl】使用rancher部署trino ssl到kubernestes_第2张图片

导入完成,查看证书

【trino ssl】使用rancher部署trino ssl到kubernestes_第3张图片

四.创建ingress

在resouce/workload界面,转到load blance的tab,右上角添加ingress,填好namespace,service及ssl certificate

【trino ssl】使用rancher部署trino ssl到kubernestes_第4张图片

【trino ssl】使用rancher部署trino ssl到kubernestes_第5张图片

 完成

【trino ssl】使用rancher部署trino ssl到kubernestes_第6张图片

使用域名及sercvie的nodeport暴露的端口30013访问trino

【trino ssl】使用rancher部署trino ssl到kubernestes_第7张图片

 【trino ssl】使用rancher部署trino ssl到kubernestes_第8张图片

完成部署!

部署ingress的时候有个问题

首先我的域名wux-prestotest.seagate.com对应的是我的kubernestes的主节点10.38.199.202,这个主节点只有etcd和control panel的角色,没有给他赋值worker角色。此时我去用域名访问ingress的时候,总是不成功,无法显示网页。这个问题困扰了很久,在看了相关书籍了解到,在访问ingress的时候,是需要直接用worker节点的真实ip去访问的,就是要用某个worker所在node的ip去访问,因为ingress工作是根据ingress-controller的,ingress-controller默认是使用nginx转发的,而ingress-controller只有在worker节点才会安装,这导致我用主节点的域名去访问时,无法通过ingress-controller转发地址,所以访问不到service的服务,会报下面这样的错误,找不到service。

解决办法,我把主节点10.38.199.202设置成ALL的角色,即添加了worker角色,这样这个主节点上也会安装ingress-controller组件,那么在访问这个节点地址的时候,就可以用nginx进行转发了。这个也是关键的问题之一,切记。

 ingress-controller报错

 202节点角色

【trino ssl】使用rancher部署trino ssl到kubernestes_第9张图片

ingress-controller

【trino ssl】使用rancher部署trino ssl到kubernestes_第10张图片 

 

你可能感兴趣的:(presto,kubernetes,docker)