Pod 未写入本地路径
Pod not writing on a local path
我是容器和 kubernetes 的新手。
我想做的是创建一个可以访问本地目录的 pod。
我已遵循以下指示:
configure persistent volume storage
创建了我的 Persistent Volume、Persistent Volume Claim 和我的 pod。
问题是 tomcat 无法写入共享目录
这是持久卷:
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-webapp6
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 3Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/opt/test_tomcat/app"
这是持久卷声明:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-webapp6
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
这是我要创建的 tomcat Pod:
apiVersion: v1
kind: Pod
metadata:
name: webapp6
spec:
containers:
- image: tomcat:8.0
name: webapp6
ports:
- containerPort: 8080
name: webapp6
volumeMounts:
- mountPath: /usr/local/tomcat/webapps
name: test-volume
volumes:
- name: test-volume
persistentVolumeClaim:
claimName: pvc-webapp6
有点明显,但这是 pod 上的错误。
[root@testserver webapp6-test]# kubectl exec -it webapp6 -- /bin/bash
root@webapp6:/usr/local/tomcat# mkdir /usr/local/tomcat/webapps/sample
mkdir: cannot create directory ‘/usr/local/tomcat/webapps/sample’: Permission denied
问题出在您没有指定 storageClassName
的 PVC yaml 文件中。因此 PV 和 PVC 不能相互绑定。请将 PVC yaml 文件替换为以下文件:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-webapp6
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
现在一切正常。希望这有帮助。
我很快用你的 yaml 部署了 pod,在我这边一切正常:
[root@Master admin]# kubectl exec -it webapp6 bash
root@webapp6:/usr/local/tomcat# mkdir /usr/local/tomcat/webapps/sample
root@webapp6:/usr/local/tomcat# touch /usr/local/tomcat/webapps/sample/a
root@webapp6:/usr/local/tomcat# ls /usr/local/tomcat/webapps/sample/
a
现在当我查看主机时,我可以看到新创建的 a
文件
[root@Master admin]# ls /opt/test_tomcat/app/sample/
a
所以,至少 yaml 文件可以正常工作。
我是容器和 kubernetes 的新手。 我想做的是创建一个可以访问本地目录的 pod。
我已遵循以下指示: configure persistent volume storage
创建了我的 Persistent Volume、Persistent Volume Claim 和我的 pod。
问题是 tomcat 无法写入共享目录
这是持久卷:
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-webapp6
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 3Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/opt/test_tomcat/app"
这是持久卷声明:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-webapp6
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
这是我要创建的 tomcat Pod:
apiVersion: v1
kind: Pod
metadata:
name: webapp6
spec:
containers:
- image: tomcat:8.0
name: webapp6
ports:
- containerPort: 8080
name: webapp6
volumeMounts:
- mountPath: /usr/local/tomcat/webapps
name: test-volume
volumes:
- name: test-volume
persistentVolumeClaim:
claimName: pvc-webapp6
有点明显,但这是 pod 上的错误。
[root@testserver webapp6-test]# kubectl exec -it webapp6 -- /bin/bash
root@webapp6:/usr/local/tomcat# mkdir /usr/local/tomcat/webapps/sample
mkdir: cannot create directory ‘/usr/local/tomcat/webapps/sample’: Permission denied
问题出在您没有指定 storageClassName
的 PVC yaml 文件中。因此 PV 和 PVC 不能相互绑定。请将 PVC yaml 文件替换为以下文件:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-webapp6
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
现在一切正常。希望这有帮助。
我很快用你的 yaml 部署了 pod,在我这边一切正常:
[root@Master admin]# kubectl exec -it webapp6 bash
root@webapp6:/usr/local/tomcat# mkdir /usr/local/tomcat/webapps/sample
root@webapp6:/usr/local/tomcat# touch /usr/local/tomcat/webapps/sample/a
root@webapp6:/usr/local/tomcat# ls /usr/local/tomcat/webapps/sample/
a
现在当我查看主机时,我可以看到新创建的 a
文件
[root@Master admin]# ls /opt/test_tomcat/app/sample/
a
所以,至少 yaml 文件可以正常工作。