kubernetes&&基礎學習2

資源控制器

什麼是控制器

Kubernetes中內建了很多controller(控制器),這些相當於一個狀態機,用來控制Pod的具體狀態和行爲

控制器類型

  • ReplicationController和ReplicaSet
  • Deployment
  • DaemonSet
  • StateFulSet
  • Job/CronJob
  • Horizontal Pod Autoscaling

ReplicationController和ReplicaSet

ReplicationController(RC)用來確保容器應用的副本數始終保持在用戶定義的副本數,即如果有容器異常退出,會自動創建新的Pod來替代;而如果異常多出來的容器也會自動回收
在新版本的Kubernetes中建議使用ReplicaSet來取代ReplicationController。ReplicaSet跟ReplicationController沒有本質的不同,只是名字不同,並且ReplicaSet支持集合式的selector,可以通過標籤進行選擇。

Deployment

Deployment爲Pod和ReplicaSet提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController來方面的管理應用。典型的應用場景包括:

  • 定義Deployment來創建Pod和ReplicaSet
  • 滾定升級和回滾應用
  • 擴容和縮容
  • 暫停和繼續Deployment

命令式編程:命令式編程側重於如何實現程序,就像我們剛接觸編程的時候那樣,我們需要把程序的實現過程按照邏輯結果一步步寫下來。如常見的函數編寫
聲明式編程:聲明式編程側重於定義想要什麼,然後告訴計算機或引擎,讓他幫你去實現。如sql語句

DaemonSet

DaemonSet確保全部(或者一些)Node上運行一個Pod的副本。當有Node加入集羣時,也會爲他們新增一個Pod。當有Node從集羣移除時,這些Pod也會被回收。刪除DaemonSet將會刪除它創建的所有Pod。
使用DaemonSet的一些典型用法:

  • 運行集羣存儲daemon,例如在每個Node上運行glusterd、ceph
  • 在每個Node上運行日誌收集daemon,例如fluentd、logstash
  • 在每個Node上運行監控daemon,例如Promethus Node Exporter、collectd、Datadog代理、New Relic代理、Ganglia gmond

DaemonSet定義的副本數有且僅有一個。如果想在一個Node上運行多個DaemonSet,就需要定義多個DaemonSet的運行方案。

Job

Job負責批處理任務,即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束

CronJob(在特定的時間循環創建Job)

CronJob管理基於時間的Job,即:

  • 在給定時間點只運行一次
  • 週期性地在給定時間點運行

**使用前提條件:**當前使用的kubernetes集羣,版本>=1.8(對CronJon)。對於先前版本的集羣,版本 < 1.8,啓動API Server時,通過傳遞選項 --runtime-config=batch/v2alpha1=true 可以開啓batch/v2alpha1 API
典型的用法如下所示:

  • 在給定的時間點調度Job運行
  • 創建週期性運行的Job,如:數據庫備份、發送郵件

StatefulSet

StatefulSet作爲Controller爲Pod提供唯一的標識。它可以保證部署和scale的順序
StatefulSet是爲了解決有狀態服務的問題(對應Deployments和ReplicaSets是爲無狀態服務而設計),其應用場景包括:

  • 穩定的持久化存儲:即Pod重新調度後還是能夠訪問到相同的持久化數據,基於PVC來實現
  • 穩定的網絡標誌:即Pod重新調度後其PodName和HostName不變,基於Headless Service(即沒有Cluster IP的Service)來實現
  • 有序部署,有序擴展:即Pod是有順序的,在部署或擴展的時候要依據定義的順序依次進行(即從0到N-1,在下一個Pod運行之前,所有之前的Pod必須都是Running和Ready狀態),基於init containers來實現
  • 有序收縮,有序刪除(即從N-1到0)

Horizontal Pod Autoscaling

應用的資源使用率通常都有高峯和低谷的時候,如何削峯填谷,提高集羣的整體資源利用率,讓service中的Pod個數自動調整呢?這就有賴於Horizontal Pod Autoscaling了,顧名思義,使Pod水平自動縮放。

ReplicationController 和 ReplicaSet

示例:
在這裏插入圖片描述

# 查看Pod並顯示其標籤
kubectl  get pod  --show-labels 
# 更改指定Pod的標籤名稱
kubectl  label  pod   frontend-m8hpc  tier=newfrontend  --overwrite=True
# 刪除所有rs
kubectl  delete  rs  --all
# 刪除所有Pod
kubectl  delete  pod  --all

Deployment

在這裏插入圖片描述
在這裏插入圖片描述

# 創建一個Deployment
kubectl  apply  -f  deployment.yaml  --record
# 查詢Deployment
kubectl  get  deployment
# 查詢rs
kubectl  get  rs
# 查詢Pod
kubectl  get  pod
# 查詢Pod詳細信息
kubectl  get  pod  -o  wide

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

DaemonSet

在這裏插入圖片描述

Job

在這裏插入圖片描述

# 查看目標Pod當前創建進度
kubectl  describe  pod  pi-f2fb
# 查看當前全部任務
kubectl  get  job
# 查看kubectl的log
kubectl  log  pi-7mbjq

CronJob Spec

在這裏插入圖片描述
在這裏插入圖片描述

# 查看所有CronJob
kubectl  get  cronjob
# 刪除所有CronJob
kubectl  delete  cronjob  --all
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章