数据未跨容器共享

时间:2020-12-28 22:12:38

标签: kubernetes

我正在尝试在一个 pod 中创建两个容器,其中一个容器是 init 容器。 init 容器的工作是下载一个 jar 并使其可用于应用程序容器。我能够创建所有内容并且日志看起来不错,但是当我检查时,我在我的应用程序容器中没有看到 jar。以下是我的部署 yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-service-test
  labels:
    app: web-service-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-service-test
  template:
    metadata:
      labels:
        app: web-service-test
    spec:
      volumes:
      - name: shared-data
        emptyDir: {}
      containers:
      - name: web-service-test
        image: some image
        ports:
        - containerPort: 8081
        volumeMounts:
        - name: shared-data
          mountPath: /tmp/jar
      initContainers:
      - name: init-container
        image: busybox
        volumeMounts:
        - name: shared-data
          mountPath: /jdbc-jar
        command:
        - wget
        - "https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8/19.3.0.0/ojdbc8-19.3.0.0.jar"

2 个答案:

答案 0 :(得分:1)

您需要将 jar 保存在 /jdbc-jar 文件夹中

尝试将您的 yaml 更新为关注

command: ["/bin/sh"]
args: ["-c", "wget -O /pod-data/ojdbc8-19.3.0.0.jar https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8/19.3.0.0/ojdbc8-19.3.0.0.jar"] 

答案 1 :(得分:0)

将以下代码块添加到您的 init 容器部分:

command: ["/bin/sh","-c"]
args: ["wget -O /jdbc-jar/ojdbc8-19.3.0.0.jar https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8/19.3.0.0/ojdbc8-19.3.0.0.jar"]

command ["/bin/sh", "-c"] 表示“运行 shell,并执行以下指令”。然后将 args 作为命令传递给 shell。在 shell 脚本中,分号分隔命令。在 wget 命令中,我添加了 -O 标志以从指定的 url 下载 jar 并将其保存为 /jdbc-jar/ojdbc8-19.3.0.0.jar 。 检查 jar 是否在容器中持久化。只需执行命令:

$ kubectl exec -it web-service-test -- /bin/bash

然后转到文件夹 /jdbc-jar ( $ cd jdbc-jar ) 并列出其中的文件 ($ ls -al)。你应该在那里看到你的罐子。

查看示例:commands-in-containersinitcontainers-running