1.emptyDir存儲卷
apiVersion: v1
kind: Pod
metadata:
name: cunchujuan
spec:
containers:
- name: myapp
#定義第一容器用於顯示index.html文件內容
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
volumeMounts:
#調用存儲卷
- name: html
#使用存儲卷的名稱要和下面定義的一樣
mountPath: /usr/share/nginx/html/
#在容器內部掛載的路徑
- name: busybox
#定義第二個容器用於產生index.html內容
image: busybox:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /data/
command: ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done']
#該命令會不停向,存儲卷的index.html文件追加時間
volumes:
#定義存儲卷
- name: html
#定義存儲卷名稱
emptyDir: {}
#定義存儲卷類型
在上面,我們定義了2個容器,其中第二個容器是輸入日期到存儲卷的index.html當中,因爲兩個容器都是掛載的同一個存儲卷,所以第一個容器的index.html是和第二個共享的,不停curl 能看見index.html在不停的增長
hostPath存儲卷
apiVersion: v1
kind: Pod
metadata:
name: cs-hostpath
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes:
- name: html
hostPath:
#存儲卷類型爲 hostPath
path: /data/hostpath
#實際node節點上的路徑
type: DirectoryOrCreate
先看下調度到那個node的節點上,這邊調度到cs27節點上了
mkdir /data/hostpath/ -pv #在cs27節點上創建 hostpath的存儲卷文件夾
echo "hostpath存儲卷測試" >/data/hostpath/index.html #在存儲卷裏生成一個主頁文件
curl 訪問一下,能看到文件內容就是上面我們生成的
注意這邊容器在裏面修改了數據,是會同步到hostpath 的存儲卷的就和掛載一樣
3.nfs共享存儲卷
再找一臺主機充當nfs server
mkdir data #創建nfs文件夾
echo "nfs測試">index.html #創建測試html文件
yum install -y nfs-utils #安裝nfs 軟件
vim /etc/exports #修改nfs配置文件
/data/ 192.168.0.0/24(rw,no_root_squash)
#配置文件 路徑加共享對方的網段
每個node節點也要安裝 yum install -y nfs-utils ,否則無法沒掛載驅動
#在node的節點運行showmount -e 50.1.1.111 看看有沒有掛載權限
kubectl apply -f nfs.yaml #載入容器資源
查看下ip ,curl 訪問一下看是不是之前在nfs server上創建的html的測試文件
4.NFS使用PV和PVC
4.1 pv定義方式介紹
[root@k8s-master ~]# kubectl explain pv #查看pv的定義方式
FIELDS:
apiVersion
kind
metadata
spec
[root@k8s-master ~]# kubectl explain pv.spec #查看pv定義的規格
spec:
nfs(定義存儲類型)
path(定義掛載卷路徑)
server(定義服務器名稱)
accessModes(定義訪問模型,有以下三種訪問模型,以列表的方式存在,也就是說可以定義多個訪問模式)
ReadWriteOnce(RWO) 單節點讀寫
ReadOnlyMany(ROX) 多節點只讀
ReadWriteMany(RWX) 多節點讀寫
capacity(定義PV空間的大小)
storage(指定大小)
[root@k8s-master volumes]# kubectl explain pvc #查看PVC的定義方式
KIND: PersistentVolumeClaim
VERSION: v1
FIELDS:
apiVersion <string>
kind <string>
metadata <Object>
spec <Object>
[root@k8s-master volumes]# kubectl explain pvc.spec
spec:
accessModes(定義訪問模式,必須是PV的訪問模式的子集)
resources(定義申請資源的大小)
requests:
storage:
4.2配置nfs 存儲
mkdir v{1,2,3,}
vim /etc/exports
/data/v1 192.168.0.0/24(rw,no_root_squash)
/data/v2 192.168.0.0/24(rw,no_root_squash)
/data/v3 192.168.0.0/24(rw,no_root_squash)
4.3定義3個pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
labels:
name: pv001
spec:
nfs:
path: /data/v1
server: 50.1.1.111
accessModes: ["ReadWriteMany","ReadWriteOnce",]
capacity:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv002
labels:
name: pv002
spec:
nfs:
path: /data/v2
server: 50.1.1.111
accessModes: ["ReadWriteMany","ReadWriteOnce",]
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv003
labels:
name: pv003
spec:
nfs:
path: /data/v3
server: 50.1.1.111
accessModes: ["ReadWriteMany","ReadWriteOnce",]
capacity:
storage: 5Gi
4.4 創建pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
#name ,給下面調用的
spec:
accessModes: ["ReadWriteMany"]
#聲明訪問類型,只能匹配到,pv包含的
resources:
requests:
storage: 3Gi
#聲明需要3GB的空間,只能匹配3GB及意思的PV
---
apiVersion: v1
kind: Pod
metadata:
name: cs-hostpath
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes:
- name: html
persistentVolumeClaim:
#掛載存儲卷類型爲 pvc
claimName: mypvc
#指定PVC的name爲 "mypvc"