k8s volumes and data

Overview

傳統上,容器引擎(Container Engine)不提供比容器壽命更長的存儲。由于容器被認為是瞬態(transient)的,這可能會導致數據丟失或復雜的外部存儲選項。Kubernetes卷共享 Pod 生命周期,而不是其中的容器。如果容器終止,數據將繼續可供新容器使用。

卷(volume)是一個目錄,可能是預先填充的,可供 Pod 中的容器(container)使用。目錄的創建、數據和內容的后端存儲取決于卷類型(volume type)。截至 v1.13,有 27 種不同的卷類型,從用于訪問 Ceph 的 rbd、NFS,到來自 Google 的 gcePersistentDisk 等云提供商的動態卷。每個都有特定的配置選項和依賴性。

容器存儲接口 (CSI-Container Storage Interface) 的采用實現了容器container orchestration行業標準接口的目標,以允許訪問任意存儲系統。目前,卷插件是“樹內 (in-tree)”的,這意味著它們是使用核心 Kubernetes 二進制文件編譯和構建的。這個“樹外(out-of-tree)”對象將允許存儲供應商開發單個驅動程序并允許插件容器化。這將取代現有的 Flex 插件,后者需要提升對主機節點的訪問權限,這是一個很大的安全問題。

如果您希望存儲生命周期與 Pod 不同,則可以使用持久卷(Persistent Volumes)。這些允許 Pod 使用持久卷聲明(Persistent Volume Claim)來聲明空卷或預填充卷,使得這些volume比Pod 的壽命更長。然后,卷內的數據可以被另一個 Pod 使用,或者作為檢索數據的一種方式。

已經存在兩個 API 對象來向 Pod 提供數據。編碼(encoded)數據可以使用 Secret 傳遞,非編碼數據(non-encoded)可以使用 ConfigMap 傳遞。這些可用于傳遞重要數據,例如 SSH 密鑰、密碼,甚至是/etc/hosts等配置文件。

Introducing Volumes

Pod 規范可以聲明一個或多個卷以及它們的可用位置。每個都需要名稱(name)、類型(type)和安裝點(a mount point)。同一卷可以供 Pod 中的多個容器使用,這可以是容器到容器通信的一種方法。一個卷可以供多個 Pod 使用,每個 Pod 都指定一個寫入訪問模式。沒有并發檢查,這意味著數據可能損壞,除非在外部進行鎖定。

特定的訪問模式(access mode)是 Pod 請求的一部分。作為請求,用戶可能會被授予更多但不少于的訪問權限,盡管首先會嘗試直接匹配。集群將具有相同模式的卷分組在一起,然后按大小從最小到最大對卷進行排序。將針對該訪問模式組中的每個卷檢查聲明,直到有足夠大小的卷匹配為止。三種訪問模式是:

在這里插入圖片描述ReadWriteOnce,允許單節點(node)讀寫
ReadOnlyMany,允許多個節點只讀
ReadWriteMany,允許多個節點讀寫。

因此,同一節點上的兩個 pod 可以寫入 ReadWriteOnce,但不同節點上的第三個 pod 由于 FailedAttachVolume 錯誤而不會準備就緒。

當請求卷時,本地 kubelet 使用kubelet_pods.go腳本映射原始設備,確定并創建容器的掛載點,然后在主機節點文件系統上創建符號鏈接(symbolic link)以將存儲與容器關聯。API 服務器向StorageClass插件發出存儲請求,但對后端存儲的請求的具體內容取決于所使用的插件。

如果未發出對特定StorageClass 的請求,則使用的唯一參數將是訪問模式和大小。該卷可以來自任何可用的存儲類型,并且沒有配置來確定將使用哪些可用的存儲類型。

Volume Spec
可用的多種存儲類型之一是emptyDir。kubelet 將在容器中創建目錄,但不會掛載任何存儲。創建的任何數據都會寫入共享容器空間。因此,它不會是持久存儲。當 Pod 被銷毀時,該目錄將與容器一起被刪除。

apiVersion: v1
kind: Pod
metadata:name: fordpinto namespace: default
spec:containers:- image: simpleapp name: gastank command:- sleep- "3600"volumeMounts:- mountPath: /scratchname: scratch-volumevolumes:- name: scratch-volumeemptyDir: {}

上面的 YAML 文件將創建一個帶有單個容器的 Pod,并創建一個名為scrap-volume 的卷,這將在容器內創建/scratch目錄。

Volume Types (卷類型)

您可以使用多種類型來定義卷,每種類型都有其優點和缺點。有些是本地的,還有許多利用基于網絡的資源。

