簡體   English   中英

為Kubernetes資源實現自定義Finalizer

[英]Implementing a custom Finalizer to Kubernetes resources

如果我正在實現我的Kubernetes CRD,似乎很容易實現自定義終結器 :代碼片段非常簡單,因為對象上的第一個刪除請求為metadata.deletionTimestamp字段設置了一個值,而不是刪除觸發自定義控制器監視的對象該對象執行它處理的任何終結器。

但是,讓我們想象一下,我想為默認的Kubernetes資源設置自定義終結器 ,如命名空間,部署或其他:可能與否?

好的,以Namespace為例進行了一些測試。

# k create ns my-namespace
namespace/my-namespace created

# k edit ns my-namespace
(... adding the .metadata.finalizers list)

# k get ns my-namespace -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2019-09-08T06:50:25Z"
  finalizers:
  - prometherion/do-something
  name: my-namespace
  resourceVersion: "1131"
  selfLink: /api/v1/namespaces/my-namespace
  uid: 75b5bae8-1d5b-44c6-86bc-e632341aabfd
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

# k delete ns my-namespace
namespace "my-namespace" deleted

如果我打開另一個終端,我可以在Terminating狀態下看到該資源。

# k get ns my-namespace
NAME           STATUS        AGE
my-namespace   Terminating   6m8s

所以,實際上資源被標記為刪除,因為我有一個deletionTimestamp

k get ns my-namespace -o jsonpath='{.metadata.deletionTimestamp}'
2019-09-08T06:58:07

要完成刪除,我只需要一個簡單的Watch (使用Kubernetes Go Client)來獲取對象的更改(或動態Admission Controll來獲取事件,以異步模式處理我的業務邏輯(如預刪除鈎子)並刪除我的完全合格的Finalizer ...為了簡單起見,我測試了用kubectl刪除它並且它工作。

僅供參考, Finalizer必須完全合格,因為有驗證過程,因此必須根據prometherion/whatever_you_want模式聲明,注意第一部分必須遵守DNS-1123規范。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM