主頁 >  其他 > Pod的資料持久化1 hostPath 和emptyDir

Pod的資料持久化1 hostPath 和emptyDir

2021-02-17 06:13:07 其他

 Pod資料持久化 

         k8s中的volume提供了在容器中掛載外部存盤的能力,Pod需要設定卷來源(spec.volume)和掛載點(spec.containers.volumeMounts)這兩個資訊后
才可以使用相應的volume

 

 官方對volume的介紹:

         Docker 也有 Volume 的概念,但對它只有少量且松散的管理, 在 Docker 中,Volume 是磁盤上或者另外一個容器內的一個目錄, 直到最近,Docker 才支持對基于本地磁盤的 Volume 的生存期進行管理, 雖然 Docker 現在也能提供 Volume 驅動程式,但是目前功能還非常有限(例如,截至 Docker 1.7,每個容器只允許有一個 Volume 驅動程式,并且無法將引數傳遞給卷),另一方面,Kubernetes 卷具有明確的生命周期——與包裹它的 Pod 相同, 因此,卷比 Pod 中運行的任何容器的存活期都長,在容器重新啟動時資料也會得到保留, 當然,當一個 Pod 不再存在時,卷也將不再存在,也許更重要的是,Kubernetes 可以支持許多型別的卷,Pod 也能同時使用任意數量的卷,卷的核心是包含一些資料的目錄,Pod 中的容器可以訪問該目錄, 特定的卷型別可以決定這個目錄如何形成的,并能決定它支持何種介質,以及目錄中存放什么內容,使用卷時, Pod 宣告中需要提供卷的型別 (.spec.volumes 欄位)和卷掛載的位置 (.spec.containers.volumeMounts 欄位).容器中的行程能看到由它們的 Docker 鏡像和卷組成的檔案系統視圖, Docker 鏡像 位于檔案系統層次結構的根部,并且任何 Volume 都掛載在鏡像內的指定路徑上, 卷不能掛載到其他卷,也不能與其他卷有硬鏈接, Pod 中的每個容器必須獨立地指定每個卷的掛載位置,

  

Kubernetes 支持下列型別的卷:

  • awsElasticBlockStore
  • azureDisk
  • azureFile
  • cephfs
  • cinder
  • configMap
  • csi
  • downwardAPI
  • emptyDir
  • fc (fibre channel)
  • flexVolume
  • flocker
  • gcePersistentDisk
  • gitRepo (deprecated)
  • glusterfs
  • hostPath
  • iscsi
  • local
  • nfs
  • persistentVolumeClaim
  • projected
  • portworxVolume
  • quobyte
  • rbd
  • scaleIO
  • secret
  • storageos
  • vsphereVolume

參考地址:https://v1-17.docs.kubernetes.io/zh/docs/concepts/storage/volumes/#volume-%E7%9A%84%E7%B1%BB%E5%9E%8B

 

卷型別的簡單分類:

1  本地卷:只在當前節點使用,無法跨節點使用 hostPath emptyDir

2  網路卷:在任意節點都可以訪問到:nfs rbd cephfs glusterfs

3 公有云卷: awsElasticBlockStore azureDisk

 4 k8s資源: secret configMap

 

emptyDir的使用介紹

          在pod的宿主機上創建目錄,掛載到Pod中的容器,Pod洗掉該卷也會被洗掉,
          應用場景: pod 中容器之間的資料共

         環境準備:為了方便測驗需要把當前環境中的所有pod洗掉掉

 1 [root@master ~]# kubectl get pod 
 2 NAME                    READY   STATUS      RESTARTS   AGE
 3 mypod                   1/1     Running     2          3d1h
 4 mypod2                  1/1     Running     2          3d
 5 mypod3                  0/1     Completed   0          2d23h
 6 web-5dcb957ccc-44rdl    1/1     Running     5          10d
 7 web-5dcb957ccc-qpndh    1/1     Running     5          10d
 8 web1-7f87dfbd56-6lckc   1/1     Running     2          3d10h
 9 web2-7585bfb769-bfr9b   1/1     Running     2          3d10h
10 [root@master ~]#                  
11 [root@master ~]# kubectl delete $(kubectl get deploy -o name)
12 [root@master ~]# kubectl delete $(kubectl get pod -o name)    

 

用yaml創建一個Pod,pod中有兩個容器,兩個容器之間通過emptyDir來共享資料

 1 root@master ~]# vim pod.yaml
 2 apiVersion: v1
 3 kind: Pod                             #定義一個Pod資源
 4 metadata:
 5   name: my-pod                        #Pod的名字是my-pod
 6 spec:
 7   containers:                         #創建兩個容器,容器的名字分別是write,read
 8   - name: write
 9     image: centos
