k8s主要控制器簡述(一)ReplicaSet與Deployment

目錄

一、ReplicaSet

關鍵特性

示例

解釋

支持的 Operator

二、Deployment

1. 聲明式更新

示例

2. 滾動更新

示例

3. 回滾

示例

4. ReplicaSet 管理

示例

5. 自動恢復

示例

6. 擴展和縮容

示例

示例


一、ReplicaSet

ReplicaSet 是 Kubernetes 中的一個核心控制器,用于確保指定數量的 Pod 副本始終處于運行狀態。它的主要職責是維護一組穩定的 Pod 副本,確保在任何時候都有指定數量的 Pod 在運行。ReplicaSet 是 Kubernetes 中實現 Pod 水平擴展的基礎組件之一。

關鍵特性
  1. 副本管理

    • ReplicaSet 的核心功能是確保指定數量的 Pod 副本始終在運行。你可以通過 replicas 字段指定期望的 Pod 副本數量。

    • 如果實際運行的 Pod 數量少于預期,ReplicaSet 會自動創建新的 Pod。

    • 如果實際運行的 Pod 數量多于預期,ReplicaSet 會自動刪除多余的 Pod。

  2. 標簽選擇器(Label Selector)

    • ReplicaSet 使用標簽選擇器來識別它管理的 Pod。只有那些與選擇器匹配的 Pod 才會被 ReplicaSet 管理。

    • 標簽選擇器可以是簡單的等值匹配(matchLabels),也可以是更復雜的集合匹配(matchExpressions)。

  3. Pod 模板

    • ReplicaSet 使用 Pod 模板來創建新的 Pod。Pod 模板定義了 Pod 的規格,包括容器鏡像、環境變量、卷等。

    • 當 ReplicaSet 需要創建新的 Pod 時,它會根據 Pod 模板生成新的 Pod 實例。

  4. 自動恢復

    • 如果某個 Pod 意外終止(例如,節點故障或手動刪除),ReplicaSet 會自動創建一個新的 Pod 來替換它,以確保 Pod 副本數量始終符合預期。

  5. 手動管理

    • ReplicaSet 通常不直接由用戶創建和管理,而是通過更高級的控制器(如 Deployment)來管理。用戶通常只需要與 Deployment 交互,Deployment 會自動創建和管理 ReplicaSet。

示例

以下是一個簡單的 ReplicaSet 定義示例:

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: my-replicaset
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx

在這個示例中:

  • replicas: 3 表示期望有 3 個 Pod 副本在運行。

  • selector 指定了 ReplicaSet 管理的 Pod 的標簽為 app: my-app

  • template 定義了 Pod 的規格,包括容器鏡像 nginx

以下是一個使用幾個匹配的ReplicaSet實例

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: my-replicaset
spec:replicas: 3selector:matchExpressions:- key: appoperator: Invalues:- my-app- my-backup-app- key: environmentoperator: NotInvalues:- productiontemplate:metadata:labels:app: my-appenvironment: stagingspec:containers:- name: my-containerimage: nginx

解釋

  1. selector.matchExpressions

  • 這是集合匹配的核心部分,允許你定義多個標簽選擇規則。
  • 每個規則由 keyoperatorvalues 組成。
  1. 規則 1:app 標簽
  • key: app:表示選擇標簽鍵為 app 的 Pod。
  • operator: In:表示標簽值必須在 values 列表中。
  • values: [my-app, my-backup-app]:表示選擇標簽值為 my-appmy-backup-app 的 Pod。
  1. 規則 2:environment 標簽

  • key: environment:表示選擇標簽鍵為 environment 的 Pod。
  • operator: NotIn:表示標簽值不能出現在 values 列表中。
  • values: [production]:表示排除標簽值為 production 的 Pod。
  1. 綜合效果

    • 這個 ReplicaSet 會選擇滿足以下條件的 Pod:

      • 標簽 app 的值為 my-appmy-backup-app

      • 標簽 environment 的值不為 production

  2. Pod 模板

    • template 部分,定義了新創建的 Pod 的標簽為 app: my-appenvironment: staging

    • 這些標簽滿足 ReplicaSet 的選擇條件,因此這些 Pod 會被 ReplicaSet 管理。

支持的 Operator

matchExpressions 中,operator 可以取以下值:

  • In:標簽值必須在 values 列表中。

  • NotIn:標簽值不能在 values 列表中。

  • Exists:標簽鍵必須存在(不需要指定 values)。

  • DoesNotExist:標簽鍵必須不存在(不需要指定 values)。

