使用emptyDir
1 创建实验目录
mkdir ~/huawei_k8s/labfile/storagefile;cd ~/huawei_k8s/labfile/storagefile
2 使用emptyDir的pod的yaml文件
#vim empty-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: em
spec:
containers:
- image: ubuntu
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
args:
- /bin/sh
- -c
- sleep 30000
volumes:
- name: cache-volume
emptyDir: {}
3 创建pod
4 进入容器,在emptyDir挂载的目录中创建一个文件
kubectl exec em -it /bin/sh
cd /cache
cat > hello.file <<EOF
hello
world
EOF
cat hello.file
exit
5 查看pod所在的节点,在node2上
kubectl get pod -o wide
6 登录node2节点,查看运行的容器
docker ps
7 在其中找到之前创建的pod主容器,查看信息
8 进入该文件中显示的目录
ls /var/lib/kubelet/pods//volumes/kubernetes.io~empty-dir/cache-volume
使用emptyDir的容器限制功能
1 创建带容量限制的emptyDir pod yaml
#vim limit-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: em2
spec:
containers:
- image: ubuntu
name: test-container2
volumeMounts:
- mountPath: /cache
name: cache-volume
args:
- /bin/sh
- -c
- sleep 30000
volumes:
- name: cache-volume
emptyDir:
sizeLimit: 1Gi
2 创建pod
3 进入pod,在/cache文件夹内创建一个2G的文件
kubectl exec -it em2 /bin/sh
cd /cahe
dd if=/dev/zero of=/cache/test2g bs=1M count=2048
4 查看容器状态,进入evicted状态,说明限制生效
kubectl get pod
hostPath
1 节点上创建一个问价夹,用于挂载给pod
mkdir /testdir
2 创建hostPath的pod的yaml,挂载给pod的目录地址为主机存在的文件夹
#vim hostPath-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: hppod
spec:
containers:
- image: ubuntu
name: hp-container
volumeMounts:
- mountPath: /hp-dir
name: hp-volume
args:
- /bin/sh
- -c
- sleep 30000
volumes:
- name: hp-volume
hostPath:
path: /testdir
type: Directory
4 进入pod,在挂载的hostPath的文件及内写入一个文件
kubectl exec -it hppod /bin/sh
cd /hp-dir
ls
cat >hello2 <<EOF
hello
again
EOF
exit
5 进入对应的节点的对应目录,查看该文件是否存在
PV和PVC
1 搭建nfs服务,配置如下
#执行以下命令安装 nfs 服务器所需的软件包
yum install -y rpcbind nfs-utils
#执行命令 vim /etc/exports,创建 exports 文件,文件内容如下:
/root/nfs_root/ *(insecure,rw,sync,no_root_squash)
#执行以下命令,启动 nfs 服务
# 创建共享目录,如果要使用自己的目录,请替换本文档中所有的 /root/nfs_root/
mkdir /root/nfs_root
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs -r
#检查配置是否生效
exportfs
# 输出结果如下所示
/root/nfs_root /root/nfs_root
#NFS服务器搭建完毕后,要确认防火墙是否关闭,或者是打开了TCP2049.TCP111 端口
#检查挂载点
showmount -e localhost
2 编写pv的yaml文件
#vim pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /root/nfs_root
server: 192.168.85.6
3 创建并查看pv
kubectl apply -f pv1.yaml
kubectl get pv
4 创建PVC的yaml文件,配置的时候指定pv的名称
#vim pvc1.yaml
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
volumeName: mypv
resources:
requests:
storage: 1Gi
5 创建PVC
6 查看PV和PVC的状态,可以看到PV的状态由Available变为Bound,而PVC的状态也是Bound
kubectl get pv,pvc
7 创建pod,使用PVC
#vim testpod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: pvctest
name: pvcpod
spec:
containers:
- name: busybox
args:
- /bin/sh
- -c
- sleep 30000
image: busybox
volumeMounts:
- mountPath: /pvcdir
name: pvc-volume
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: mypvc
8 创建pod,并进入pod写入文件
kubectl exec -it pvcpod /bin/bash
cd /pvcdir
ls
touch hello
exit
9 检查nfs目录查看似乎存在hello文件
10 删除pod和pvc,并等待系统自动回收完成
kubectl delete pod pvcpod
kubectl delete pvc mypvc && kubectl get pod -w
11 查看pv状态,再次变成availael的可用状态
使用StroageClass方式关联PV和PVC
1 创建PV的YAML文件
#vim pv-sc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-sc
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /root/nfs_root
server: 192.168.85.6
2 创建pvc的yaml文件
#vim pvc-sc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-sc
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs
resources:
requests:
storage: 1Gi
3 创建pv,pvc
4查看pv和pvc的绑定
在没有pod挂载storageclass类型的pvc之前,处于pending状态
挂载之后,处于bound状态