如何在 Kubernetes 中创建像 Docker Compose 中的 Volume 一样的 Volume?

问题描述 投票:0回答:1

我是 Kubernetes 新手,并尝试在其中创建卷,就像我们在 Docker Compose 中创建一样。

Docker 撰写:

version: '3'
services:
  my-service:
    container_name: my-container
    image: my-image:0.0.1
    volumes:
      - ./src/main/resources:/src/main/resources
    ports:
      - "8082:8082"

我正在 Docker 容器中创建

/src/main/resources volume
。现在我想在
k8's
中创建这样的体积。我尝试过的是:

我的 Deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment

spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-label
  template:
    metadata:
      name: my-pod
      labels:
        app: my-label
    spec:
      containers:
        - name: my-container
          image: my-image:0.0.1
          ports:
            - containerPort: 8082
          volumeMounts:
            - mountPath: /src/main/resources
              name: my-volume
      volumes:
        - name: my-volume
          hostPath:
            path: /home/my-user/src/main/resources
---
apiVersion: v1
kind: Service
metadata:
  name: my-service

spec:
  type: LoadBalancer
  selector:
    app: my-label
  ports:
    - port: 8082
      targetPort: 8082
      nodePort: 31802

以上已成功创建卷,但未将

/home/my-user/src/main/resources
的内容粘贴到卷
/src/main/resources
中。我已经使用命令
kubectl exec -it pod-name -- /bin/sh
检查过它。

这是我的 build.sbt 如何使用 sbt-native-packager 创建 docker-image:

import com.typesafe.sbt.packager.docker.*

ThisBuild / version := "0.1.0-SNAPSHOT"

ThisBuild / scalaVersion := "2.13.4"

lazy val root = (project in file("."))
  .settings(
    name := "my-project"
  )

enablePlugins(JavaAppPackaging, DockerPlugin)

Docker / packageName := "my-image"

Docker / version := "0.0.1"
dockerExposedPorts := Seq(8082)

dockerChmodType := DockerChmodType.UserGroupWriteExecute
dockerPermissionStrategy := DockerPermissionStrategy.CopyChown
dockerAdditionalPermissions += (DockerChmodType.UserGroupPlusExecute, "/var/run/")

Docker / daemonUserUid := None
Docker / daemonUser := "root"

指导我该怎么做?

docker kubernetes docker-compose
1个回答
0
投票

您可以使用

build.sbt
复制docker容器中所需的内容。

只需在 build.sbt 中添加以下行:

import com.typesafe.sbt.packager.MappingsHelper.directory

Universal / mappings ++= directory("src/main/resources")

通过在 build.sbt 中添加上述行,然后当您点击

docker:publishLocal
时,它将把内容从 src/main/resources 复制到 docker 镜像(/opt/docker/src/main/resources)。

这适用于您的情况,无需在 k8 中创建卷。

© www.soinside.com 2019 - 2024. All rights reserved.