国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【面試題系列】關(guān)于K8s—Job的2個問題

這篇具有很好參考價值的文章主要介紹了【面試題系列】關(guān)于K8s—Job的2個問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【面試題系列】關(guān)于K8s—Job的2個問題

?序言

人生是一場消耗,要把美好的時光放在喜歡的人與事上。

寫在前面?

前面學(xué)習(xí)了job,現(xiàn)在思考一下兩個問題

文章標(biāo)記顏色說明:

  • 黃色:重要標(biāo)題
  • 紅色:用來標(biāo)記結(jié)論
  • 綠色:用來標(biāo)記一級論點
  • 藍(lán)色:用來標(biāo)記二級論點

第1個問題

job執(zhí)行完之后不會立刻從k8s面板里刪除,你可以看到有很多留存狀態(tài)的記錄,如果cronjob頻次很高,留下的這些job記錄就會增長,有沒有隱患?

解答:

頻繁留存未刪除的Job記錄可能會導(dǎo)致以下隱患:

  1. 浪費資源:每個Job都需要占用一定的資源,包括CPU、內(nèi)存等,如果留存的Job記錄過多,就會浪費寶貴的資源。

  2. 影響性能:Kubernetes控制面板需要定期查詢Job狀態(tài),如果留存的Job記錄過多,會增加查詢負(fù)擔(dān),從而影響Kubernetes控制面板的性能。

  3. 安全問題:留存的Job記錄可能包含敏感信息,如鏡像倉庫的憑證、配置文件等,如果泄露給攻擊者,可能會導(dǎo)致安全問題。

為了避免以上隱患,建議定期清理過期的Job記錄,可以通過配置Job的TTL來實現(xiàn)自動清理。另外,也可以通過手動刪除已完成的Job記錄來進(jìn)行清理。

那如何實現(xiàn)清理呢?

好的,我可以再詳細(xì)一點地解釋一下如何清理過期的Job記錄。

在Kubernetes中,可以通過設(shè)置Job的TTL(time to live)來自動刪除過期的Job記錄。TTL是指Job完成后保留在系統(tǒng)中的最長時間,超過這個時間后,Job記錄將自動被刪除。設(shè)置TTL需要在Job的spec中指定activeDeadlineSeconds字段,例如:

apiVersion: batch/v1
kind: Job #資源類型
metadata:
  name: my-job
spec:
  activeDeadlineSeconds: 3600 # 設(shè)置TTL為1小時
  template:
    # ...

上面的配置將設(shè)置TTL為1小時,即Job完成后最多保留1小時。

除了設(shè)置TTL外,還可以通過手動刪除已完成的Job記錄來進(jìn)行清理。可以使用kubectl命令來刪除Job記錄,例如:

kubectl delete job my-job

上面的命令將刪除名為my-job的Job記錄。如果要刪除所有已完成的Job記錄,可以使用以下命令:

kubectl delete jobs --field-selector=status.successful>0

這個命令將刪除所有已完成的Job記錄,其中--field-selector=status.successful>0表示只刪除成功完成的Job記錄。

需要注意的是,手動刪除Job記錄可能會刪除一些有用的信息,因此建議先備份相關(guān)數(shù)據(jù)再進(jìn)行清理。另外,如果Job頻繁執(zhí)行,建議使用自動清理的方式來避免留存過多的Job記錄。

怎么實現(xiàn)自動清理?

實現(xiàn)自動清理可以使用 Kubernetes 的 TTL Controller。

TTL Controller 是 Kubernetes 的一個控制器,它可以根據(jù)資源的 TTL 設(shè)置自動刪除過期的資源。TTL Controller 可以應(yīng)用于許多 Kubernetes 資源,包括 Job、Pod、Secret 等。

要使用 TTL Controller,需要先創(chuàng)建一個 TTL Controller 的定義文件,內(nèi)容如下:

apiVersion: batch/v1
kind: CronJob #資源類型
metadata:
  name: ttl-controller
spec:
  schedule: "*/5 * * * *" # 定時清理任務(wù)
  jobTemplate:
    spec:
      ttlSecondsAfterFinished: 3600 # 設(shè)置TTL為1小時
      template:
        # 定義清理任務(wù)的容器
        spec:
          containers:
          - name: clean-jobs
            image: alpine:latest
            command: ["sh", "-c", "kubectl delete jobs --field-selector=status.successful>0"]

上面的定義文件將創(chuàng)建一個 CronJob,用于定時清理已完成的 Job 記錄。其中,schedule 字段用于指定定時清理任務(wù)的執(zhí)行時間,這里設(shè)置為每 5 分鐘執(zhí)行一次;ttlSecondsAfterFinished 字段用于設(shè)置 Job 記錄的 TTL,這里設(shè)置為 1 小時;template 字段中的容器定義了清理任務(wù)的執(zhí)行邏輯,這里使用了 Alpine Linux 鏡像,并通過 kubectl 命令刪除已完成的 Job 記錄。

