kubernetes
1. 卷的作用
2. kubernetes支持的卷
3. emptyDir的使用场景
[kubeadm@server2 volumes]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: vol1
spec:
containers:
- image: busyboxplus
name: vm1
command: ["sleep","300"]
volumeMounts:
- mountPath: /cache
name: cache-volume
- name: vm2
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: cache-volume
volumes:
- name: cache-volume
emptyDir:
medium: Memory
sizeLimit: 100Mi
[kubeadm@server2 volumes]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
vol1 2/2 Running 0 2m26s
vm1和vm2挂载在同一个地方cache-volume
[kubeadm@server2 volumes]$ kubectl describe pod vol1
Containers:
vm1:
Mounts:
/cache from cache-volume (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
vm2:
Mounts:
/usr/share/nginx/html from cache-volume (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
[kubeadm@server2 volumes]$ kubectl exec -it vol1 -- sh
Defaulting container name to vm1.
Use 'kubectl describe pod/vol1 -n default' to see all of the containers in this pod.
/ # cd /cache/
/cache # echo hello > index.html
/cache # cat index.html
hello
/cache
[kubeadm@server2 volumes]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
vol1 2/2 Running 1 9m51s 10.244.1.45 server3 <none> <none>
[kubeadm@server2 volumes]$ curl 10.244.1.45
hello
emptydir的缺点
4. hostpath卷
[kubeadm@server2 volumes]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
path: /data
type: DirectoryOrCreate
[kubeadm@server2 volumes]$ kubectl apply -f pod.yaml
pod/test-pd created
[kubeadm@server2 volumes]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-pd 1/1 Running 0 39s 10.244.1.46 server3 <none> <none>
[root@server3 data]# pwd
/data
[kubeadm@server2 volumes]$ kubectl exec -it test-pd -- bash
root@test-pd:/# cd /test-pd/
root@test-pd:/test-pd# ls
root@test-pd:/test-pd# touch file
root@test-pd:/test-pd# exit
[root@server3 data]# ls
file
5. nfs示例
server1上配置nfs
[root@server1 /nfs]#cat /etc/exports
/nfs *(rw,no_root_squash)
[root@server1 /nfs]#systemctl start nfs
[root@server1 /nfs]#showmount -e
Export list for server1:
/nfs *
在节点上安装
yum install nfs-utils -y
[kubeadm@server2 volumes]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: test-container
volumeMounts:
- mountPath: /usr/share/nginx/html
name: test-volume
volumes:
- name: test-volume
nfs:
server: 172.25.60.1
path: /nfs
[kubeadm@server2 volumes]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-pd 1/1 Running 0 10s 10.244.2.45 server3 <none> <none>
[kubeadm@server2 volumes]$ kubectl exec -it test-pd -- bash
root@test-pd:/# cd /usr/share/nginx/html/
root@test-pd:/usr/share/nginx/html# echo westos > index.html
root@test-pd:/usr/share/nginx/html# cat index.html
westos
root@test-pd:/usr/share/nginx/html# exit
exit
[root@server1 /nfs]#ls
config index.html
[root@server1 /nfs]#cat index.html
westos
[root@server3 yum.repos.d]# mount|grep nfs
172.25.60.1:/nfs on /var/lib/kubelet/pods/cf3083fd-09fc-4b32-a052-f390a7e8a9b2/volumes/kubernetes.io~nfs/test-volume type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.25.60.3,local_lock=none,addr=172.25.60.1)
6. persistentVolume持久卷
6.1 nfs的pv示例
创建pv
[kubeadm@server2 pv]$ cat pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
nfs:
path: /nfs
server: 172.25.60.1
[kubeadm@server2 pv]$ kubectl apply -f pv1.yaml
persistentvolume/pv1 created
[kubeadm@server2 pv]$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWO Recycle Available slow 5s
创建pv
[kubeadm@server2 pv]$ cat pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /nfs
server: 172.25.60.1
创建pvc
[kubeadm@server2 pv]$ cat pvc1.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1
spec:
storageClassName: nfs
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
[kubeadm@server2 pv]$ kubectl apply -f pv1.yaml
[kubeadm@server2 pv]$ kubectl apply -f pvc1.yaml
[kubeadm@server2 pv]$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc1 Bound pv1 1Gi RWO nfs 4m35s
[kubeadm@server2 pv]$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWO Recycle Bound default/pvc1 nfs 10m
pod挂载pv
[kubeadm@server2 pv]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: storage1
volumes:
- name: storage1
persistentVolumeClaim:
claimName: pvc1
[kubeadm@server2 pv]$ kubectl apply -f pod.yaml
pod/test-pd created
[kubeadm@server2 pv]$ kubectl describe pod test-pd
Mounts:
/usr/share/nginx/html from storage1 (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
[kubeadm@server2 pv]$ kubectl exec -it test-pd -- bash
root@test-pd:/# cd /usr/share/nginx/html/
root@test-pd:/usr/share/nginx/html# ls
config index.html
root@test-pd:/usr/share/nginx/html# echo westos > index.html
root@test-pd:/usr/share/nginx/html# exit
[kubeadm@server2 pv]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-pd 1/1 Running 0 2m48s 10.244.1.49 server3 <none> <none>
[kubeadm@server2 pv]$ curl 10.244.1.49
westos
[root@server1 /nfs]#cat index.html
westos
[root@server1 /nfs]#ll
total 4
drwx------ 2 root root 6 Apr 9 22:48 config
-rw-r--r-- 1 root root 7 Apr 26 11:30 index.html
删除pod,重新建立一个新的pod,检测是否还能访问到westos
[kubeadm@server2 pv]$ kubectl delete -f pod.yaml
pod "test-pd" deleted
[kubeadm@server2 pv]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pd2
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: storage1
volumes:
- name: storage1
persistentVolumeClaim:
claimName: pvc1
[kubeadm@server2 pv]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-pd2 1/1 Running 0 12s 10.244.2.46 server4 <none> <none>
[kubeadm@server2 pv]$ curl 10.244.2.46
westos
删除pvc
index.html文件也相应删除
[root@server1 /nfs]#ls
config