首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库伯奈特将罐子复制到一个吊舱中并重新启动

库伯奈特将罐子复制到一个吊舱中并重新启动
EN

Stack Overflow用户
提问于 2021-04-30 07:00:51
回答 2查看 2.2K关注 0票数 0

我有一个Kubernetes问题,需要在部署后将2罐(每个jar > 1Mb)复制到一个荚中。因此,理想情况下,解决方案是我们不能使用configMap (> 1Mb),但是我们需要在"initcontainer“中使用"wget”并下载jars。下面是我修改过的kubernetes模板配置。原始版本可在https://github.com/dremio/dremio-cloud-tools/blob/master/charts/dremio/templates/dremio-executor.yaml上找到

代码语言:javascript
复制
{{ if not .Values.DremioAdmin }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: dremio-executor
spec:
  serviceName: "dremio-cluster-pod"
  replicas: {{.Values.executor.count}}
  podManagementPolicy: "Parallel"
  revisionHistoryLimit: 1
  selector:
    matchLabels:
      app: dremio-executor
  template:
    metadata:
      labels:
        app: dremio-executor
        role: dremio-cluster-pod
      annotations:
        dremio-configmap/checksum: {{ (.Files.Glob "config/*").AsConfig | sha256sum }}
    spec:
      terminationGracePeriodSeconds: 5
      {{- if .Values.nodeSelector }}
      nodeSelector:
        {{- range $key, $value := .Values.nodeSelector }}
        {{ $key }}: {{ $value }}
        {{- end }}
      {{- end }}
      containers:
      - name: dremio-executor
        image: {{.Values.image}}:{{.Values.imageTag}}
        imagePullPolicy: IfNotPresent
        securityContext:
          runAsUser: 0
        resources:
          requests:
            memory: {{.Values.executor.memory}}M
            cpu: {{.Values.executor.cpu}}
        volumeMounts:
        - name: dremio-executor-volume
          mountPath: /opt/dremio/data
       ##################### START added this section #####################
        - name: dremio-connector
          mountPath: /opt/dremio/jars
       #################### END added this section ##########################
        - name: dremio-config
          mountPath: /opt/dremio/conf
        env:
        - name: DREMIO_MAX_HEAP_MEMORY_SIZE_MB
          value: "{{ template "HeapMemory" .Values.executor.memory }}"
        - name: DREMIO_MAX_DIRECT_MEMORY_SIZE_MB
          value: "{{ template "DirectMemory" .Values.executor.memory }}"
        - name: DREMIO_JAVA_EXTRA_OPTS
          value: >-
            -Dzookeeper=zk-hs:2181
            -Dservices.coordinator.enabled=false
            {{- if .Values.extraStartParams }}
            {{ .Values.extraStartParams }}
            {{- end }}
        command: ["/opt/dremio/bin/dremio"]
        args:
        - "start-fg"
        ports:
        - containerPort: 45678
          name: server
      initContainers:
      ################ START added this section ######################
      - name: installjars
        image: {{.Values.image}}:{{.Values.imageTag}}
        imagePullPolicy: IfNotPresent 
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: dremio-connector
          mountPath: /opt/dremio/jars
        command: ["/bin/sh","-c"]
        args: ["wget --no-check-certificate -O /dir/connector.jar https://<some nexus repo URL>/connector.jar; sleep 10;"]
      ################ END added this section ###############
      - name: wait-for-zk
        image: busybox
        command:  ["sh", "-c", "until ping -c 1 -W 1 zk-hs > /dev/null; do echo waiting for zookeeper host; sleep 2; done;"]
      # since we're mounting a separate volume, reset permission to
      # dremio uid/gid
      - name: chown-data-directory
        image: {{.Values.image}}:{{.Values.imageTag}}
        imagePullPolicy: IfNotPresent
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: dremio-executor-volume
          mountPath: /opt/dremio/data
        command: ["chown"]
        args:
        - "dremio:dremio"
        - "/opt/dremio/data"
      volumes:
      - name: dremio-config
        configMap:
          name: dremio-config
      {{- if .Values.imagePullSecrets }}
      imagePullSecrets:
        - name: {{ .Values.imagePullSecrets }}
      {{- end}}
     #################### START added this section ########################
      - name: dremio-connector
        emptyDir: {}
     #################### END added this section ########################
  volumeClaimTemplates:
  - metadata:
      name: dremio-executor-volume
    spec:
      accessModes: [ "ReadWriteOnce" ]
      {{- if .Values.storageClass }}
      storageClassName: {{ .Values.storageClass }}
      {{- end }}
      resources:
        requests:
          storage: {{.Values.executor.volumeSize}}
{{ end }}

因此,上面的工作是不工作的,我没有看到任何罐子被下载,一旦我“执行”到荚。我不明白上面这是怎么回事。但是,请注意,在荚中,如果我运行相同的wget命令,它会下载jar,这让我很困惑。所以URL是有效的,目录的读取没有问题,但是jar仍然没有下载?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-30 07:51:37

如果你能完全消除对Wget的需求,就会让生活更轻松.

备选案文1

如果你选择使用自己的码头形象,那就省去了一些痛苦。

Dockerfile

代码语言:javascript
复制
# docker build -f Dockerfile -t ghcr.io/yourOrg/projectId/dockerImageName:0.0.1 .
# docker push ghcr.io/yourOrg/projectId/dockerImageName:0.0.1

FROM nginx:1.19.10-alpine

# Use local copies of config
COPY files/some1.jar /dir/
COPY files/some2.jar /dir/

文件将在容器中准备就绪,不需要在荚定义中使用没有任何意义的神秘命令。或者,如果您需要下载文件,您可以将脚本复制到Docker映像中,然后通过docker指令CMD在启动时运行。

选项2

或者,你可以进行两阶段的部署.

  1. 创建了一个持久卷
  2. 将卷挂载到一个容器(使用busybox作为基础?)这将运行足够的时间让文件从您的本地机器上复制(或者如果您继续使用Wget)
  3. kubectl cp您需要的文件-您需要的文件-(保留的) PersistentVolume
  4. Now将PV挂载到您的荚的容器中,以便在吊舱启动时这些文件随时可用。
票数 2
EN

Stack Overflow用户

发布于 2021-04-30 07:09:20

你的做法似乎是对的。另一种解决方案可能是将jar包含在Docker映像中,但我认为这是不可能的,对吧?

您可以只使用emptyDir而不是VolumeClaim

最后一个问题是,在等待ZooKeeper获得一些时间之前,我应该先下载jar。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67329543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档