將上述定義文件保存為 ttl-controller.yaml,并使用 kubectl apply 命令來創(chuàng)建 TTL Controller:

kubectl apply -f ttl-controller.yaml

這樣,TTL Controller 就會自動執(zhí)行定時清理任務(wù),刪除過期的 Job 記錄。需要注意的是,TTL Controller 只能刪除已完成的 Job 記錄,因此需要確保 Job 完成后才會留下記錄。另外,建議根據(jù)實際情況調(diào)整 TTL 的值和定時清理任務(wù)的頻率。

第2個問題

?在業(yè)務(wù)開發(fā)過程中,開發(fā)人員有可能不能直接操作k8s,而定時任務(wù)在業(yè)務(wù)中更新又很快,按你這種方式是每次變動都需要k8s管理人員操作的,怎么樣把定時任務(wù)的更新交給開發(fā)人員管理?

解答:

1 使用 Workload Identity實現(xiàn)

為了讓業(yè)務(wù)開發(fā)人員能夠方便地管理定時任務(wù),可以使用 Kubernetes 的 Workload Identity 功能。

Workload Identity 是 Kubernetes 的一項安全功能,可以將 Kubernetes 中的服務(wù)賬號與 Google Cloud 平臺上的服務(wù)賬號關(guān)聯(lián)起來。

使用 Workload Identity 可以讓 Kubernetes 中的服務(wù)賬號獲得訪問 Google Cloud 平臺資源的權(quán)限,從而實現(xiàn)業(yè)務(wù)開發(fā)人員管理 Kubernetes 資源的目的。

