我是 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"
指导我该怎么做?
您可以使用
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 中创建卷。