国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

談?wù)刱8s1.12新特性--Mount propagation(掛載命名空間的傳播)

DTeam / 1614人閱讀

摘要:一個(gè)卷的掛載傳播由中的字段控制。此模式等同于內(nèi)核文檔中描述的掛載傳播。此卷掛載的行為與掛載相同。掛載傳播可能很危險(xiǎn)。所謂傳播事件,是指由一個(gè)掛載對(duì)象的狀態(tài)變化導(dǎo)致的其它掛載對(duì)象的掛載與解除掛載動(dòng)作的事件。

Mount propagation

掛載傳播允許將Container掛載的卷共享到同一Pod中的其他Container,甚至可以共享到同一節(jié)點(diǎn)上的其他Pod。
一個(gè)卷的掛載傳播由Container.volumeMounts中的mountPropagation字段控制。它的值是:

None 此卷掛載不會(huì)接收到任何后續(xù)掛載到該卷或是掛載到該卷的子目錄下的掛載。以類似的方式,在主機(jī)上不會(huì)顯示Container創(chuàng)建的裝載。這是默認(rèn)模式。

此模式等同于Linux內(nèi)核文檔中所述的 private 傳播。

HostToContainer 此卷掛載將會(huì)接收到任何后續(xù)掛載到該卷或是掛載到該卷的子目錄下的掛載。

換句話說,如果主機(jī)在卷掛載中掛載任何內(nèi)容,則Container將看到它掛載在那里。
類似地,如果任何具有 Bidirectional 掛載傳播設(shè)置的Pod掛載到同一個(gè)卷中,那么具有HostToContainer掛載傳播的Container將會(huì)看到它。
此模式等同于Linux內(nèi)核文檔中描述的rslave掛載傳播。

Bidirectional 此卷掛載的行為與HostToContainer掛載相同。此外,Container創(chuàng)建的所有卷掛載都將傳播回主機(jī)和所有使用相同卷的Pod的所有容器。

此模式的典型用例是具有Flexvolume或CSI驅(qū)動(dòng)程序的Pod需要使用hostPath 卷模式 在主機(jī)上掛載內(nèi)容。
此模式等同于Linux內(nèi)核文檔中描述的rshared安裝傳播。
PS:
Bidirectional 掛載傳播可能很危險(xiǎn)。它可能會(huì)損壞主機(jī)操作系統(tǒng),因此只允許在特權(quán)容器中使用它。強(qiáng)烈建議您熟悉Linux內(nèi)核行為。此外,容器在容器中創(chuàng)建的任何卷裝入必須在終止時(shí)由容器銷毀(卸載)。

Bidirectional一些使用場(chǎng)景:

在不同的pod之間共享設(shè)備,其中掛載發(fā)生在pod中,但是在pod之間共享。

從容器內(nèi)部附加設(shè)備。例如,從容器內(nèi)部附加ISCSI設(shè)備。這時(shí)候因?yàn)槿绻萜魉赖簦鳈C(jī)將不能獲得所需的信息(除非使用雙向安裝傳播)來正確刷新寫入和分離設(shè)備。

sample
deployment:
  containers:
  - image: gcr.io/google_containers/busybox:1.24
    name: reader
    volume:
    - mount: /usr/test-pod
      store: local-vol
      propagation: bidirectional
  name: local-test-reader
  version: extensions/v1beta1
  volumes:
    local-vol: pvc:example-local-claim
配置

在掛載傳播可以在某些部署(CoreOS,RedHat / Centos,Ubuntu)上正常工作之前,必須在Docker中正確配置掛載共享,如下所示。
編輯Docker的systemdservice 文件。設(shè)置MountFlags如下:

MountFlags=shared

或者,如果存在,則刪除MountFlags = slave。然后重啟Docker守護(hù)進(jìn)程:

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
具體案例

