chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kubernetes存儲體系解析 淺談Volume概念的由來

454398 ? 來源:云原生技術(shù)愛好者社區(qū) ? 作者:strict_nerd ? 2020-10-15 16:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Volume、PV、PVC、StorageClass由來

先思考一個(gè)問題,為什么會引入Volume這樣一個(gè)概念?

答案很簡單,為了實(shí)現(xiàn)數(shù)據(jù)持久化,數(shù)據(jù)的生命周期不隨著容器的消亡而消亡。

”在沒有介紹Kubernetes Volume之前,先來回顧下Docker Volume,Docker Volume常用使用方式有兩種,

volumes通過這種方式, Docker管理宿主機(jī)文件系統(tǒng)的一部分,默認(rèn)位于 /var/lib/docker/volumes目錄中,由于在創(chuàng)建時(shí)沒有創(chuàng)建指定數(shù)據(jù)卷, docker自身會創(chuàng)建默認(rèn)數(shù)據(jù)卷;

bind mounts通過這種方式,可以把容器內(nèi)文件掛載到宿主機(jī)任意目錄。

既然有了Docker Volume,為啥Kubernetes又搞出了自己的Volume?谷歌的標(biāo)新立異?

答案是否定的,Kubernetes Volume和Docker Volume概念相似,但是又有不同的地方,Kubernetes Volume與Pod的生命周期相同,但與容器的生命周期不相關(guān)。當(dāng)容器終止或重啟時(shí),Volume中的數(shù)據(jù)也不會丟失。當(dāng)Pod被刪除時(shí),Volume才會被清理。并且數(shù)據(jù)是否丟失取決于Volume的具體類型,比如emptyDir類型的Volume數(shù)據(jù)會丟失,而持久化類型的數(shù)據(jù)則不會丟失。另外Kubernetes提供了將近20種Volume類型。

”現(xiàn)在有了Kubernetes的Volume,我們就可以完全可以在Yaml編排文件中填寫上Volume是字段,如下nfs所示:

。。..volumes: - name: static-nfs nfs: server: 12.18.17.240 path: /nfs/data/static

如果你使用ceph作為存儲插件,你可以在編排文件中這樣定義:

volumes: - name: ceph-vol cephfs: monitors: - 12.18.17.241:6789 - 12.18.17.242:6789 user: admin secretRef: name: ceph-secret readOnly: true

當(dāng)然只要是Kubernetes已經(jīng)實(shí)現(xiàn)的數(shù)據(jù)卷類型,你都可以按照如上方式進(jìn)行直接在Yaml編排文件中定義使用。

看到這里其實(shí)已經(jīng)完成了80%的工作,那么為什么還要設(shè)計(jì)多此一舉的PV呢?這個(gè)問題先擱置下,后面會有說明。

在沒有說明為什么要設(shè)計(jì)多此一舉的PV PVC之前,先來看看什么是PV PVC?

PV是對持久化存儲數(shù)據(jù)卷的一種描述。

”PV通常是由運(yùn)維人員提前在集群里面創(chuàng)建等待使用的一種數(shù)據(jù)卷。如下所示:

apiVersion: v1kind: PersistentVolumemetadata: name: nfsspec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 10.244.1.4 path: “/nfs”

PVC描述的是持久化存儲的屬性,比如大小、讀寫權(quán)限等。

”PVC通常由開發(fā)人員創(chuàng)建,如下所示:

apiVersion: v1kind: PersistentVolumeClaimmetadata: name: nfsspec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi

而用戶創(chuàng)建的PV PVC必須綁定完成之后才能被利用起來。而PV PVC綁定起來的前提是PV中spec中聲明字段大小、權(quán)限等必須滿足PVC的要求。

成功綁定之后,就可以在Pod Yaml編排文件中定義和使用。如下所示:

apiVersion: v1kind: Podmetadata: labels: role: webspec: containers: - name: web image: nginx ports: - name: web containerPort: 80 volumeMounts: - name: nfs mountPath: “/usr/share/nginx/html” volumes: - name: nfs persistentVolumeClaim: claimName: nfs

