[英]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.