在 GCE 或 AWS 中,您可以使用GCEpersistentDisk或awsElasticBlockStore類型的卷,這允許您在 Pod 中掛載 GCE 和 EBS 磁盤(假設您已經設置了帳戶和權限)。

emptyDir和hostPath卷易于使用。如前所述, emptyDir是一個空目錄,當 Pod 終止時該目錄會被刪除,但會在容器重新啟動時重新創建。hostPath卷從主機節點文件系統掛載資源。資源可以是目錄、文件套接字、字符或塊設備。這些資源必須已存在于要使用的主機上。有兩種類型: DirectoryOrCreate和FileOrCreate,它們在主機上創建資源,并在資源不存在時使用它們。

NFS(網絡文件系統)和 iSCSI(互聯網小型計算機系統接口)是多讀卡器場景的直接選擇。

用于塊存儲的 rbd 或 CephFS 和 GlusterFS(如果在 Kubernetes 集群中可用)可以是滿足多個寫入器需求的不錯選擇。

除了我們剛剛提到的卷類型之外,還有許多其他可能的卷類型,并且還會添加更多:azureDisk、azureFile、csi、downwardAPI、fc(光纖通道)、flocker、gitRepo、local、projected、portworxVolume、quobyte、scaleIO、secret、storageos、vsphereVolume、permanentVolumeClaim、CSIPersistentVolumeSource等

CSI 允許更大的靈活性和解耦插件,而無需編輯核心 Kubernetes 代碼。它是作為未來公開任意插件的標準而開發的。

Shared Volume Example (共享卷)

以下 YAML 文件創建一個 pod exampleA,其中包含兩個容器,兩個容器都可以訪問共享卷:

您可以輕松使用emptyDir或hostPath,因為這些類型不需要任何額外的設置,并且可以在您的Kubernetes集群中工作。

請注意,一個容器 ( betacont ) 進行寫入,而另一個容器 ( alphacont ) 可以立即訪問數據。沒有什么可以阻止容器覆蓋對方的數據。鎖定或版本控制注意事項必須成為容器化應用程序的一部分,以避免損壞。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213606.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

排序的簡單理解(上)

1. 排序的概念及引用 1.1 排序的概念 排序:所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作(按照我們的需求能夠有序的將數據信息排列起來)。 穩定性:假…

TeeChart.NET 2023.11.17 Crack

.NET 的 TeeChart 圖表控件提供了一個出色的通用組件套件,可滿足無數的圖表需求,也針對重要的垂直領域,例如金融、科學和統計領域。 數據可視化 數十種完全可定制的交互式圖表類型、地圖和儀表指示器,以及完整的功能集&#xff0c…

醫療設備智慧管理助力醫院提質增效,阿基米德amp;健康界實踐分享

近日,蘇州阿基米德網絡科技有限公司與醫療領域頭部級媒體健康界,聯合舉辦“數智為擎 提質增效——醫學裝備智慧管理創新發展論壇”的直播活動。 直播現場,來自上海交通大學醫學院附屬同仁醫院、中華醫學會航海醫學分會、蘇州阿基米德的專家們…

統信UOS_麒麟KYLINOS上使用命令行配置NTP服務器

原文鏈接:統信UOS/麒麟KYLINOS上使用命令行配置NTP hello,大家好啊,今天我要給大家介紹的是在統信UOS/麒麟KYLINOS操作系統上使用命令行配置NTP(Network Time Protocol)服務器的方法。在內網環境下,許多企業…

13、C++異常處理

13、c異常處理 拋出異常捕獲異常未拋出異常時的流程拋出異常時的流程捕獲異常匹配順序異常說明異常處理構造函數中的異常析構函數中的異常標準庫異常類 拋出異常 throw 異常對象可以拋出基本類型的對象,如:throw -1;throw "內存分配失敗!";也可以拋出類類…

AVP對縱向控制ESP(Ibooster)的需求規范

目錄 1. 版本記錄... 3 2. 文檔范圍和控制... 4 2.1 目的/范圍... 4 2.2 文檔沖突... 4 2.3 文檔授權... 4 2.4 文檔更改控制... 4 3. 功能概述... 5 4. 系統架構... 6 5. 主要安全目標... 7 5.1 …

FreeSSL申請免費域名證書

本文詳細講解如何申請免費證書,需要先準備好域名,將服務器IP和域名綁定。 1、注冊FreeSSL賬號 網址: https://freessl.org/ 2、申請流程 登錄后首頁輸入域名,然后點擊Create certificate,跳轉到證書申請頁面。 或者…