看到這里,我們還會認(rèn)為僅僅是PV對Volume多了一層抽象,并不見得比直接在Yaml中聲明Volume高明多少。仔細(xì)思考下,我們?yōu)槭裁茨軌蛑苯釉赮aml中直接定義Volume?因?yàn)镵ubernetes已經(jīng)幫助我們實(shí)現(xiàn)了這種Volume類型,如果我們有自己的存儲類型,而Kubernetes中并沒有實(shí)現(xiàn),這種是沒有辦法直接在Yaml編排文件中直接定義Volume的。這個(gè)時(shí)候PV PVC面向?qū)ο蟮脑O(shè)計(jì)就體現(xiàn)出其價(jià)值了。這也是在軟件開發(fā)領(lǐng)域經(jīng)常碰到的問題,開源軟件無法滿足要求,但也沒有提供出可擴(kuò)展的接口,沒辦法,只能重新造輪子。

我們在開發(fā)過程中經(jīng)常碰到這樣一個(gè)問題,在Pod中聲明一個(gè)PVC之后,發(fā)現(xiàn)Pod不能被調(diào)度成功,原因是因?yàn)镻VC沒有綁定到合適的PV,這個(gè)時(shí)候要求運(yùn)維人員創(chuàng)建一個(gè)PV,緊接著Pod調(diào)度成功。剛才上在介紹PV PVC,它們的創(chuàng)建過程都是手動(dòng),如果集群中需要成千上萬的PV,那么運(yùn)維人員豈不累死?在實(shí)際操作中,這種方式根本行不通。所以Kubernetes給我們提供了一套自動(dòng)創(chuàng)建PV的機(jī)制Dynamic Provisioning.在沒有介紹這套自動(dòng)創(chuàng)建機(jī)制之前,先看看Static Provisioning,什么是Static Provisioning?剛才人工創(chuàng)建PV PVC的方式就是Static Provisioning。你可以在PV PVC編排文件中聲明StorageClass,如果沒有聲明,那么默認(rèn)為“”。具體交互流程如下所示:

靜態(tài)分配流程

首先由集群管理員事先去規(guī)劃這個(gè)集群中的用戶會怎樣使用存儲,它會先預(yù)分配一些存儲,也就是預(yù)先創(chuàng)建一些 PV;然后用戶在提交自己的存儲需求(PVC)的時(shí)候,Kubernetes內(nèi)部相關(guān)組件會幫助它把PVC PV 做綁定;最后pod使用存儲的時(shí)候,就可以通過PVC找到相應(yīng)的PV,它就可以使用了。不足之處也非常清楚,首先繁瑣,然后運(yùn)維人員無法預(yù)知開發(fā)人員的真實(shí)存儲需求,比如運(yùn)維人員創(chuàng)建了多個(gè)100Gi的PV存儲,但是在實(shí)際開發(fā)過程中,開發(fā)人員只能使用10Gi,這就造成了資源的浪費(fèi)。當(dāng)然Kubernetes也為我們提供更好的使用方式,即Dynamic Provisioning它是什么呢?

Dynamic Provisioning包含了創(chuàng)建某種PV所需要的參數(shù)信息,類似于一個(gè)創(chuàng)建PV的模板。具體交互流程如下所示:

Kubernetes集群中的控制器,會結(jié)合PVC和StorageClass的信息動(dòng)態(tài)生成用戶所需要的PV,將PVC PV進(jìn)行綁定后,pod就可以使用PV了。通過 StorageClass配置生成存儲所需要的存儲模板,再結(jié)合用戶的需求動(dòng)態(tài)創(chuàng)建PV對象,做到按需分配,在沒有增加用戶使用難度的同時(shí)也解放了集群管理員的運(yùn)維工作。

動(dòng)態(tài)PV使用Dynamic Provisioning上面提到過,運(yùn)維人員不再預(yù)分配PV,而只是創(chuàng)建一個(gè)模板文件,這個(gè)模板文件正是StorageClass。下面以NFS為例進(jìn)行說明,動(dòng)態(tài)PV的整個(gè)使用過程。

安裝NFS服務(wù)

#安裝nfsyum -y install nfs-utils rpcbind#開機(jī)自啟動(dòng)systemctl enable rpcbind nfs-server#配置nfs 文件echo “/nfs/data *(rw,no_root_squash,sync)” 》/etc/exports

部署置備程序

apiVersion: v1

kind: ServiceAccount

metadata:

name: nfs-provisioner

---

kind: ClusterRole

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: nfs-provisioner-runner

rules:

- apiGroups: [“”]

resources: [“persistentvolumes”]

verbs: [“get”, “l(fā)ist”, “watch”, “create”, “delete”]

- apiGroups: [“”]

resources: [“persistentvolumeclaims”]

verbs: [“get”, “l(fā)ist”, “watch”, “update”]

- apiGroups: [“storage.k8s.io”]

resources: [“storageclasses”]

verbs: [“get”, “l(fā)ist”, “watch”]

