Kubernetes Garbage Collection

Owners 和 dependents

Kubernetes的對象可以是其他對象的owner蜈缤。owner持有的對象成為owner的dependent object馋袜。例如ReplicaSetPod的owner锌奴。PodReplicaSet的依賴項。每個依賴項都有一個metadata.ownerReferences 指向?qū)膐wner。

在一些情況下秦踪,Kubernetes會自動設置對象的ownerReferences 机错,例如爬范,當創(chuàng)建ReplicaSet的時候,Kubernetes會自動的為屬于ReplicaSetPod設置ownerReferences弱匪。

Kubernetes1.8自動為ReplicationController青瀑、ReplicaSetStatefulSet萧诫、DaemonSet斥难、DeploymentJobCronJob創(chuàng)建或采用的對象設置ownerReference帘饶。

也可以手動設置ownerReferences來指定owner和dependent的關(guān)系哑诊。

NOTE:在開發(fā)自定義資源對象的時候,Kubernetes不會設置ownerReferences及刻,這個時候需要自己手動處理owner和dependent的關(guān)系镀裤。

ReplicaSet設置Pod的ownerReference的例子

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-repset
spec:
  replicas: 3
  selector:
    matchLabels:
      pod-is-for: garbage-collection-example
  template:
    metadata:
      labels:
        pod-is-for: garbage-collection-example
    spec:
      containers:
      - name: nginx
        image: nginx
kubectl apply -f https://k8s.io/examples/controllers/replicaset.yaml
kubectl get pods --output=yaml
apiVersion: v1
kind: Pod
metadata:
  ...
  ownerReferences:
  - apiVersion: apps/v1
    controller: true
    blockOwnerDeletion: true
    kind: ReplicaSet
    name: my-repset
    uid: d9607e19-f88f-11e6-a518-42010a800195
  ...

NOTE:
設計上不允許跨命名空間的owner reference,這意味著:

  1. Namespace-scoped的依賴項僅能指向同一namespace的owner缴饭,以及 Cluster-scoped的owner
  2. Cluster-scoped的依賴項只能指向cluster的owner淹禾,不能指向Namespace-scoped

控制垃圾收集器刪除依賴項

刪除對象時,可以執(zhí)行是否自動刪除對象的依賴項茴扁,自動刪除依賴項稱為級聯(lián)刪除(cascading deletion)铃岔。級聯(lián)刪除有兩種模式:background 和 foreground。

如果對象刪除但沒有自動刪除依賴項峭火,其依賴項稱為孤兒(orphaned)依賴毁习。

Foreground 級聯(lián)刪除

在 Foreground 級聯(lián)刪除中,根對象先進 “deletion in progress” 狀態(tài)卖丸,在 “deletion in progress”狀態(tài)下:

  • 對象可以通過REST API可見
  • 對象設置delectionTimestamp
  • 對象的metadata.finalizers 包含 "foregroundDeletion"

一旦對象進入了 “deletion in progress” 狀態(tài)纺且,垃圾收集器就會刪除對象的依賴項。一旦垃圾收集器刪除了所有 “blocking”的依賴項 (具有ownerReference.blockOwnerDeletion=true 的對象)稍浆,就會刪除owner對象载碌。

請注意猜嘱,在“ foregroundDeletion”中,僅設置了ownerReference.blockOwnerDeletion = true的依賴項會“blocking”owner對象的刪除嫁艇。Kubernetes 1.7 版本增加了一個準入控制器朗伶,未經(jīng)授權(quán)的依賴者不能延遲owner對象的刪除。

如果一個對象的ownerReferences字段是由控制器(如部署或復制集)設置的步咪,那么blockOwnerDeletion 是自動設置的论皆。

Background 級聯(lián)刪除

在 Background 級聯(lián)刪除中,Kubernetes會立即刪除owner對象猾漫,之后垃圾收集器在后臺刪除依賴項点晴。

設置級聯(lián)刪除策略

要控制級聯(lián)刪除策略,需要在刪除對象時設置deleteOptions參數(shù)上的propagationPolicy字段悯周。propagationPolicy 可選值包括 "Orphan", "Foreground", 或者 "Background"粒督。

background 示例:

kubectl proxy --port=8080
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
  -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \
  -H "Content-Type: application/json"

foreground 示例:

kubectl proxy --port=8080
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
  -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
  -H "Content-Type: application/json"

orphan 示例:

kubectl proxy --port=8080
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
  -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
  -H "Content-Type: application/json"

kubectl 支持級聯(lián)刪除,自動刪除依賴項設置—-cascade 為true禽翼,對于orphan --cascade 設置為false屠橄。默認是true。

例如捐康,orphan的方式刪除ReplicaSet:

kubectl delete replicaset my-repset --cascade=false

另外值得一提的是,關(guān)于GC的設計庸蔼,有兩篇專門的文章討論:
Design Doc 1
Design Doc 2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末解总,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姐仅,更是在濱河造成了極大的恐慌花枫,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掏膏,死亡現(xiàn)場離奇詭異劳翰,居然都是意外死亡,警方通過查閱死者的電腦和手機馒疹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門佳簸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颖变,你說我怎么就攤上這事生均。” “怎么了腥刹?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵马胧,是天一觀的道長。 經(jīng)常有香客問我衔峰,道長佩脊,這世上最難降的妖魔是什么蛙粘? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮威彰,結(jié)果婚禮上出牧,老公的妹妹穿的比我還像新娘。我一直安慰自己抱冷,他們只是感情好崔列,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旺遮,像睡著了一般赵讯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耿眉,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天边翼,我揣著相機與錄音,去河邊找鬼鸣剪。 笑死组底,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的筐骇。 我是一名探鬼主播债鸡,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铛纬!你這毒婦竟也來了厌均?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤告唆,失蹤者是張志新(化名)和其女友劉穎棺弊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擒悬,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡模她,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了懂牧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侈净。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖僧凤,靈堂內(nèi)的尸體忽然破棺而出用狱,到底是詐尸還是另有隱情,我是刑警寧澤拼弃,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布夏伊,位于F島的核電站,受9級特大地震影響吻氧,放射性物質(zhì)發(fā)生泄漏溺忧。R本人自食惡果不足惜咏连,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲁森。 院中可真熱鬧祟滴,春花似錦、人聲如沸歌溉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痛垛。三九已至草慧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匙头,已是汗流浹背漫谷。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹂析,地道東北人舔示。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像电抚,于是被迫代替她去往敵國和親惕稻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容