云原生技術(shù)kubernetes之volumes容器的使用
卷(volumes):
容器中的文件存在時間是短暫的,當(dāng)一個容器發(fā)生崩潰時,文件會丟失,而容器重新啟動后狀態(tài)卻是干凈的;而第二個問題時解決了一個Pod中不同容器間共享文件。
卷的類型有很多,詳細(xì)請查看官方文檔:卷
1.emptyDir
1.1.emptyDir卷特性:
當(dāng)Pod被創(chuàng)建時,emptyDir卷也隨之創(chuàng)建,在Pod運(yùn)行期間,此卷會一直存在。
用于Pod中不同容器間的數(shù)據(jù)共享。
當(dāng) Pod 從節(jié)點(diǎn)上刪除時,emptyDir 卷中的數(shù)據(jù)也會被永久刪除并不會保存。
emptyDir 卷存儲在該節(jié)點(diǎn)所使用的介質(zhì)可以是磁盤或 SSD 或網(wǎng)絡(luò)存儲也可以是內(nèi)存;
注意介質(zhì)為內(nèi)存的話會記入容器消耗。
1.2.官方示例:
配置項(xiàng)只有最后三行,相對比較簡單。
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
1.3.我們做一個實(shí)例:
第一步:我們創(chuàng)建一個準(zhǔn)備用的deploy類型的yaml文件,上面通用部分沒貼,主要看我們要用的這部分,創(chuàng)建兩個nginx容器,將emptyDir的卷分別掛在兩個容器下。
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
第二步:執(zhí)行yaml文件創(chuàng)建deploy資源
[root@k8s-master01 ~]# kubectl create -f dp-nginx.yaml deployment.apps/dp-cm created [root@k8s-master01 ~]# kubectl get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGE dp-nginx 1/1 1 1 17m [root@k8s-master01 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE dp-nginx-98db5f6df-6g24r 2/2 Running 0 2m40s
第三步:在nginx容器的/opt目錄下創(chuàng)建一個文件,然后再redis容器內(nèi)成都/tmp目錄下查看,看是否共享
# 在nginx容器內(nèi)創(chuàng)建文件 [root@k8s-master01 ~]# kubectl exec -ti dp-nginx-98db5f6df-6g24r -c nginx -- bash root@dp-nginx-98db5f6df-6g24r:/# cd /opt/ root@dp-nginx-98db5f6df-6g24r:/opt# touch haha.txt root@dp-nginx-98db5f6df-6g24r:/opt# ls haha.txt # 到redis容器查看是否文件共享 [root@k8s-master01 ~]# kubectl exec -ti dp-nginx-98db5f6df-6g24r -c redis -- ls /tmp haha.txt
第四步:沒有第四步了,從第三步可以看到在nginx容器創(chuàng)建的文件,是可以在redis容器內(nèi)看到的,所有共享卷是成功的。
2.HostPath
2.1.HostPath卷特性:
hostPath 卷能將主機(jī)節(jié)點(diǎn)文件系統(tǒng)上的文件或目錄掛載到你的 Pod 中。
注意:官方是不推薦使用這種方式的,但是當(dāng)你需要使用hostPath時,它的范圍應(yīng)僅限于所需的文件或目錄,并以只讀方式掛載。
2.2.官方示例:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
# 宿主上目錄位置
path: /data
# 此字段為可選
type: Directory
hostPath類型支持的type值:
默認(rèn)為空:意味著在安裝 hostPath 卷之前不會執(zhí)行任何檢查。
DirectoryOrCreate:如果在給定路徑上什么都不存在,那么將根據(jù)需要創(chuàng)建空目錄,權(quán)限設(shè)置為 0755,具有與 kubelet 相同的組和屬主信息。
Directory:在給定路徑上必須存在的目錄。
FileOrCreate:如果在給定路徑上什么都不存在,那么將在那里根據(jù)需要創(chuàng)建空文件,權(quán)限設(shè)置為 0644,具有與 kubelet 相同的組和所有權(quán)。
File:在給定路徑上必須存在的文件。
Socket:在給定路徑上必須存在的 UNIX 套接字。
CharDevice:在給定路徑上必須存在的字符設(shè)備。
BlockDevice:BlockDevice
注意: FileOrCreate 模式不會負(fù)責(zé)創(chuàng)建文件的父目錄。 如果欲掛載的文件的父目錄不存在,Pod 啟動會失敗。
2.3.我們做一個實(shí)例:
我們的舉例是用的File類型,你也可以嘗試其他類型,配置方式都一樣
第一步:從下面這個例子中可以看到容器內(nèi)的時區(qū)與我們宿主機(jī)時區(qū)是不一樣的
[root@k8s-master01 ~]# kubectl exec -ti dp-nginx-98db5f6df-6g24r -c nginx -- cat /etc/timezone Etc/UTC [root@k8s-master01 ~]# cat /etc/timezone Asia/Shanghai
第二步:修改yaml文件,然后更新deploy副本
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /opt
name: share-volume
- mountPath: /etc/timezone
name: timezone
- image: redis
name: redis
volumeMounts:
- mountPath: /tmp
name: share-volume
volumes:
- name: share-volume
emptyDir: {}
- name: timezone
hostPath:
path: /etc/timezone # 宿主機(jī)路徑
type: File
# 更新副本,注意大小寫,我剛才file寫的小寫報錯了
[root@k8s-master01 ~]# kubectl replace -f dp-nginx.yaml
deployment.apps/dp-nginx replaced
第三步:查看容器時區(qū),是成功的,已經(jīng)修改為shanghai;可以看到掛載宿主機(jī)時區(qū)的已經(jīng)修改,沒掛載的redis容器的時區(qū)還是默認(rèn)
[root@k8s-master01 ~]# kubectl exec dp-nginx-7b456ccf45-8c8fn -c nginx -- cat /etc/timezone Asia/Shanghai [root@k8s-master01 ~]# kubectl exec dp-nginx-7b456ccf45-8c8fn -c redis -- cat /etc/timezone Etc/UTC
3.nfs
nfs 卷能將 NFS (網(wǎng)絡(luò)文件系統(tǒng)) 掛載到你的 Pod 中。 不像 emptyDir 那樣會在刪除 Pod 的同時也會被刪除,nfs 卷的內(nèi)容在刪除 Pod 時會被保存,卷只是被卸載。
但是生產(chǎn)中不大建議使用。
這個實(shí)例我沒有準(zhǔn)備,就說下怎么做吧。有興趣可以自己做一下。
第一步:準(zhǔn)備一臺NFS服務(wù)器,創(chuàng)建共享目錄/data/test
第二步:將nfs的共享目錄掛載到Pod中
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /opt
name: nfs-volume
volumes:
- name: nfs-volume
nfs:
server: 192.168.10.10 # nfs服務(wù)器ip
path: /data/test
第三步:創(chuàng)建Pod資源后在容器內(nèi)部/opt下創(chuàng)建文件,在nfs服務(wù)器/data/test下查看是否共享,反過來測試也可以。如果資源共享說明成功。
其他類型的卷可以查看官網(wǎng),下一篇寫pv與pvc!
以上就是云原生容器kubernetes之volumes使用的詳細(xì)內(nèi)容,更多關(guān)于云原生容器kubernetes之volumes的資料請關(guān)注腳本之家其它相關(guān)文章!
- Kubernetes k8s configmap 容器技術(shù)解析
- 云原生Kubernetes初始化容器Init使用教程
- 一文解析Kubernetes使用PVC后數(shù)據(jù)丟失
- Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解
- 一文詳解基于Kubescape進(jìn)行Kubernetes安全加固
- kubernetes數(shù)據(jù)持久化StorageClass動態(tài)供給實(shí)現(xiàn)詳解
- Kubernetes?controller?manager運(yùn)行機(jī)制源碼解析
- 詳解Kubernetes 中容器跨主機(jī)網(wǎng)絡(luò)
相關(guān)文章
Kubernetes教程之Windows?HostProcess?運(yùn)行容器化負(fù)載
這篇文章主要介紹了Kubernetes?Windows?HostProcess?運(yùn)行容器化負(fù)載,本篇內(nèi)容還是比較多的,總共包含了?Windows?HostProcess的創(chuàng)建、為?Windows?Pod?和容器配置?GMSA?和?Windows?的?Pod?和容器配置?RunAsUserName三大功能模塊,需要的朋友可以參考下2022-07-07
ES業(yè)務(wù)數(shù)據(jù)遷移遇到的精度問題BUG
這篇文章主要為大家介紹了ES業(yè)務(wù)數(shù)據(jù)遷移遇到的BUG精度問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
詳解k8s ConfigMap 中 subPath 字段和 items
volumeMounts.subPath 屬性可用于指定所引用的卷內(nèi)的子路徑,而不是其根路徑,這篇文章主要介紹了詳解k8s ConfigMap 中 subPath 字段和 items 字段,需要的朋友可以參考下2023-03-03
云原生技術(shù)kubernetes之volumes容器的使用
這篇文章主要為大家介紹了云原生技術(shù)kubernetes之volumes容器使用方式,?有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Kubernetes故障排除有效維護(hù)集群的最佳實(shí)踐工具
這篇文章主要為大家介紹了Kubernetes故障排除有效維護(hù)集群的最佳實(shí)踐工具詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Kubernetes實(shí)現(xiàn)CI與CD配置教程
這篇文章主要為大家介紹了基于Kubernetes實(shí)現(xiàn)CI與CD配置教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
K8S內(nèi)部pod之間相互調(diào)用案例以及詳解
這篇文章主要給大家介紹了關(guān)于K8S內(nèi)部pod之間相互調(diào)用案例的相關(guān)資料,Pod是Kubernetes中最小的可部署單元,它是一個或多個容器的集合,它們共享網(wǎng)絡(luò)和存儲資源,并在同一節(jié)點(diǎn)上運(yùn)行,需要的朋友可以參考下2023-08-08
Kubernetes存儲系統(tǒng)數(shù)據(jù)持久化管理詳解
這篇文章主要為大家介紹了Kubernetes存儲系統(tǒng)數(shù)據(jù)持久化管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

