最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

k8s 中的卷

2023-07-12 22:27 作者:阿兵云原生  | 我要投稿

前面的文章我們分享了 pod ,RC,RS,DaemonSet,CJ,Service 等各種資源

今天我們來分享一波如何將磁盤掛載到容器中,在 docker 里面這種技術(shù)叫做 數(shù)據(jù)卷,感興趣的小伙伴可以查看一下文章:【Docker 系列】docker 學(xué)習(xí)六,探究一下數(shù)據(jù)卷容器

對(duì)于一個(gè) pod ,他有自己的 CPU,RAM,網(wǎng)絡(luò)接口等資源都是可以被 pod 里面的容器共享的,但是每一個(gè)容器是有自己獨(dú)立的文件系統(tǒng)的,那么在我們平時(shí)使用需要使用給到文件系統(tǒng)的時(shí)候就會(huì)出現(xiàn)這個(gè)問題

舉個(gè)例子

當(dāng)前 pod1 運(yùn)行著,產(chǎn)生了一些數(shù)據(jù),由于某種原因,該 pod 被重啟了(刪除該 pod1 ,重新啟動(dòng)一個(gè) pod2),新的 pod2 若期望繼續(xù)使用前一個(gè) pod1 產(chǎn)生的數(shù)據(jù),那么這種情況是不行的

因此,卷就有了用處

卷是什么呢?

這里的就是指的數(shù)據(jù)卷,他并不是 k8s 里面的一類資源,他只是被定義為 pod 的一部分,他在 k8s 中也不是獨(dú)立的對(duì)象,他是 pod 的一個(gè)組成部分,我們在寫 pod 清單的時(shí)候,就可以使用關(guān)鍵字 volume 來指定卷

我們知道,一個(gè) pod 里面可以定義多個(gè)容器,pod 里面的卷也可以被這這里面的多個(gè)容器共享對(duì)于 pod 里面的卷,也并不是每一個(gè)容器都要使用,這些都是可以按照自己的需求進(jìn)行配置的

看圖說話:

一個(gè) pod 里面有 3 個(gè)容器,2 個(gè)卷,可以按照自己的需求去配置

卷的多種類型

卷的類型多種多樣,不同的需求會(huì)用到不同的卷,有如下這些類型

  • emptyDIr

  • gitRepo

  • hostPath

  • nfs

  • 云服務(wù)商特定的存儲(chǔ)類型等等

  • 特殊類型的卷

此處說的特殊類型的卷,指的是 configMap,secret,downloadApi 等類型的卷

本次分享主要是前 4 種類型的應(yīng)用場景和使用方式

emptyDir ,gitRepo

emptyDir

emptyDir ,根據(jù)名稱我們大概知道這是一個(gè)空目錄,也就是卷是從一個(gè)空的目錄開始的,咱們 pod 里面的多個(gè)容器都可以對(duì)他進(jìn)行寫入數(shù)據(jù),寫入一下臨時(shí)的大量數(shù)據(jù)也是可行的

但是有一點(diǎn)我們需要注意:

emptyDir 類型的卷,會(huì)隨著 pod 的啟動(dòng)而生成,隨著 pod 的刪除而消失

小案例

我們可以來模擬一下 pod 中,多個(gè)容器共享一個(gè)掛載的小案例

創(chuàng)建一個(gè)在卷中寫數(shù)據(jù)的鏡像,和創(chuàng)建一個(gè)從卷中讀取數(shù)據(jù)的鏡像

echo_uuid.sh

#~/bin/bash
mkdir?/var/testuuid

while?:
do
??STR=`cat?/proc/sys/kernel/random/uuid`
??echo?${STR}?>?/var/testuuid/info.txt
??echo?uuid?-?${STR}
??sleep?5
done

主要功能是每隔 5 秒鐘在就會(huì)輸入一個(gè) uuid 到 文件/var/testuuid/info.txt

Dockerfile

FROM?ubuntu:latest
ADD?echo_uuid.sh?/bin/echo_uuid.sh
ENTRYPOINT?/bin/echo_uuid.sh

制作鏡像 echo_uuid

此處的 DockerHub 的賬號(hào),可以修改成讀者你自己的,記得需要在環(huán)境中登錄 docker 賬號(hào)

docker?build?-t?xiaomotong888/echo_uuid?.
docker?push?xiaomotong888/echo_uuid

query_uuid.sh

#~/bin/bash

while?:
do
??echo?queryuuid:
??cat?/var/testuuid/info.txt
??sleep?5
done

主要功能就是每隔 5 秒鐘就會(huì)讀取一下文件 /var/testuuid/info.txt 的內(nèi)容

Dockerfile

FROM?ubuntu:latest
ADD?query_uuid.sh?/bin/query_uuid.sh
ENTRYPOINT?/bin/query_uuid.sh

制作鏡像 query_uuid

docker?build?-t?xiaomotong888/query_uuid?.
docker?push?xiaomotong888/query_uuid