之所以關(guān)注這塊,是由于我們?cè)趯?shí)際使用k8s的過程中遇到了相關(guān)的問題。
我們?nèi)萜鳂I(yè)務(wù)日志的收集有很大一部分通過sidecar的方式,mount日志到主機(jī)某個(gè)目錄。由于我們的日志量非常大,即使我們每個(gè)主機(jī)掛載了1T的硬盤,經(jīng)常會(huì)寫滿這張盤。所以我們實(shí)現(xiàn)了一個(gè)log-tracer的項(xiàng)目,專門用于根據(jù)pod的日志掛載信息clear過期的日志。通過daemonset方式部署。
但是如果設(shè)置mount為private的話,缺乏廣播通知。在實(shí)際新增pod后,有一部分的日志掛載是無法感測(cè)到,因而也無法徹底清理。

刨根問底

究其深層次分析,該特性并不是k8s或是docker實(shí)現(xiàn)的。本質(zhì)上是mount namespace 的特性。

mount namespace通過隔離文件系統(tǒng)掛載點(diǎn)對(duì)隔離文件系統(tǒng)提供支持,它是歷史上第一個(gè)Linux namespace,所以它的標(biāo)識(shí)位比較特殊,就是CLONE_NEWNS。隔離后,不同mount namespace中的文件結(jié)構(gòu)發(fā)生變化也互不影響。你可以通過/proc/[pid]/mounts查看到所有掛載在當(dāng)前namespace中的文件系統(tǒng),還可以通過/proc/[pid]/mountstats看到mount namespace中文件設(shè)備的統(tǒng)計(jì)信息,包括掛載文件的名字、文件系統(tǒng)類型、掛載位置等等。

進(jìn)程在創(chuàng)建mount namespace時(shí),會(huì)把當(dāng)前的文件結(jié)構(gòu)復(fù)制給新的namespace。新namespace中的所有mount操作都只影響自身的文件系統(tǒng),而對(duì)外界不會(huì)產(chǎn)生任何影響。這樣做非常嚴(yán)格地實(shí)現(xiàn)了隔離,但是某些情況可能并不適用。比如父節(jié)點(diǎn)namespace中的進(jìn)程掛載了一張CD-ROM,這時(shí)子節(jié)點(diǎn)namespace拷貝的目錄結(jié)構(gòu)就無法自動(dòng)掛載上這張CD-ROM,因?yàn)檫@種操作會(huì)影響到父節(jié)點(diǎn)的文件系統(tǒng)。