二、Deployment

Deployment 是 Kubernetes 中用于管理無狀態應用的高級控制器。它基于 ReplicaSet 實現,提供了聲明式更新、滾動更新和回滾等功能。Deployment 是 Kubernetes 中最常用的控制器之一,特別適用于需要頻繁更新和擴展的應用場景。

1. 聲明式更新

Deployment 允許你通過聲明式的方式更新應用。你只需要修改 Deployment 的 YAML 文件(例如更新鏡像版本),然后使用 kubectl apply 命令應用更改,Deployment 會自動處理更新過程。

示例

假設你有一個 Deployment,運行的是 nginx:1.18 鏡像。現在你想將鏡像更新為 nginx:1.19

Deployment 定義文件 (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: nginximage: nginx:1.18

更新步驟

  1. 修改 deployment.yaml 文件,將 image: nginx:1.18 改為 image: nginx:1.19

  2. 使用 kubectl apply 應用更新:

    kubectl apply -f deployment.yaml
  3. Deployment 會自動觸發更新流程,逐步替換舊的 Pod 為新的 Pod。


2. 滾動更新

Deployment 默認支持滾動更新策略,逐步替換舊的 Pod 副本為新的 Pod 副本,確保應用在更新過程中不會中斷。

示例

以下是一個配置了滾動更新策略的 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: nginximage: nginx:1.19strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1  # 更新過程中最多允許 1 個 Pod 不可用maxSurge: 1        # 更新過程中最多允許超出預期副本數 1 個 Pod

更新過程

  • Deployment 會先啟動一個新的 Pod,然后終止一個舊的 Pod,逐步替換所有 Pod。

  • 通過 maxUnavailablemaxSurge,你可以控制更新的速度和可用性。


3. 回滾

如果更新過程中出現問題,Deployment 允許你回滾到之前的版本。

示例

假設你更新了 Deployment,但新版本的應用有問題,需要回滾到上一個版本。

回滾步驟

  1. 查看 Deployment 的更新歷史:

    kubectl rollout history deployment/my-deployment

    輸出示例:

    REVISION  CHANGE-CAUSE
    1         <none>
    2         Update image to nginx:1.19

  2. 回滾到上一個版本:

    kubectl rollout undo deployment/my-deployment

  3. 回滾到指定版本(例如回滾到 Revision 1):

    kubectl rollout undo deployment/my-deployment --to-revision=1


4. ReplicaSet 管理

Deployment 通過創建和管理 ReplicaSet 來實現 Pod 的副本管理。每次更新 Pod 模板時,Deployment 都會創建一個新的 ReplicaSet,并逐步將舊的 ReplicaSet 縮容。

示例

假設你有一個 Deployment,初始版本使用 nginx:1.18 鏡像。

初始 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: nginximage: nginx:1.18

更新 Deployment
將鏡像更新為 nginx:1.19 后,Deployment 會創建一個新的 ReplicaSet,并逐步將舊的 ReplicaSet 縮容。

查看 ReplicaSet

kubectl get replicaset

輸出示例:

NAME                       DESIRED   CURRENT   READY   AGE
my-deployment-1234567890   3         3         3       5m   # 新的 ReplicaSet
my-deployment-9876543210   0         0         0       10m  # 舊的 ReplicaSet

5. 自動恢復

Deployment 會自動恢復意外終止的 Pod,以確保 Pod 副本數量始終符合預期。

示例

假設你有一個 Deployment,配置了 replicas: 3

手動刪除一個 Pod

kubectl delete pod <pod-name>

Deployment 的行為

  • Deployment 會檢測到 Pod 數量不足,并自動創建一個新的 Pod 來替換被刪除的 Pod。


6. 擴展和縮容

Deployment 支持動態擴展和縮容。你可以通過修改 replicas 字段來調整 Pod 的副本數量。

示例

假設你有一個 Deployment,初始副本數為 3。

擴展副本數

  1. 修改 deployment.yaml 文件,將 replicas: 3 改為 replicas: 5

  2. 應用更新:

    kubectl apply -f deployment.yaml
  3. Deployment 會自動創建 2 個新的 Pod。

縮容副本數

  1. 修改 deployment.yaml 文件,將 replicas: 5 改為 replicas: 2

  2. 應用更新:

    kubectl apply -f deployment.yaml
  3. Deployment 會自動刪除 3 個 Pod,只保留 2 個 Pod。

示例

以下是一個簡單的 Deployment 定義示例:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginxstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1maxSurge: 1

在這個示例中:

  • replicas: 3 表示期望有 3 個 Pod 副本在運行。

  • selector 指定了 Deployment 管理的 Pod 的標簽為 app: my-app

  • template 定義了 Pod 的規格,包括容器鏡像 nginx

  • strategy 配置了滾動更新策略,maxUnavailable: 1 表示在更新過程中最多允許 1 個 Pod 不可用,maxSurge: 1 表示在更新過程中最多允許超出預期副本數 1 個 Pod。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73874.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73874.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73874.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中redis操作整理

下載redis命令 pip install redis 連接redis import redis # host是redis主機&#xff0c;需要redis服務端和客戶端都起著 redis默認端口是6379 pool redis.ConnectionPool(hostlocalhost, port6379,decode_responsesTrue) r redis.Redis(connection_poolpool)操作字符串 …

自然語言處理入門4——RNN

一般來說&#xff0c;提到自然語言處理&#xff0c;我們都會涉及到循環神經網絡&#xff08;RNN&#xff09;&#xff0c;這是因為自然語言可以被看作是一個時間序列&#xff0c;這個時間序列中的元素是一個個的token。傳統的前饋神經網絡結構簡單&#xff0c;但是不能很好的處…

數據結構之鏈表(雙鏈表)

目錄 一、雙向帶頭循環鏈表 概念 二、哨兵位的頭節點 優點&#xff1a; 頭節點的初始化 三、帶頭雙向鏈表的實現 1.雙鏈表的銷毀 2.雙鏈表的打印 3.雙鏈表的尾插和頭插 尾插&#xff1a; 頭插&#xff1a; 4.雙鏈表的尾刪和頭刪 尾刪&#xff1a; 頭刪&#xff1a; …

ASP3605同步降壓調節器——滿足汽車電子嚴苛要求的電源芯片方案

ASP3605高效同步降壓調節器&#xff0c;通過AEC-Q100 Grade1認證&#xff0c;輸入電壓4V至15V&#xff0c;輸出電流5A&#xff0c;峰值效率94%。車規級型號ASP3605A3U支持-40C至125C工作溫度&#xff0c;適用于ADAS、車載信息娛樂系統等場景。 面向汽車電子的核心功能設計 1. …

vue3+Ts+elementPlus二次封裝Table分頁表格,表格內展示圖片、switch開關、支持

目錄 一.項目文件結構 二.實現代碼 1.子組件&#xff08;表格組件&#xff09; 2.父組件&#xff08;使用表格&#xff09; 一.項目文件結構 1.表格組件&#xff08;子組件&#xff09;位置 2.使用表格組件的頁面文件&#xff08;父組件&#xff09;位置 3.演示圖片位置 ele…

[特殊字符]1.2.1 新型基礎設施建設

&#x1f680; 新型基礎設施建設全解析 &#x1f31f; 核心概念與定義 維度詳細內容定義以新發展理念為引領&#xff0c;以技術創新為驅動&#xff0c;以信息網絡為基礎&#xff0c;提供數字轉型、智能升級、融合創新服務的基礎設施體系。提出背景2018年中央經濟工作會議首次提…

SQL Server數據庫慢SQL調優

SQL Server中慢SQL會顯著降低系統性能并引發級聯效應。首先&#xff0c;用戶直接體驗響應時間延長&#xff0c;核心業務操作&#xff08;如交易處理、報表生成&#xff09;效率下降&#xff0c;導致客戶滿意度降低甚至業務中斷。其次&#xff0c;資源利用率失衡&#xff0c;CPU…

【安全運營】安全運營關于告警降噪的一些梳理

目錄 前言一、智能技術層面1、機器學習和 AI 模型訓練2、攻擊成功判定 二、多源關聯分析1、多源設備關聯&#xff08;跨設備日志整合&#xff09;2、上下文信息增強 三、業務白名單和策略優化1、動態白名單機制2、閾值和規則調整 四、自動化和流程化1、告警歸并與去重2、同類型…

逆向中常見的加密算法識別

1、base64及換表 base64主要是將輸入的每3字節&#xff08;共24bit&#xff09;按照每六比特分成一組&#xff0c;變成4個小于64的索引值&#xff0c;然后通過一個索引表得到4個可見的字符。 索引表為一個64字節的字符串&#xff0c;如果在代碼中發現引用了這個索引表“ABCDEF…

《UNIX網絡編程卷1:套接字聯網API》第2章 傳輸層:TCP、UDP和SCTP

《UNIX網絡編程卷1&#xff1a;套接字聯網API》第2章 傳輸層&#xff1a;TCP、UDP和SCTP 2.1 傳輸層的核心作用與協議選型 傳輸層是網絡協議棧中承上啟下的核心層&#xff0c;直接決定應用的通信質量。其主要職責包括&#xff1a; 端到端通信&#xff1a;屏蔽底層網絡細節&am…

Eclipse 創建 Java 類

Eclipse 創建 Java 類 引言 Eclipse 是一款功能強大的集成開發環境(IDE),被廣泛用于 Java 開發。本文將詳細介紹如何在 Eclipse 中創建 Java 類,包括配置開發環境、創建新項目、添加類以及編寫類代碼等步驟。 配置 Eclipse 開發環境 1. 安裝 Eclipse 首先,您需要在您…

汽車安全確認等級-中國等保

1、概念解析 網絡安全保證等級&#xff08;Cybersecurity Assurance Level&#xff09;通常指在不同標準或框架下&#xff0c;根據系統或數據的敏感性、重要性以及潛在風險劃分的等級&#xff0c;用于指導組織采取相應的安全防護措施。以下是幾個常見的網絡安全保證等級體系及…

藍橋杯練習day2:執行操作后的變化量

題意 存在一種僅支持 4 種操作和 1 個變量 X 的編程語言&#xff1a; X 和 X 使變量 X 的值 加 1 –X 和 X-- 使變量 X 的值 減 1 最初&#xff0c;X 的值是 0 給你一個字符串數組 operations &#xff0c;這是由操作組成的一個列表&#xff0c;返回執行所有操作后&#xff…

【機器學習chp14 — 2】生成式模型—變分自編碼器VAE(超詳細分析,易于理解,推導嚴謹,一文就夠了)

目錄 二、變分自編碼器 VAE 1、自編碼器 AE &#xff08;1&#xff09;自編碼器的基本結構與目標 1.1 編碼器-解碼器結構 1.2 目標函數&#xff1a;重構誤差最小化 &#xff08;2&#xff09;自編碼器與 PCA 的對比 2.1 PCA 與線性降維 2.2 非線性映射的優勢 &#xf…

Linux 一步部署DHCP服務

#!/bin/bash #腳本作者和日期 #author: PEI #date: 20250319 #檢查root權限 if [ "$USER" ! "root" ]; then echo "錯誤&#xff1a;非root用戶&#xff0c;權限不足&#xff01;" exit 0 fi #防火墻與高級權限 systemctl stop firewa…

【RHCE】awk文本處理

目錄 基本介紹 命令格式 awk基本使用 命令行讀取程序腳本 數據字段變量 腳本中使用多個命令 文件中讀取程序 處理數據前運行腳本&#xff08;BEGIN&#xff09; 處理數據后運行腳本&#xff08;END&#xff09; awk高級用法 變量 內建變量 自定義變量 數組 定義…

Vue3 核心特性解析:Suspense 與 Teleport 原理深度剖析

Vue3 核心特性解析&#xff1a;Suspense 與 Teleport 原理深度剖析 一、Teleport&#xff1a;突破組件層級的時空傳送 1.1 實現原理圖解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

工業界處理 Atomic 操作的優化策略

在產業界&#xff0c;處理 atomic 操作 時&#xff0c;通常會根據具體情境選擇不同的策略&#xff0c;主要取決于以下三個因素&#xff1a; 內存一致性需求&#xff1a;是否需要確保 所有線程&#xff08;threads&#xff09; 都能看到最新的變量值。性能需求&#xff1a;是否…

Python功能完美的寶庫——內置的強大“武器庫”builtins

builtins模塊包含了Python大量的內置對象&#xff08;函數、異常和類型等&#xff09;&#xff0c;她是Python的內置武器庫&#xff0c;堪稱功能完美的寶庫。 筆記模板由python腳本于2025-03-19 08:16:27創建&#xff0c;本篇筆記適合喜歡探究python的coder翻閱。 【學習的細節…

三分鐘掌握視頻分辨率修改 | 在 Rust 中優雅地使用 FFmpeg

前言 在視頻處理領域&#xff0c;調整視頻分辨率是一個繞不過去的需求。比如&#xff0c;你可能需要將一段視頻適配到手機、平板或大屏電視上&#xff0c;或者為了節省存儲空間和網絡帶寬而壓縮視頻尺寸。然而&#xff0c;傳統的FFmpeg命令行工具雖然功能強大&#xff0c;但復…