具體來說,可以按照以下步驟使用 Workload Identity 來讓業(yè)務(wù)開發(fā)人員管理定時任務(wù):

  1. 在 Google Cloud 平臺上創(chuàng)建一個服務(wù)賬號,并授予它適當(dāng)?shù)臋?quán)限,例如訪問?Kubernetes?API 的權(quán)限。

  2. 在 Kubernetes 中創(chuàng)建一個?ServiceAccount,并將它與上述服務(wù)賬號關(guān)聯(lián)起來。可以使用以下命令創(chuàng)建 ServiceAccount,并將它與服務(wù)賬號關(guān)聯(lián):

    kubectl create serviceaccount my-sa
    gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:my-project.svc.id.goog[my-namespace/my-sa]" my-sa@my-project.iam.gserviceaccount.com
    kubectl annotate serviceaccount --namespace my-namespace my-sa iam.gke.io/gcp-service-account=my-sa@my-project.iam.gserviceaccount.com
    ```
    
    上述命令中,my-sa 是創(chuàng)建的 ServiceAccount 的名稱,my-project 和 my-namespace 分別是 [Google Cloud](poe://www.poe.com/_api/key_phrase?phrase=Google%20Cloud&prompt=Tell%20me%20more%20about%20Google%20Cloud.) 平臺和 Kubernetes 集群的項目和命名空間名稱。
    
    
  3. 在 Kubernetes 中創(chuàng)建一個 Role 或 ClusterRole,并授予它適當(dāng)?shù)臋?quán)限,例如創(chuàng)建、刪除 Job 的權(quán)限。

  4. 將上述 Role 或 ClusterRole 與 ServiceAccount 關(guān)聯(lián)起來??梢允褂靡韵旅顒?chuàng)建 RoleBinding 或 ClusterRoleBinding,例如:

    kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=my-namespace:my-sa --namespace=my-namespace
    ```
    
    上述命令中,my-role 是上述創(chuàng)建的 Role 或 ClusterRole 的名稱,my-namespace 是 Kubernetes 集群的命名空間名稱。
    
    
  5. 將上述 ServiceAccount 的密鑰添加到業(yè)務(wù)應(yīng)用程序中,以便在調(diào)用?Kubernetes API?時使用??梢允褂靡韵旅顏慝@取 ServiceAccount 的密鑰:

    kubectl get secret --namespace my-namespace $(kubectl get serviceaccount my-sa --namespace my-namespace -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
    ```
    
    這個命令將獲取 ServiceAccount 的密鑰,并將其解碼為原始的 token 字符串。
    

通過上述步驟,業(yè)務(wù)開發(fā)人員就可以使用 ServiceAccount 的密鑰來調(diào)用 Kubernetes API,從而創(chuàng)建、更新、刪除定時任務(wù)等資源。需要注意的是,業(yè)務(wù)開發(fā)人員只能訪問被授權(quán)的資源和操作,不能訪問其他資源和操作。另外,需要確保在使用 Workload Identity 時,密鑰不被泄露,以保障安全性。

2 使用 RBAC(Role-Based Access Control)功能?

除了使用?Workload?Identity,還可以使用 Kubernetes 的 RBAC(Role-Based Access Control)功能來實現(xiàn)業(yè)務(wù)開發(fā)人員管理定時任務(wù)。

RBAC 是?Kubernetes?的一項安全功能,可以通過定義角色、角色綁定等方式來控制用戶對 Kubernetes 資源的訪問權(quán)限。使用 RBAC 可以將 Kubernetes 資源的管理權(quán)限授權(quán)給特定的用戶或組,從而實現(xiàn)業(yè)務(wù)開發(fā)人員管理 Kubernetes 資源的目的。

具體來說,可以按照以下步驟使用 RBAC 來讓業(yè)務(wù)開發(fā)人員管理定時任務(wù):

  1. 在 Kubernetes 中創(chuàng)建一個?ServiceAccount,并為它授予適當(dāng)?shù)臋?quán)限,例如創(chuàng)建、刪除 Job 的權(quán)限??梢允褂靡韵旅顒?chuàng)建 ServiceAccount:

    kubectl create serviceaccount my-sa
    ```
    
    
  2. 在 Kubernetes 中創(chuàng)建一個 Role 或 ClusterRole,并授予它適當(dāng)?shù)臋?quán)限,例如創(chuàng)建、刪除 Job 的權(quán)限??梢允褂靡韵旅顒?chuàng)建 Role 或 ClusterRole:

    kubectl create role my-role --verb=create,get,update,delete --resource=jobs
    ```
    
    上述命令中,my-role 是創(chuàng)建的 Role 或 ClusterRole 的名稱,--verb 和 --resource 參數(shù)分別用于指定授權(quán)的操作和資源類型,這里授權(quán)了創(chuàng)建、獲取、更新和刪除 Job 的權(quán)限。
    
    
  3. 將上述 Role 或 ClusterRole 與 ServiceAccount 關(guān)聯(lián)起來??梢允褂靡韵旅顒?chuàng)建 RoleBinding 或 ClusterRoleBinding,例如:

    kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=my-namespace:my-sa --namespace=my-namespace
    ```
    
    上述命令中,my-role 是上述創(chuàng)建的 Role 或 ClusterRole 的名稱,my-namespace 是 Kubernetes 集群的命名空間名稱。
    
    
  4. 將 ServiceAccount 的密鑰提供給業(yè)務(wù)開發(fā)人員,以便在調(diào)用 Kubernetes API 時使用??梢允褂靡韵旅顏慝@取 ServiceAccount 的密鑰:

    kubectl get secret --namespace my-namespace $(kubectl get serviceaccount my-sa --namespace my-namespace -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
    ```
    
    這個命令將獲取 ServiceAccount 的密鑰,并將其解碼為原始的 token 字符串。
    

通過上述步驟,業(yè)務(wù)開發(fā)人員就可以使用 ServiceAccount 的密鑰來調(diào)用?Kubernetes API,從而創(chuàng)建、更新、刪除定時任務(wù)等資源。需要注意的是,業(yè)務(wù)開發(fā)人員只能訪問被授權(quán)的資源和操作,不能訪問其他資源和操作。另外,需要確保在授權(quán)時,只授權(quán)必要的權(quán)限,以保障安全性。

3 使用項目代碼實現(xiàn)定時任務(wù)

大部分,簡單的定時任務(wù),一般是用語言自帶的定時任務(wù)去實現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-500400.html

到了這里,關(guān)于【面試題系列】關(guān)于K8s—Job的2個問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • k8s概念-Job和CronJob

    回到目錄? 對于非耐久性任務(wù),比如壓縮文件,任務(wù)完成后,pod需要結(jié)束運行,不需要pod繼續(xù)保持在系統(tǒng)中,這個時候就要用到Job。 Job負(fù)責(zé)批量處理短暫的一次性任務(wù) (short lived one-off tasks),即僅執(zhí)行一次的任務(wù),它保證批處理任務(wù)的一個或多個Pod成功結(jié)束 yaml文件 多次執(zhí)行

    2024年02月14日
    瀏覽(20)
  • k8s控制器之job--第六彈Job的模式

    Kubernetes Job 對象可以用來支持 Pod 的并發(fā)執(zhí)行,但是: Job 對象并非設(shè)計為支持需要緊密相互通信的Pod的并發(fā)執(zhí)行,例如科學(xué)計算 Job 對象支持并發(fā)處理一系列相互獨立但是又相互關(guān)聯(lián)的工作任務(wù),例如: 發(fā)送郵件 渲染頁面 轉(zhuǎn)碼文件 掃描 NoSQL 數(shù)據(jù)庫中的主鍵 其他 在一個復(fù)雜

    2024年02月10日
    瀏覽(20)
  • k8s控制器之job--第五彈Job的自動清理

    系統(tǒng)中已經(jīng)完成的 Job 通常是不在需要里的,長期在系統(tǒng)中保留這些對象,將給 apiserver 帶來很大的壓力。如果通過更高級別的控制器(例如 CronJobs)來管理 Job,則 CronJob 可以根據(jù)其中定義的基于容量的清理策略(capacity-based cleanup policy)自動清理Job。 除了 CronJob 之外,TTL 機(jī)

    2024年02月11日
    瀏覽(24)
  • Kubernetes(k8s)一次性任務(wù):Job

    目錄 一.系統(tǒng)環(huán)境 二.前言 三.Kubernetes Job簡介 四.創(chuàng)建一次性任務(wù)job 4.1 創(chuàng)建一個簡單任務(wù)的job 4.2 創(chuàng)建需要執(zhí)行多次的job任務(wù) 五.測試job失敗重試次數(shù) 六.job任務(wù)使用示例:計算圓周率 七.總結(jié) 本文主要基于Kubernetes1.21.9和Linux操作系統(tǒng)CentOS7.4。 服務(wù)器版本 docker軟件版本 Kubern

    2024年02月07日
    瀏覽(33)
  • 17-k8s控制器資源-job控制

    17-k8s控制器資源-job控制

    job控制器:就是一次性任務(wù)的pod控制器,pod完成作業(yè)后不會重啟,其重啟策略是:Never ? ? ? ? 啟動一個pod,執(zhí)行完成一個事件,然后pod關(guān)閉; ? ? ? ? 事件:計算π的值,取前5000位; [root@k8s231 pi]# vim job.yaml apiVersion: batch/v1 kind: Job metadata: ? name: job-pi spec: ? #定義pod模板 ?

    2024年02月20日
    瀏覽(24)
  • k8s中job與cronjob使用詳解

    k8s中job與cronjob使用詳解

    job,顧名思義就是任務(wù),job的概念在很多框架中都有,而且實際業(yè)務(wù)場景中也使用非常廣泛,比如大家熟悉的hadoop,客戶端可以向集群提交一個job,然后集群根據(jù)一定的調(diào)度策略來處理這個job; k8s中的job,主要用于批量處理的業(yè)務(wù)場景,比如像那種短暫的一次性任務(wù)(每個任

    2024年01月17日
    瀏覽(46)
  • k8s控制器之job--第四彈Job的終止和清理

    當(dāng) Job 完成后: 將不會創(chuàng)建新的 Pod 已經(jīng)創(chuàng)建的 Pod 也不會被清理掉。此時,您仍然可以繼續(xù)查看已結(jié)束 Pod 的日志,以檢查 errors/warnings 或者其他診斷用的日志輸出 Job 對象也仍然保留著,以便您可以查看該 Job 的狀態(tài) 由用戶決定是否刪除已完成的 Job 及其 Pod 可通過 kubectl 命

    2024年02月10日
    瀏覽(31)
  • k8s控制器之job--第二彈編寫Job的定義

    與所有的 Kubernetes 對象一樣,Job 對象的 YAML 文件中,都需要包括如下三個字段: .apiVersion .kind .metadata Job 對象的 YAML 文件,還需要一個 .spec 字段。 .spec.template 是必填字段: 用于定義 pod template 與 Pod 有相同的字段內(nèi)容,但由于是內(nèi)嵌元素,pod template 不包括阿 apiVersion 字段和

    2024年02月10日
    瀏覽(51)
  • k8s 常見面試題

    k8s 常見面試題

    前段時間在這個視頻中分享了 https://github.com/bregman-arie/devops-exercises 這個知識倉庫。 這次繼續(xù)分享里面的內(nèi)容,本次主要以 k8s 相關(guān)的問題為主。 k8s 是一個開源應(yīng)用,給用戶提供了管理、部署、擴(kuò)展容器的能力,以下幾個例子更容易理解: 你可以將容器運行在不同的機(jī)器或

    2024年02月12日
    瀏覽(9)
  • K8S之Job和CronJob控制器

    K8S之Job和CronJob控制器

    Job控制器用于管理Pod對象運行一次性任務(wù),例如:對數(shù)據(jù)庫備份,可以直接在k8s上啟動一個mysqldump備份程序,也可以啟動一個pod,這個pod專門用來做備份任務(wù),備份結(jié)束pod就可以終止了,不需要重啟,將Pod對象置于\\\"Completed\\\"(完成)狀態(tài)。 若容器中的進(jìn)程因錯誤而終止,則需要

    2024年04月11日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包