Docker容器在kubernetes内部工作/不工作

时间:2019-06-20 08:49:02

标签: docker kubernetes kubernetes-pod

我在这里有点困惑。它确实像普通的Docker容器一样工作,但是当它进入吊舱内部时却没有。所以这就是我的方法。

  

在我本地的Dockerfile中创建映像并发布到Docker注册表

FROM alpine:3.7
COPY . /var/www/html
CMD tail -f /dev/null

现在,如果我只是拉出图像(删除本地图像后)并作为容器运行。它可以正常工作,我可以在/ var / www / html中看到我的文件。

现在我想在我的kubernetes集群中使用它。

  

Def:Minikube --vm-driver = none

我在minikube内部运行kube,没有驱动程序选项。因此对于单节点群集。

编辑

如果我删除了卷挂载并从部署文件中声明了所有权,那么我可以在/ var / www / html中看到我的数据。

  

部署文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    io.kompose.service: app
  name: app
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: app
    spec:
      securityContext:
        runAsUser: 1000
        runAsGroup: 1000
      containers:
      - image: kingshukdeb/mycode
        name: pd-mycode
        resources: {}
        volumeMounts:
        - mountPath: /var/www/html
          name: claim-app-storage
      restartPolicy: Always
      volumes:
      - name: claim-app-storage
        persistentVolumeClaim:
          claimName: claim-app-nginx
status: {}
  

PVC文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: app-nginx1
  name: claim-app-nginx
spec:
  storageClassName: testmanual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}
  

PV文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-nginx1
  labels:
    type: local
spec:
  storageClassName: testmanual
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/volumes/app"

现在,当我运行这些文件时,它会创建pod,pv,pvc和pvc绑定到pv。但是,如果我进入容器,则看不到文件。 hostpath / data / volumes / app 。任何想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

将PVC绑定到Pod时,会将卷安装在pod / deployment yaml文件中描述的位置。您的情况是:mountPath: /var/www/html。这就是为什么无法访问“烘焙到”容器映像中的文件的原因(here的简单解释)

您可以通过执行kubectl exec YOUR_POD -i -t -- /bin/sh并运行mount | grep "/var/www/html"来对容器执行exec确认。

解决方案

您可以通过多种方式解决此问题。最好的做法是将静态数据分开(即在PV中),并保持容器映像尽可能小和快速。

如果将要装入PV的文件传输到主机路径/data/volumes/app,则可以在pod中访问它们,然后可以省略COPY操作来创建新映像。这样,即使pod崩溃了,也会保存对您的应用所做的文件所做的更改。

如果要由多个吊舱声明PV,则需要按照here所述更改accessModes

  

访问方式为:

     
      
  • ReadWriteOnce –该卷可以通过单个节点以读写方式安装
  •   
  • ReadOnlyMany –该卷可以被许多节点只读挂载
  •   
  • ReadWriteMany –该卷可以被许多节点以读写方式安装
  •   

Kubernetes文档中有关卷的深入说明:https://kubernetes.io/docs/concepts/storage/persistent-volumes/