Pytorch深度強化學習1-6:詳解時序差分強化學習(SARSA、Q-Learning算法)

目錄 0 專欄介紹1 時序差分強化學習2 策略評估原理3 策略改進原理3.1 SARSA算法3.2 Q-Learning算法 0 專欄介紹 本專欄重點介紹強化學習技術的數學原理,并且采用Pytorch框架對常見的強化學習算法、案例進行實現,幫助讀者理解并快速上手開發。同時&#…

老人的數目

給你一個下標從 0 開始的字符串 details 。details 中每個元素都是一位乘客的信息,信息用長度為 15 的字符串表示,表示方式如下: 前十個字符是乘客的手機號碼。接下來的一個字符是乘客的性別。接下來兩個字符是乘客的年齡。最后兩個字符是乘…

QGIS 加載在線XYZ地圖圖層

QGIS 加載在線XYZ地圖圖層 定義并添加必應XYZ圖層 Go to Layer > Add Layer > Add XYZ Layer…Click NewName as BingMaps(as you wish)URL as http://ecn.t3.tiles.virtualearth.net/tiles/a{q}.jpeg?g1click OkSelect XYZ Connections as Bing Maps(Which you creat…

PR自動剪輯視頻工具AI智能剪輯插件AutoPod

推薦一款可以提高剪輯效率,節約時間成本的AI人工智能自動剪輯視頻制作工具pr插件Autopod,輔助你更快地完成視頻內容的編輯工作。 Autopod 插件是一款應用于 Adobe Premiere Pro 軟件的插件,用于自動剪輯。該插件能夠識別和處理視頻和音頻素材…

Spring Boot 常用注解分類

目錄 1.核心注解:2.配置相關注解:3.控制器相關注解:4.數據訪問相關注解:5.測試相關注解:6.條件注解:7.AOP相關注解:8.定時任務相關注解:9.消息隊列相關注解:10.Spring Se…

函數式編程解析:定義、功能與Java實踐

目錄 一、函數式編程1.1 什么是函數式編程1.2 函數式編程特征1.2.1 純函數1.2.2 函數是一等公民 1.3 函數式編程在java中的實踐 參考資料 一、函數式編程 1.1 什么是函數式編程 函數式編程(Functional Programming)是一種編程范式,它將計算…

ES6中的迭代器和set、map集合

什么是迭代器? 一種機制,也是一種接口,為數據結構提供統一訪問接口,依次處理數據據結構成員 只要實現了迭代器接口,就可以使用for...of循環遍歷。 /*** 迭代器是一種機制 是一種接口 只要數據解構實現了接口 就可…

力扣labuladong一刷day36天

力扣labuladong一刷day36天 一、96. 不同的二叉搜索樹 題目鏈接:https://leetcode.cn/problems/unique-binary-search-trees/ 思路:這是一道典型的動態規劃題,從n3來看 子樹有幾種形態 (0, 2)、(1, 1)、(2, 0)有規律可循,即為左…

飛天使-linux操作的一些技巧與知識點4

文章目錄 ansible配置文件的優先級嘗試開始進行操作ansible常用模塊ansible 的playbook示例安裝phpplaybook中變量的引用 ansible yum install -y ansible 測試是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg :主配置文件,配置 ansible…

大公司求我用Kotlin寫個通用爬蟲模板

bug虐我千百遍,我待他如初戀。每次深夜挑燈都是我與bug較量的時間。今天我要說的就是寫一個爬蟲模版,自動抓取百度圖片的教程,這次使用Kotlin編寫的爬蟲程序在Scrapy框架下完成的,如有不足歡迎指正。 首先,使用Kotlin編…

Mybatis-Plus源碼解析之@MapperScan(一)

group : com.baomidou version:3.5.2.2-SNAPSHOT baomidou官網可以從快速開始了解到,除了配置數據源,最重要的就是MapperScan 注解,在 Spring Boot 啟動類中添加 MapperScan 注解,掃描 Mapper 文件夾。 MapperScan 按照慣例&…

angular form 組件、雙向綁定;反應式表單

1.使用雙向綁定,以及angular的表單提交功能 app.moudle中引入 雙向綁定 [(ngModel)]"text" ??????? 效果 提交表單 2.反應式表單 在app.module.ts中引入在組件中引入,并放在一個變量里 在初始化時實列化這個module 定義規則 在html…

Linux:環境變量

目錄 1.基本變量 2.通過代碼獲取環境變量 2.1 main傳參 2.2 全局變量environ 2.3 系統調用getenv() 3.在腳本文件中添加環境變量 4.環境變量通常是具有全局屬性 1.基本變量 環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數…