- apiGroups: [“”]

resources: [“events”]

verbs: [“watch”, “create”, “update”, “patch”]

- apiGroups: [“”]

resources: [“services”, “endpoints”]

verbs: [“get”,“create”,“l(fā)ist”, “watch”,“update”]

- apiGroups: [“extensions”]

resources: [“podsecuritypolicies”]

resourceNames: [“nfs-provisioner”]

verbs: [“use”]

---

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: run-nfs-provisioner

subjects:

- kind: ServiceAccount

name: nfs-provisioner

namespace: logging

roleRef:

kind: ClusterRole

name: nfs-provisioner-runner

apiGroup: rbac.authorization.k8s.io

---

kind: Deployment

apiVersion: apps/v1

metadata:

name: nfs-client-provisioner

spec:

selector:

matchLabels:

app: nfs-client-provisioner

replicas: 1

strategy:

type: Recreate

template:

metadata:

labels:

app: nfs-client-provisioner

spec:

serviceAccount: nfs-provisioner

containers:

- name: nfs-client-provisioner

image: quay.io/external_storage/nfs-client-provisioner:latest

imagePullPolicy: IfNotPresent

volumeMounts:

- name: nfs-client

mountPath: /persistentvolumes

env:

- name: PROVISIONER_NAME

value: fuseim.pri/ifs

- name: NFS_SERVER

value: 12.18.7.20

- name: NFS_PATH

value: /nfs/data

volumes:

- name: nfs-client

nfs:

server: 12.18.7.20

path: /nfs/data

創(chuàng)建StorageClass模板

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: nfs-storageprovisioner: fuseim.pri/ifsreclaimPolicy: Retain

這些參數(shù)是通過Kubernetes創(chuàng)建存儲的時(shí)候,需要指定的一些細(xì)節(jié)參數(shù)。對于這些參數(shù),用戶是不需要關(guān)心的,像這里provisioner指的是使用nfs的置備程序。ReclaimPolicy就是說動(dòng)態(tài)創(chuàng)建出來的PV,當(dāng)使用方使用結(jié)束、Pod 及 PVC被刪除后,這塊PV應(yīng)該怎么處理,我們這個(gè)地方寫的是Retain,意思就是說當(dāng)使用方pod PVC被刪除之后,這個(gè)PV會保留。

提交完成模板文件之后,用戶只需要在 Pod yaml文件定義 PVC,即可自動(dòng)創(chuàng)建 PV和 PVC。