2006 年引入的掛載傳播(mount propagation)解決了這個(gè)問題,掛載傳播定義了掛載對(duì)象(mount object)之間的關(guān)系,系統(tǒng)用這些關(guān)系決定任何掛載對(duì)象中的掛載事件如何傳播到其他掛載對(duì)象(參考自:http://www.ibm.com/developerw...)。所謂傳播事件,是指由一個(gè)掛載對(duì)象的狀態(tài)變化導(dǎo)致的其它掛載對(duì)象的掛載與解除掛載動(dòng)作的事件。

共享關(guān)系(share relationship)。如果兩個(gè)掛載對(duì)象具有共享關(guān)系,那么一個(gè)掛載對(duì)象中的掛載事件會(huì)傳播到另一個(gè)掛載對(duì)象,反之亦然。

從屬關(guān)系(slave relationship)。如果兩個(gè)掛載對(duì)象形成從屬關(guān)系,那么一個(gè)掛載對(duì)象中的掛載事件會(huì)傳播到另一個(gè)掛載對(duì)象,但是反過來不行;在這種關(guān)系中,從屬對(duì)象是事件的接收者。

一個(gè)掛載狀態(tài)可能為如下的其中一種:

共享掛載(shared)

從屬掛載(slave)

共享/從屬掛載(shared and slave)

私有掛載(private)

不可綁定掛載(unbindable)

在默認(rèn)情況下,所有掛載都是私有的。可以用以下命令將掛載對(duì)象顯式地標(biāo)為共享掛載:

mount --make-shared 

例如,如果 / 上的掛載必須是共享的,那么執(zhí)行以下命令:

mount --make-shared /

從共享掛載克隆的掛載對(duì)象也是共享的掛載;它們相互傳播掛載事件。

通過執(zhí)行以下命令,可以顯式地將一個(gè)共享掛載轉(zhuǎn)換為從屬掛載:

mount --make-slave 

從從屬掛載克隆的掛載對(duì)象也是從屬的掛載,它也從屬于原來的從屬掛載的主掛載對(duì)象。
通過執(zhí)行以下命令,可以將掛載對(duì)象標(biāo)為私有的:

mount --make-private 

通過執(zhí)行以下命令,可以將掛載對(duì)象標(biāo)為不可綁定的:

mount --make-unbindable 

最后,這些設(shè)置都可以遞歸地應(yīng)用,這意味著它們將應(yīng)用于目標(biāo)掛載之下的所有掛載。

mount --make-rshared /

將 / 之下的所有掛載轉(zhuǎn)換為共享掛載。

參考文獻(xiàn)

官方文檔

Docker背后的內(nèi)核知識(shí)——Namespace資源隔離

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/33083.html

相關(guān)文章

  • 談?wù)?/em>k8s1.12特性--Mount propagation(掛載命名空間傳播)

    摘要:一個(gè)卷的掛載傳播由中的字段控制。此模式等同于內(nèi)核文檔中描述的掛載傳播。此卷掛載的行為與掛載相同。掛載傳播可能很危險(xiǎn)。所謂傳播事件,是指由一個(gè)掛載對(duì)象的狀態(tài)變化導(dǎo)致的其它掛載對(duì)象的掛載與解除掛載動(dòng)作的事件。 Mount propagation 掛載傳播允許將Container掛載的卷共享到同一Pod中的其他Container,甚至可以共享到同一節(jié)點(diǎn)上的其他Pod。一個(gè)卷的掛載傳播由Con...

    高勝山 評(píng)論0 收藏0
  • 談?wù)?/em>k8s1.12特性--Mount propagation(掛載命名空間傳播)

    摘要:一個(gè)卷的掛載傳播由中的字段控制。此模式等同于內(nèi)核文檔中描述的掛載傳播。此卷掛載的行為與掛載相同。掛載傳播可能很危險(xiǎn)。所謂傳播事件,是指由一個(gè)掛載對(duì)象的狀態(tài)變化導(dǎo)致的其它掛載對(duì)象的掛載與解除掛載動(dòng)作的事件。 Mount propagation 掛載傳播允許將Container掛載的卷共享到同一Pod中的其他Container,甚至可以共享到同一節(jié)點(diǎn)上的其他Pod。一個(gè)卷的掛載傳播由Con...

    xuhong 評(píng)論0 收藏0
  • Kubernetes 1.12發(fā)布!功能亮點(diǎn)解析

    摘要:距離上一次版本發(fā)布三個(gè)月之隔,是今年的第三個(gè)主要版本。證書輪換證書輪換功能現(xiàn)已進(jìn)入狀態(tài)。這一功能可以在當(dāng)前證書到期時(shí)自動(dòng)續(xù)訂密鑰和服務(wù)器的證書。更多包含許多修復(fù)和內(nèi)部組件的改進(jìn),此次的更新明顯側(cè)重于穩(wěn)定核心以及使現(xiàn)有的功能成熟。 Kubernetes1.12已于今日全新發(fā)布!Kubelet證書輪換、資源配額優(yōu)先級(jí)、掛載命名空間、對(duì)Azure的增強(qiáng)支持等10大亮點(diǎn)功能,本文為你一一解讀!...

    Developer 評(píng)論0 收藏0
  • docker/k8s/云

    摘要:執(zhí)行容器內(nèi)部運(yùn)行的執(zhí)行工作作為容器的執(zhí)行驅(qū)動(dòng),負(fù)責(zé)創(chuàng)建容器運(yùn)行命名空間,負(fù)責(zé)容器資源使用的統(tǒng)計(jì)與限制,負(fù)責(zé)容器內(nèi)部進(jìn)程的真正運(yùn)行等。典型的在啟動(dòng)后,首先將設(shè)置為進(jìn)行一系列檢查然后將其切換為供用戶使用。 在https://segmentfault.com/a/11... 容器,隔離,云的概述。這篇對(duì)其中用途廣泛的docker,k8s做詳細(xì)介紹,并給出云搭建的生態(tài)環(huán)境體系。 docker ...

    zollero 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<