代码之家  ›  专栏  ›  技术社区  ›  user84592

Kubernetes,VolumeMounts是一个文件,不是一个目录

  •  0
  • user84592  · 技术社区  · 7 年前

    我将使用K8S来编排docker容器。在k8s中,我需要从主机目录复制一个文件( /configs/nginx/cas-server.conf )到pod容器目录( /etc/nginx/nginx.conf ),但当前的k8s只允许装载目录,不允许装载/复制文件。如何解决这个问题?

    下面是我的nginx-cas-server-deply.yaml文件。

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-cas-server-depl
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx-cas-server-pod
        spec:
          containers:
          - name: nginx-cas-server-pod
            image: nginx
            imagePullPolicy: Never
            ports:
              - containerPort: 100
            volumeMounts:
            - mountPath: /etc/nginx/nginx.conf
              name: nginx-cas-server-conf
            - mountPath: /app/cas-server/public
              name: nginx-cas-server-public
          volumes:
          - name: nginx-cas-server-conf
            hostPath:
              path: /configs/nginx/cas-server.conf
          - name: nginx-cas-server-public
            hostPath:
              path: /cas-server/public
    
    3 回复  |  直到 7 年前
        1
  •  10
  •   Artem Golenyaev    7 年前

    mountPath 具有 目录 和 姓名及 subPath 野战 文件 /etc/nginx/nginx.conf nginx.conf

    以下是一个例子:

    # ls /config/
    nginx.conf  some_dir
    

    Nginx部署的配置文件

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        run: nginx
      name: nginx
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: nginx
      template:
        metadata:
          labels:
            run: nginx
        spec:
          containers:
          - image: nginx
            name: nginx
            volumeMounts:
            - mountPath: /etc/nginx/nginx.conf 
              name: test
              subPath: nginx.conf
          volumes:
          - hostPath:
              path: /config
            name: test
    
        2
  •  1
  •   Prafull Ladha    7 年前

    您可以使用hostPath将文件从主机装载到吊舱,我正在为我的elasticsearch集群执行此操作,我希望将我的elasticsearch.yml文件从主机装载到吊舱。

    您需要记住,文件是装入的(不是复制的),因此您在一个文件中所做的更改会反映在两个位置。请看下面的内容 yaml文件:

    {
      "kind": "StatefulSet",
      "apiVersion": "apps/v1beta1",
      "metadata": {
        "name": "ES",
        "labels": {
          "state": "es"
        }
      },
      "spec": {
          "spec": {
            "containers": [
              {
                "name": "es",
                "image": "",
                "imagePullPolicy": "IfNotPresent",
                "command": [
                  "/bin/sh",
                  "-c"
                ],
                "volumeMounts": [
                  {
                    "mountPath":"/data/elasticsearch/conf/elasticsearch.yml",
                    "name":"esconf"
                  }
                ]
              }
            ],
            "volumes": [
              {
                "name": "esconf",
                "hostPath": {
                  "path": "/prafull/data/md_elasticsearch.yml",
                  "type": "FileOrCreate"
                }
              }
            ],
            "restartPolicy": "Always",
            "imagePullSecrets": [
              {
                "name": "gcr-imagepull-json-key"
              }
            ]
          }
        }
      }
    }
    

        3
  •  0
  •   unnik    7 年前

    Kubernetes装载整个文件夹,因此该文件夹的所有内容都将对您的容器可见。

    您可以创建指向该文件的符号链接,而不是复制该文件 /etc/nginx/nginx.conf /configs/nginx/cas-server.conf . 但要做到这一点,理想的方法是更新docker映像的入口点

    参考链接 https://www.cyberciti.biz/faq/creating-soft-link-or-symbolic-link/

    推荐文章