Translate docker run commands with initialization to a multi-container k8s pod or compose

自古美人都是妖i 提交于 2021-01-07 01:22:36

问题


I have a container that I need to configure for k8s yaml. The workflow on docker run using the terminal looks like this.:

docker run -v $(pwd):/projects \
             -w /projects \
             gcr.io/base-project/myoh:v1 init *myproject*

This command creates a directory called myproject. To complete the workflow, I need to cd into this myproject folder and run:

docker run -v $(pwd):/project \
             -w /project \
             -p 8081:8081 \
             gcr.io/base-project/myoh:v1

Any idea how to convert this to either a docker-compose or a k8s pods/deployment yaml? I have tried all that come to mind with no success.


回答1:


The bind mount of the current directory can't be translated to Kubernetes at all. There's no way to connect a pod's filesystem back to your local workstation. A standard Kubernetes setup has a multi-node installation, and if it's possible to directly connect to a node (it may not be) you can't predict which node a pod will run on, and copying code to every node is cumbersome and hard to maintain. If you're using a hosted Kubernetes installation like GKE, it's even possible that the cluster autoscaler will create and delete nodes automatically, and you won't have an opportunity to manually copy things in.

You need to build your application code into a custom image. That can set the desired WORKDIR, COPY the code in, and RUN any setup commands that are required. Then you need to push that to an image repository, like GCR

docker build -t gcr.io/base-project/my-project:v1 .
docker push gcr.io/base-project/my-project:v1

Once you have that, you can create a minimal Kubernetes Deployment to run it. Set the GCR name of the image you built and pushed as its image:. You will also need a Service to make it accessible, even from other Pods in the same cluster.




回答2:


Try this (untested yaml, but you will get the idea)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myoh-deployment
  labels:
    app: myoh
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myoh
  template:
    metadata:
      labels:
        app: myoh
    spec:
      initContainers:
      - name: init-myoh
        image: gcr.io/base-project/myoh:v1
        command: ['sh', '-c', "mkdir -p myproject"]
      containers:
      - name: myoh
        image: gcr.io/base-project/myoh:v1
        ports:
        - containerPort: 8081
        volumeMounts:
        - mountPath: /projects
          name: project-volume
    volumes:
    - name: test-volume
      hostPath:
        # directory location on host
        path: /data
        # this field is optional
        type: Directory


来源:https://stackoverflow.com/questions/65030419/translate-docker-run-commands-with-initialization-to-a-multi-container-k8s-pod-o

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!