apiVersion: apps/v1kind: StatefulSetmetadata: name: esspec: 。。.。。.。。 template: metadata: labels: app: elasticsearch spec: 。。.。。.。。. initContainers: 。。.。。.。。 containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 。。.。。.。 volumeClaimTemplates: - metadata: name: data labels: app: elasticsearch spec: accessModes: [ “ReadWriteOnce” ] storageClassName: nfs-storage resources: requests: storage: 50Gi`

Capacity:存儲對象的大?。?/p>

AccessModes:也是用戶需要關(guān)心的,就是說使用這個(gè)PV的方式。它有三種使用方式:ReadWriteOnce是單node讀寫訪問;ReadOnlyMany是多個(gè)node只讀訪問,常見的一種數(shù)據(jù)共享方式;ReadWriteMany是多個(gè)node上讀寫訪問;

StorageClassName:StorageClassName這個(gè)我們剛才說了,動(dòng)態(tài)Provisioning時(shí)必須指定的一個(gè)字段,就是說我們要指定到底用哪一個(gè)模板文件來生成PV。

Kubernetes存儲架構(gòu)

存儲架構(gòu)圖

PV Controller: 負(fù)責(zé) PV PVC的綁定、生命周期管理,并根據(jù)需求進(jìn)行數(shù)據(jù)卷的 Provision Delete操作

AD Controller:負(fù)責(zé)存儲設(shè)備的 Attach Detach操作,將設(shè)備掛載到目標(biāo)節(jié)點(diǎn)

Volume Manager:管理卷的 Mount Unmount操作、卷設(shè)備的格式化以及掛載到一些公用目錄上的操作

Volume Plugins:它主要是對上面所有掛載功能的實(shí)現(xiàn)。 PV Controller、AD Controller、Volume Manager 主要是進(jìn)行操作的調(diào)用,而具體操作則是由 Volume Plugins實(shí)現(xiàn)的。根據(jù)源碼的位置可將 Volume Plugins分為 In-Tree和 Out-of-Tree兩類: In-Tree表示源碼是放在 Kubernetes內(nèi)部的(常見的 NFS、cephfs等),和 Kubernetes一起發(fā)布、管理與迭代,缺點(diǎn)是迭代速度慢、靈活性差; Out-of-Tree的 Volume Plugins的代碼獨(dú)立于 Kubernetes,它是由存儲 提供商實(shí)現(xiàn)的,目前主要有 Flexvolume CSI兩種實(shí)現(xiàn)機(jī)制,可以根據(jù)存儲類型實(shí)現(xiàn)不同的存儲插件

Scheduler:實(shí)現(xiàn)對 Pod的調(diào)度能力,會根據(jù)一些存儲相關(guān)的的定義去做存儲相關(guān)的調(diào)度

動(dòng)態(tài)PV交互流程

Kubernetes掛載Volume過程

用戶創(chuàng)建一個(gè)包含 PVC的 Pod

PV Controller會觀察 ApiServer,如果它發(fā)現(xiàn)一個(gè) PVC已經(jīng)創(chuàng)建完畢但仍然是未綁定的狀態(tài),它就會試圖把一個(gè) PV和 PVC綁定

Provision就是從遠(yuǎn)端上一個(gè)具體的存儲介質(zhì)創(chuàng)建一個(gè) Volume,并且在集群中創(chuàng)建一個(gè) PV對象,然后將此 PV和 PVC進(jìn)行綁定

Scheduler進(jìn)行多個(gè)維度考量完成后,把 Pod調(diào)度到一個(gè)合適的 Node

Kubelet不斷 watch APIServer是否有 Pod要調(diào)度到當(dāng)前所在節(jié)點(diǎn)

Pod調(diào)度到某個(gè)節(jié)點(diǎn)之后,它所定義的 PV還沒有被掛載( Attach),此時(shí) AD Controller就會調(diào)用 VolumePlugin,把遠(yuǎn)端的 Volume掛載到目標(biāo)節(jié)點(diǎn)中的設(shè)備上( /dev/vdb);當(dāng) Volum Manager 發(fā)現(xiàn)一個(gè) Pod調(diào)度到自己的節(jié)點(diǎn)上并且 Volume已經(jīng)完成了掛載,它就會執(zhí)行 mount操作,將本地設(shè)備(也就是剛才得到的 /dev/vdb)掛載到 Pod在節(jié)點(diǎn)上的一個(gè)子目錄中

啟動(dòng)容器,并將已經(jīng)掛載到本地的 Volume映射到容器中

總結(jié)本文主要扯了如下內(nèi)容,首先介紹Kubernetes中Volume、PV、PVC、StorageClass由來,然后介紹了StorageClass使用,最后簡單介紹了Kubernetes存儲架構(gòu)以及動(dòng)態(tài)存儲交互流程。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲技術(shù)
    +關(guān)注

    關(guān)注

    6

    文章

    762

    瀏覽量

    46836
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    521

    瀏覽量

    22720
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    254

    瀏覽量

    9329
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    解析K8S實(shí)用命令

    前言: 作為運(yùn)維工程師,掌握 Kubernetes 命令行工具是日常工作的核心技能。本文將深入解析 K8S 最實(shí)用的命令,從基礎(chǔ)操作到高級技巧,助你成為容器化集群管理專家。
    的頭像 發(fā)表于 07-24 14:07 ?382次閱讀

    存儲技術(shù)全解析

    感到困惑,不清楚它們之間的區(qū)別和關(guān)系,以及哪些是片上存儲,哪些是片外存儲。本文將系統(tǒng)地解析這些存儲技術(shù),并以樹莓派和x86個(gè)人電腦為例,說明它們在實(shí)際系統(tǒng)中的應(yīng)用。
    的頭像 發(fā)表于 07-24 11:34 ?1692次閱讀

    Linux權(quán)限體系解析

    你真的了解Linux權(quán)限嗎?大多數(shù)人只知道rwx,但Linux的權(quán)限體系遠(yuǎn)比你想象的復(fù)雜和強(qiáng)大。今天我們深入探討Linux的12位權(quán)限體系,這是每個(gè)運(yùn)維工程師都應(yīng)該掌握的核心知識。
    的頭像 發(fā)表于 07-23 16:57 ?463次閱讀

    生產(chǎn)環(huán)境中Kubernetes容器安全的最佳實(shí)踐

    隨著容器化技術(shù)的快速發(fā)展,Kubernetes已成為企業(yè)級容器編排的首選平臺。然而,在享受Kubernetes帶來的便利性和可擴(kuò)展性的同時(shí),安全問題也日益凸顯。本文將從運(yùn)維工程師的角度,深入探討生產(chǎn)環(huán)境中Kubernetes容器
    的頭像 發(fā)表于 07-14 11:09 ?339次閱讀

    Docker Volume管理命令大全

    Docker Volume管理命令大全
    的頭像 發(fā)表于 05-28 17:14 ?490次閱讀

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發(fā)者和系統(tǒng)管理員通過定義、打包和部署應(yīng)用程序來簡化 Kubernetes 應(yīng)用的管理工作。Helm 的出現(xiàn)是為了解決在 Kubernetes
    的頭像 發(fā)表于 04-30 13:42 ?2746次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    Kubernetes中部署MySQL集群

    一般情況下 Kubernetes 可以通過 ReplicaSet 以一個(gè) Pod 模板創(chuàng)建多個(gè) pod 副本,但是它們都是無狀態(tài)的,任何時(shí)候它們都可以被一個(gè)全新的 pod 替換。
    的頭像 發(fā)表于 03-18 16:22 ?451次閱讀
    <b class='flag-5'>Kubernetes</b>中部署MySQL集群

    Kubernetes包管理工具Helm的安裝和使用

    Helm 可以幫助我們管理 Kubernetes 應(yīng)用程序 - Helm Charts 可以定義、安裝和升級復(fù)雜的 Kubernetes 應(yīng)用程序,Charts 包很容易創(chuàng)建、版本管理、分享和分布。
    的頭像 發(fā)表于 03-13 16:06 ?1734次閱讀

    應(yīng)變片的由來與原理

    應(yīng)變片的由來和原理
    的頭像 發(fā)表于 02-26 15:07 ?2041次閱讀
    應(yīng)變片的<b class='flag-5'>由來</b>與原理

    Kubernetes Pod常用管理命令詳解

    Kubernetes Pod常用管理命令詳解
    的頭像 發(fā)表于 02-17 14:06 ?797次閱讀
    <b class='flag-5'>Kubernetes</b> Pod常用管理命令詳解

    Kubernetes:構(gòu)建高效的容器化應(yīng)用平臺

    Kubernetes 作為容器編排的事實(shí)標(biāo)準(zhǔn),在容器化應(yīng)用部署中發(fā)揮著關(guān)鍵作用。 搭建 Kubernetes 集群是應(yīng)用的基礎(chǔ)。可以使用kubeadm工具快速搭建。在主節(jié)點(diǎn)執(zhí)行kubeadm
    的頭像 發(fā)表于 01-23 15:22 ?478次閱讀

    使用 Flexus 云服務(wù)器 X 實(shí)例部署 Kubernetes 圖形化管理平臺

    Kubernetes 作為當(dāng)今最流行的容器編排平臺,隨著云計(jì)算、微服務(wù)架構(gòu)和 DevOps 文化的普及,Kubernetes 在自動(dòng)化部署、擴(kuò)展和管理容器化應(yīng)用程序方面扮演著越來越重要的角色。未來
    的頭像 發(fā)表于 01-21 16:14 ?473次閱讀
    使用 Flexus 云服務(wù)器 X 實(shí)例部署 <b class='flag-5'>Kubernetes</b> 圖形化管理平臺

    Kubernetes的CNI網(wǎng)絡(luò)插件之flannel

    Kubernetes設(shè)計(jì)了網(wǎng)絡(luò)模型,但卻將它的實(shí)現(xiàn)講給了網(wǎng)絡(luò)插件,CNI網(wǎng)絡(luò)插件最重要的功能就是實(shí)現(xiàn)Pod資源能夠跨主機(jī)通信。
    的頭像 發(fā)表于 01-02 09:43 ?1019次閱讀

    TLV320ADC3101設(shè)置AGC后調(diào)整volume無效是怎么回事?

    各位大大:我tlv320adc3101芯片設(shè)置成功,pga和volume都能單獨(dú)操作寄存器使經(jīng)dac的音量增大或減小,就是本底噪音比較大,現(xiàn)設(shè)置agc,雙聲道設(shè)置一樣
    發(fā)表于 10-25 08:24

    ZCAN PRO解析的DBC Singal 起始位與XNET解析的起始位不同;解析的信號不符合大端邏輯

    上圖中的DBC文件使用記事本打開,Data_Field信號,起始位為23,長度為48,大端方式存儲;(按照這個(gè)方式存儲,明顯已經(jīng)溢出) 上圖為該信號在ZCANPRO軟件中打開,解析的起始位為23
    發(fā)表于 10-18 13:53