10     command: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]
11     volumeMounts:                     #在容器中掛載一個卷
12       - name: data                    #卷的名字是data
13         mountPath: /data              #把卷掛載到容器中的/data目錄下
14 
15   - name: read
16     image: centos
17     command: ["bash","-c","tail -f /data/hello"]
18     volumeMounts:
19       - name: data
20         mountPath: /data
21   
22   volumes:                            #在pod中創建一個卷,注意這個卷要與containers同級
23   - name: data                        #卷的名字是data
24     emptyDir: {}                      #卷的型別是emptyDir, "{}"可以省略
25 
26 [root@master ~]# 
27 [root@master ~]# kubectl apply -f pod.yaml                                       
28 [root@master ~]# kubectl get pod
29 NAME     READY   STATUS    RESTARTS   AGE
30 my-pod   2/2     Running   0          75s
31 [root@master ~]# 
32                                       #在pod的write容器查看寫入的資料,
33                                       #在pod的read容器中查看是否有資料                                      
34 [root@master ~]# kubectl exec -it my-pod -c write -- sh
35 sh-4.4# ls /data
36 hello
37 sh-4.4# tail /data
38 tail: error reading '/data': Is a directory
39 sh-4.4# tail /data/hello
40 49
41 50
42 51
43 sh-4.4# 
44 [root@master ~]# kubectl exec -it my-pod -c read -- sh
45 sh-4.4# tail /data/hello
46 2
47 3
48 4
49 sh-4.4#
50                                       #如何查看這個共享卷在宿主機上的物理目錄?
51                                       #首先確認這個Pod當前在哪個node上
52 [root@master ~]# kubectl get pods -o wide
53 NAME     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
54 my-pod   2/2     Running   6          17m   10.244.2.99   node2   <none>           <none>
55 [root@master ~]# 
56                                       #在node2的節點上查看kubelet的目錄 
57 [root@node2 ~]# cd /var/lib/kubelet/
58 [root@node2 kubelet]# ls
59 config.yaml  cpu_manager_state  device-plugins  kubeadm-flags.env  pki  plugins  plugins_registry  pod-resources  pods
60 [root@node2 kubelet]# cd pods
61 [root@node2 pods]# ls                 #在這個目錄下查看pod的原資料,以下資料是以podID為目錄名      
62 41874bad-9f46-4417-b96c-6f41fd566ce1  c563f58d-dd2e-4937-867f-66d06ccc606d
63 5b2d78d8-0782-47c9-bf3f-202105824dee  c87f53c4-5cc2-4842-910d-7206e636d83f
64 [root@node2 pods]# 
65                                       #在當前node節點上查看my-pod的PodID為k8s_read_my-pod_default_5b2d78d8-0782-47c9-bf3f-202105824dee_0
66 67 [root@node2 pods]# docker ps  | grep pod
68 
69 a1eb18196f87    centos                                            "bash -c 'tail -f /d…"   About an hour ago   Up About an hour   k8s_read_my-pod_default_5b2d78d8-0782-47c9-bf3f-202105824dee_0
70 c16f2df96115    registry.aliyuncs.com/google_containers/pause:3.2 "/pause"                 About an hour ago   Up About an hour   k8s_POD_my-pod_default_5b2d78d8-0782-47c9-bf3f-202105824dee_0
71 [root@node2 pods]# 
72                                       #在node2這個節點上進入5b2d78d8-0782-47c9-bf3f-202105824dee目錄查看
73 [root@node2 pods]# cd 5b2d78d8-0782-47c9-bf3f-202105824dee/
74 [root@node2 5b2d78d8-0782-47c9-bf3f-202105824dee]# ls
75 containers  etc-hosts  plugins  volumes
76 [root@node2 5b2d78d8-0782-47c9-bf3f-202105824dee]# cd volumes/
77 [root@node2 volumes]# ls
78 kubernetes.io~empty-dir  kubernetes.io~secret
79 [root@node2 volumes]# ls ./kubernetes.io~empty-dir/data/hello 
80 ./kubernetes.io~empty-dir/data/hello
81 [root@node2 data]# pwd                #以下目錄就是my-pod中兩個容器中的/data的物理目錄
82 /var/lib/kubelet/pods/5b2d78d8-0782-47c9-bf3f-202105824dee/volumes/kubernetes.io~empty-dir/data

 

hostPath
           掛載Node檔案系統上檔案或者目錄到pod的容器中
           應用場景:Pod中容器需要訪問宿主機檔案,只能給當前節點的pod訪問使用

 1 [root@master ~]# vim pod-hostpath.yaml
 2 
 3 apiVersion: v1
 4 kind: Pod
 5 metadata:
 6   name: my-pod
 7 spec:
 8   containers:
 9   - name: busybox
10     image: busybox
11     args:
12     - /bin/sh
13     - -c
14     - sleep 36000
15     volumeMounts:
16     - name: data
17       mountPath: /data
18   volumes:                            #定義一個卷
19   - name: data                        #卷的名字是data
20     hostPath:
21       path: /tmp                      #卷在宿主機上的地址是/tmp
22       type: Directory                 #卷的型別是一個目錄
23                 
24 [root@master ~]# kubectl apply -f pod-hostpath.yaml 
25 pod/my-pod2 created
26 [root@master ~]#    
27 [root@master ~]# kubectl get  pod
28 NAME      READY   STATUS    RESTARTS   AGE
29 my-pod    2/2     Running   32         3h12m
30 my-pod2   1/1     Running   0          78s
31 [root@master ~]#                      #查看pod所在的node節點
32 [root@master ~]# kubectl get pod -o wide
33 NAME      READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
34 my-pod    2/2     Running   44         4h35m   10.244.2.99    node2   <none>           <none>
35 my-pod2   1/1     Running   0          84m     10.244.2.100   node2   <none>           <none>
36 [root@master ~]#                      #在node2節點的/data目錄下創建一個檔案a.txt
37                                       #在my-pod2的容器中查看/data目錄是否有這個檔案
38 [root@node2 ~]# touch /tmp/a.txt
39 [root@node2 ~]# 
40 [root@master ~]# kubectl exec -it my-pod2 -- sh
41 / # ls /data
42 a.txt
43 / # 

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260250.html

標籤:其他

上一篇:機器學習入門實戰——基于knn的airbnb房租預測

下一篇:pod的資料持久化2 NFS

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more