1. emptyDir 示例
kubectl explain pods.spec.volumes # 查看支持的 volume 类型
vim emptydir-demo.yaml # 创建 YAML 文件
apiVersion: v1
kind: Pod
metadata:
name: emptydir-demo
spec:
containers:
- name: c1
image: nginx:latest
volumeMounts:
- mountPath: /messages
name: data
args:
- /bin/sh
- -c
- echo "hello world" > /messages/hello; sleep 30000
- name: c2
image: nginx:latest
volumeMounts:
- mountPath: /messages
name: data
args:
- /bin/sh
- -c
- cat /messages/hello; sleep 30000
volumes:
- name: data
emptyDir: {}
kubectl create -f emptydir-demo.yaml
kubectl get pod -o wide
kubectl get pod emptydir-demo -o json
2. hostPath 示例
vim hostPath.yaml
apiVersion: v1
kind: Pod
metadata:
name: hostpath-demo
spec:
containers:
- image: nginx
name: test-container
volumeMounts:
- mountPath: /data
name: test-volume
volumes:
- name: test-volume
hostPath:
path: /root/data
kubectl create -f hostPath.yaml
kubectl get pods -o wide
3. NFS 示例
在所有节点执行:
rpm -q rpcbind nfs-utils || yum install rpcbind nfs-utils -y
systemctl start nfs
systemctl enable --now nfs-server.service
配置共享目录并导出:
mkdir -p /data/dsk1
vim /etc/exports
# 添加行:
/data/dsk1 *(rw,sync,no_root_squash)
exportfs -rv
showmount -e
在 Node 节点手动挂载测试:
mkdir -p /nfs-client-share
mount <IP>:/data/dsk1 /nfs-client-share
df -Th | grep nfs-client-share
定义 Pod 使用 NFS:
vim nfs-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: nfspathpod
labels:
name: nfsdemo
role: master
spec:
containers:
- name: c1
image: nginx
volumeMounts:
- name: nfs-storage
mountPath: /nfs/
volumes:
- name: nfs-storage
nfs:
path: /data/dsk1
server: <IP>
kubectl create -f nfs-volume.yaml
kubectl get pods -o wide
4. Secret 示例
文件方式:
echo -n "admin" > username.txt
echo -n "d5eeff42" > password.txt
kubectl create secret generic db-secret --from-file=./username.txt --from-file=./password.txt
YAML 文件方式:
vim db-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: YWRtaW4=
password: ZDVlZWZmNDI=
kubectl create -f db-secret.yaml
使用 Secret 挂载到 Pod:
vim test-secret.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-secret
labels:
name: test-secret
role: master
spec:
containers:
- name: test-secret
image: nginx
volumeMounts:
- name: secret
mountPath: /home/iron/secret
readonly: true
volumes:
- name: secret
secret:
secretName: db-secret
kubectl create -f test-secret.yaml
kubectl exec -it test-secret -c test-secret -- ls /home/iron/secret
kubectl exec -it test-secret -c test-secret -- cat /home/iron/secret/username.txt
5. iSCSI 示例
客户端节点:
yum install iscsi-initiator-utils -y
systemctl start iscsid
systemctl enable iscsid
服务端节点:
yum install targetcli -y
systemctl start target
systemctl enable target
创建 Pod 使用 iSCSI 卷:
vim iscsipod.yaml
apiVersion: v1
kind: Pod
metadata:
name: iscsipd
spec:
containers:
- name: iscsipd-rw
image: kubernetes/pause
volumeMounts:
- mountPath: "/mnt/iscsipd"
name: iscsipd-rw
volumes:
- name: iscsipd-rw
iscsi:
targetPortal: <IP>:3260
portals: ['<IP>:3260']
iqn: iqn.2001-04.com.example:storage.kube.sys1.xyz
lun: 1
fsType: ext4
readonly: true
kubectl apply -f iscsipod.yaml
kubectl describe pod iscsipd
lsscsi # 在节点上查看挂载是否成功