編寫 yaml 文件:emptyDir_test.yaml

apiVersion:?v1
kind:?Pod
metadata:
??name:?testuuiddemo
spec:
??containers:
??-?image:?xiaomotong888/echo_uuid
????name:?echo-uuid
????volumeMounts:
????-?name:?uuid
??????mountPath:?/var/testuuid
??-?image:?xiaomotong888/query_uuid
????name:?query-uuid
????volumeMounts:
????-?name:?uuid
??????mountPath:?/var/testuuid
??????readOnly:?true
??volumes:
??-?name:?uuid
????emptyDir:?{}

上述編寫一個(gè) Pod 的清單,里面有 2 個(gè)容器,拉取的鏡像分別是 xiaomotong888/echo_uuid , ?xiaomotong888/query_uuid ,且都掛載到 名為 uuid ,掛載路徑為 /var/testuuid ,

這里還需要注意一點(diǎn)的是,query-uuid 容器 對(duì)于上述掛載路徑是只讀的

通過 kubectl create -f emptyDir_test.yaml 之后我們可以看到效果:

查看 echo-uuid 容器的日志,在 pod 里面有多個(gè)容器的時(shí)候,查看日志的方式是

kubectl?logs?-f?podName?containerName

查看 query-uuid 容器的日志

通過上述例子我們就明確了,一個(gè) pod 里面的多個(gè)容器可以共享掛載的內(nèi)容

gitRepo

gitRepo 卷,其實(shí)和 emptyDir 類似,只不過 gitRepo 卷會(huì)克隆 Git 倉庫并在 pod 啟用的時(shí)候檢出特定的版本來填充數(shù)據(jù),就多了這么一個(gè)步驟

簡單來說就是:

上面的例子是,我們自己在指定的卷上面輸出數(shù)據(jù),而 gitRepo 就是在pod 啟動(dòng)的時(shí)候,去 git 倉庫拉取最新的 master 分支的最新版本,放到我們掛載的目錄下,如下圖所示:

  1. 用戶會(huì)先創(chuàng)建一個(gè)帶有 gitRepo 卷的 Pod

  2. k8s 會(huì)創(chuàng)建一個(gè)空目錄,然后立即從 git 倉庫中拉取最新的 master 版本的數(shù)據(jù) , 通過這一點(diǎn),我們就知道,gitRepo 其實(shí) 和 emptyDir 沒啥區(qū)別

  3. 拉取 git 版本后,容器便啟動(dòng)完畢,這是卷已經(jīng)掛在掛載路徑上了

通過上述步驟,細(xì)心的朋友就可以看到,gitRepo 卷從 git 倉庫拉取的動(dòng)作,是在 pod 啟動(dòng)的時(shí)候,那么 pod 在運(yùn)行狀態(tài)的時(shí)候,若修改了 git 倉庫里面的內(nèi)容,那么 pod 里面的容器是不會(huì)同步數(shù)據(jù)的

必須是一個(gè)新的 pod 才會(huì)去拉取最新的 git 最新版本內(nèi)容

關(guān)于創(chuàng)建 pod ,配置上 gitRepo 倉庫我們可以簡單說一下:

apiVersion:?v1
kind:?Pod
metadata:
??name:?testuuiddemo
spec:
??containers:
??-?image:?xiaomotong888/echo_uuid
????name:?echo-uuid
????volumeMounts:
????-?name:?uuid
??????mountPath:?/var/testuuid
??volumes:
??-?name:?uuid
????gitRepo:
??????repository:?https://xxxxxxx.git
??????revision:?master
??????directory:?.

通過清單查看到,清單定義的前半部分內(nèi)容都是一致的,主要是后面 volumes 處 的區(qū)別

image-20220123212842696

上面這倆都是比較簡單,比較基礎(chǔ)的卷,下一篇我們分享一下持久化的存儲(chǔ)涉及的卷

今天就到這里,學(xué)習(xí)所得,若有偏差,還請(qǐng)斧正

歡迎點(diǎn)贊,關(guān)注,收藏

朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力

好了,本次就到這里

技術(shù)是開放的,我們的心態(tài),更應(yīng)是開放的。擁抱變化,向陽而生,努力向前行。

我是阿兵云原生,歡迎點(diǎn)贊關(guān)注收藏,下次見~


k8s 中的卷的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
招远市| 井陉县| 田林县| 冀州市| 惠州市| 进贤县| 方城县| 通河县| 双鸭山市| 安阳县| 安多县| 尼玛县| 邹平县| 宁河县| 鄂尔多斯市| 太白县| 刚察县| 广西| 霍林郭勒市| 黑山县| 潞西市| 福清市| 高淳县| 子洲县| 梅河口市| 舟曲县| 天祝| 阳曲县| 博湖县| 康保县| 裕民县| 界首市| 宁陵县| 肇庆市| 仙桃市| 雅江县| 高雄县| 璧山县| 大邑县| 永胜县| 平凉市|