成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

與 Kubernetes 的耐心對話:當(dāng) Namespace 不愿離開時

云計算 云原生
Finalizers 機制是 Kubernetes 的“安全鎖”,但其對控制器邏輯的強依賴也使其成為潛在的風(fēng)險點。

引言

對于這種案例,你們的處理思路是怎么樣的呢,是否真正的處理過,如果遇到,你們應(yīng)該怎么處理。

我想大多數(shù)人都沒有遇到過。

最后有相關(guān)的學(xué)習(xí)群,有興趣可以加入。

開始

一、Finalizers 機制深度解析

Finalizers 是 Kubernetes 中一種關(guān)鍵元數(shù)據(jù)字段,其設(shè)計初衷是確保資源刪除前完成必要的清理操作(如釋放外部依賴、刪除關(guān)聯(lián)資源)。以下從源碼層面解析其工作機制:

1. 資源刪除流程

? 用戶發(fā)起刪除:執(zhí)行 kubectl delete 后,資源 metadata.deletionTimestamp 被標(biāo)記,但不會立即刪除。

? Finalizers 檢查:API Server 檢查 metadata.finalizers 列表:

若列表為空,直接刪除資源。

若列表非空,資源進入 Terminating 狀態(tài),并等待控制器處理。

? 控制器處理:關(guān)聯(lián)控制器(如自定義 Operator)執(zhí)行清理邏輯,完成后移除自身 Finalizer。

? 資源釋放:當(dāng)所有 Finalizers 被移除,API Server 真正刪除資源。

2. 源碼關(guān)鍵邏輯

Kubernetes 源碼(pkg/registry/core/namespace/storage/storage.go)中處理 Namespace 刪除的簡化邏輯:

// 檢查 Finalizers 是否為空
if len(namespace.Finalizers) == 0 {
    // 直接刪除
    return deleteResource()
} else {
    // 標(biāo)記 deletionTimestamp 并等待
    namespace.DeletionTimestamp = &metav1.Time{Time: time.Now()}
    updateResource(namespace)
}

3. Finalizers 與 GC(垃圾回收)的交互

? Finalizers 優(yōu)先級高于 Kubernetes 內(nèi)置的垃圾回收機制。

? 即使子資源(如 Pod、Service)有 OwnerReference,若父資源(如 Namespace)的 Finalizers 未完成,子資源也不會被自動刪除。

二、真實生產(chǎn)案例擴展

案例 1:自定義控制器崩潰導(dǎo)致 Finalizers 死鎖

? 背景:某電商平臺的自定義「日志歸檔控制器」負責(zé)在 Namespace 刪除時清理 S3 存儲桶。

? 故障現(xiàn)象:

刪除 Namespace 卡在 Terminating 狀態(tài)。

控制器日志持續(xù)報錯 Failed to delete bucket: AccessDenied。

? 根因分析:

IAM 角色權(quán)限配置錯誤,控制器無法訪問 S3。

控制器未實現(xiàn)重試邏輯,首次失敗后不再嘗試清理。

? 解決方案:

// 控制器代碼改進示例(添加指數(shù)退避重試)
retryConfig := wait.Backoff{
    Steps:    5,
    Duration: 1 * time.Second,
    Factor:   2.0,
    Jitter:   0.1,
}
err := wait.ExponentialBackoff(retryConfig, func() (bool, error) {
    err := deleteS3Bucket(bucketName)
    if err != nil {
        returnfalse, nil// 繼續(xù)重試
    }
    returntrue, nil
})

案例 2:跨集群資源依賴未解除

? 背景:某多云架構(gòu)中,Namespace 關(guān)聯(lián)了跨集群的聯(lián)邦資源(如 ClusterRoleBinding)。

? 故障現(xiàn)象:

刪除 Namespace 后,聯(lián)邦控制平面持續(xù)嘗試同步資源,F(xiàn)inalizers 無法完成。

? 根因分析:

聯(lián)邦控制器未正確處理跨集群資源的清理依賴。

? 解決方案:

# 手動清理聯(lián)邦資源
kubefedctl delete federatednamespace my-ns --cluster-context=cluster-ctx
# 移除 Finalizers
kubectl patch ns my-ns -p '{"metadata":{"finalizers":[]}}' --type=merge

三、系統(tǒng)性解決方案進階

1. 手動移除 Finalizers(應(yīng)急場景)

? 適用場景:控制器不可用且需快速恢復(fù)。

? 詳細步驟:

  1. 導(dǎo)出資源配置:
kubectl get ns my-ns -o json > tmp.json

b.編輯 tmp.json,清空 finalizers 字段:

{
  "metadata": {
    "finalizers": []
  }
}

c.通過 Kubernetes API 強制更新:

curl -X PUT \
  -H "Content-Type: application/json" \
  --data-binary @tmp.json \
  http://localhost:8080/api/v1/namespaces/my-ns/finalize
  1. 注意:若使用 kubectl proxy 需先啟動代理(kubectl proxy --port=8080)。

2. 控制器設(shè)計的防御性實踐

? 代碼健壯性:

最終一致性保證:控制器需處理資源中途刪除的場景,避免因資源不存在而崩潰。

Finalizers 生命周期管理:

// 添加 Finalizer
if !containsString(resource.Finalizers, myFinalizer) {
    resource.Finalizers = append(resource.Finalizers, myFinalizer)
    if err := r.Update(ctx, resource); err != nil {
        return err
    }
}

// 清理 Finalizer
if containsString(resource.Finalizers, myFinalizer) {
    resource.Finalizers = removeString(resource.Finalizers, myFinalizer)
    if err := r.Update(ctx, resource); err != nil {
        return err
    }
}

? 優(yōu)雅終止處理:在控制器 Pod 的 PreStop Hook 中清理 Finalizers:

lifecycle:
  preStransform: translateY(
    exec:
      command: ["/bin/sh", "-c", "curl -X POST http://localhost:8080/cleanup"]

3. 監(jiān)控與自動化修復(fù)

? Prometheus 告警規(guī)則:

- alert: StuckTerminatingNamespace
  expr: kube_namespace_status_phase{phase="Terminating"} > 0
  for: 10m
  annotations:
    summary: "Namespace {{ $labels.namespace }} is stuck in Terminating state"

? 自動化修復(fù)腳本:

#!/bin/bash
STUCK_NS=$(kubectl get ns --field-selector status.phase=Terminating -o name)
for ns in $STUCK_NS; do
    kubectl get $ns -o json | jq '.metadata.finalizers = []' > tmp.json
    kubectl replace --raw "/api/v1/namespaces/${ns#*/}/finalize" -f tmp.json
done

四、預(yù)防措施與最佳實踐

1. Finalizers 最小化原則

  • 僅在絕對必要時添加 Finalizers,清理完成后立即移除。
  • 避免跨資源依賴(如 Namespace 依賴另一個集群的資源)。

2. 控制器混沌測試

? 使用 Chaos Mesh 模擬控制器崩潰場景:

apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
  name: controller-crash
spec:
  action: pod-failure
  duration: "10m"
  selector:
    labelSelector:
      "app": "my-controller"

3. 定期審計與清理

? 掃描所有 Terminating 資源:

kubectl get ns,po,svc --all-namespaces --field-selector=metadata.deletionTimestamp!=""

五、Kubernetes 生態(tài)工具推薦

工具

作用

使用場景

kubectl-neat

清理資源配置中的冗余字段

手動操作前查看純凈配置

kube-score

檢查資源配置合理性(含 Finalizers 風(fēng)險)

預(yù)發(fā)環(huán)境卡點檢測

kubectl-watch

實時監(jiān)控資源狀態(tài)變化

觀察 Finalizers 移除過程

總結(jié)

Finalizers 機制是 Kubernetes 的“安全鎖”,但其對控制器邏輯的強依賴也使其成為潛在的風(fēng)險點。通過以下策略構(gòu)建防御體系:

1. 代碼防御:控制器需實現(xiàn)重試、超時和優(yōu)雅終止邏輯。

2. 監(jiān)控兜底:實時告警 + 自動化修復(fù)腳本。

3. 混沌驗證:定期模擬故障,驗證系統(tǒng)容錯能力。

理解 Finalizers 的底層邏輯,結(jié)合最佳實踐與工具鏈,方能在大規(guī)模 Kubernetes 集群中游刃有余。

責(zé)任編輯:武曉燕 來源: 云原生運維圈
相關(guān)推薦

2022-05-23 15:56:40

人工智能機器人自然語言

2018-01-03 10:34:20

創(chuàng)業(yè)公司事業(yè)

2021-07-27 08:25:41

KubernetesBotKube監(jiān)控

2010-04-29 14:33:01

Unix系統(tǒng)

2009-11-11 14:19:55

PHP之父勒多夫Lerdorf

2015-07-06 09:43:21

BYOD企業(yè)風(fēng)險管理移動辦公

2025-03-26 00:04:00

2015-08-13 13:44:21

優(yōu)化多核

2021-10-07 09:06:48

DeletesqlSELECT

2023-05-06 10:28:14

云計算邊緣計算

2020-11-18 12:18:31

物聯(lián)網(wǎng)

2019-12-04 11:00:42

前端DockerKubernetes

2021-05-13 10:12:55

Kubernetes 微服務(wù)軟件開發(fā)

2009-11-29 17:15:53

Linux操作系統(tǒng)

2019-08-02 13:16:08

SparkKubernetes云原生

2019-11-11 21:34:33

DockerKubernetes容器

2017-03-13 16:40:28

微軟LinuxPowerShell

2020-05-22 13:20:10

技術(shù)開發(fā)代碼

2019-08-21 06:45:19

LTEWi-Fi網(wǎng)絡(luò)通信

2016-09-14 16:31:17

QPS系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩在线免费视频 | 久久99精品久久久 | 一区二视频 | 日韩视频三区 | 国产精品久久精品 | 欧美国产精品一区二区三区 | 国产在线一区二区 | 99亚洲精品 | 91偷拍精品一区二区三区 | 宅女噜噜66国产精品观看免费 | 国产97人人超碰caoprom | 岛国av免费在线观看 | 久久久久中文字幕 | jdav视频在线观看免费 | 成人精品一区二区 | 三级黄视频在线观看 | 91亚洲精品在线 | 日韩精品一区二区在线 | 日韩在线观看中文字幕 | 久久久这里都是精品 | 国产999精品久久久 午夜天堂精品久久久久 | 欧美一级欧美三级在线观看 | 亚洲网视频 | 一区二区免费看 | 色吧久久 | 蜜桃视频一区二区三区 | 久久国产精品视频免费看 | 午夜视频免费在线观看 | 成人免费高清 | 亚洲在线高清 | 国产一级黄色网 | 日韩精品一区二区三区中文在线 | 国产一区不卡 | 人人九九精 | 国产日韩精品一区 | 欧美精品一区二区在线观看 | 97国产爽爽爽久久久 | 欧美涩涩网 | 99免费在线观看视频 | 亚洲欧美aⅴ | 久久精品一级 |