Kubernetes Deployment 之擴縮容與滾動更新

Kubernetes Deployment 之擴縮容與滾動更新

Deployment 擴縮容

擴縮容非常簡單,我們可以直接調整 replica 副本數目,然后 kubectl apply指定進行動態更新。下面將nginx-deployment動態改為 1 個 Pod 和 3 個 Pod 的操作

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nginxnamespace: defaultlabels:app: deployment-nginx
spec:replicas: 2 # 將此處動態改為 1 或者 3selector:matchLabels:app: pod-nginxtemplate:metadata:labels:app: pod-nginxspec:containers:- name: nginximage: docker.io/k8s-test:v1.0imagePullPolicy: IfNotPresentports:- containerPort: 80
root@k8s-master1:~# kubectl apply -f deploy-nginx.yaml
deployment.apps/deployment-nginx configured
root@k8s-master1:~# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
deployment-nginx   1/1     1            1           17h
root@k8s-master1:~# kubectl apply -f deploy-nginx.yaml
deployment.apps/deployment-nginx configured
root@k8s-master1:~# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
deployment-nginx   3/3     3            3           17h# 它也會識別原來的 Pod 有沒有被更新,如果沒有被更新,它仍然會繼續被保留運行
root@k8s-master1:~# kubectl get pods -owide
NAME                                READY   STATUS    RESTARTS      AGE   IP               NODE          NOMINATED NODE   READINESS GATES
deployment-nginx-6977747dd9-knx9r   1/1     Running   0             31s   10.244.194.126   k8s-worker1   <none>           <none>
deployment-nginx-6977747dd9-nqxgd   1/1     Running   0             31s   10.244.194.125   k8s-worker1   <none>           <none>
deployment-nginx-6977747dd9-sz42q   1/1     Running   1 (34m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>

Deployment 滾動更新策略

Deployment 更新策略分為兩種,分別為RecreateRollingUpdateRecreate是將所有 Pod 全部殺死,然后啟動新版本,這是一個極其危險的行為,幾乎不被使用。滾動更新是指,新增一定數量的 Pod 后,再殺死一定的數量的 Pod。Deployment 默認使用滾動更新策略。

實現滾動更新需要設置MaxSurge最大 Pod 新增數量和MaxUnavailable最大 Pod 不可用數據數目。它們可以設置成整數或者百分比,且兩者不能同時為0,不然無法根本更新。以副本數 3 為例,如果我們 MaxSurge設置為 10%,那么我們新增個數為 0.3,這里需要向上取整,即個數為1;同理我們 MaxUnavailable設置為 10%,這里我們允許不可用的個數也為 0.3,這里要向下取整為 0;最終我們的更新策略是要等到 4 個 Pod 完全在運行狀態,滾動更新才回去殺死 1 個老 Pod。

Deployment 滾動更新使用

  1. 我們先將 k8s-test:v1.0 鏡像標記為 k8s-test:v1.1

    root@k8s-worker1:~# ctr -n k8s.io image tag docker.io/library/k8s-test:v1.0 docker.io/library/k8s-test:v1.1
    docker.io/library/k8s-test:v1.1
    root@k8s-worker2:~# ctr -n k8s.io image tag docker.io/library/k8s-test:v1.0 docker.io/library/k8s-test:v1.1
    docker.io/library/k8s-test:v1.1
    
  2. 修改 yaml鏡像版本號和更新策略

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: deployment-nginxnamespace: defaultlabels:app: deployment-nginx
    spec:strategy:rollingUpdate:maxSurge: 10%maxUnavailable: 10%replicas: 2selector:matchLabels:app: pod-nginxtemplate:metadata:labels:app: pod-nginxspec:containers:- name: nginximage: docker.io/k8s-test:v1.1imagePullPolicy: IfNotPresentports:- containerPort: 80
    
  3. 執行如下指令開啟 Pods 監聽

    kubectl get pods -owide -w
    
  4. 更新過程如下,舊的 Pod 會先被標記,但不是真的被終止

    root@k8s-master1:~# kubectl get pods -owide -w
    NAME                                READY   STATUS    RESTARTS      AGE   IP               NODE          NOMINATED NODE   READINESS GATES
    deployment-nginx-6977747dd9-knx9r   1/1     Running   0             30m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   1/1     Running   0             30m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   1/1     Running   1 (63m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   1/1     Terminating   0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     Pending       0             0s    <none>           <none>        <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     Pending       0             0s    <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     ContainerCreating   0             0s    <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   1/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     ContainerCreating   0             0s    <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   1/1     Running             0             1s    10.244.126.26    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   1/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     Pending             0             0s    <none>           <none>        <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     Pending             0             0s    <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     ContainerCreating   0             0s    <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   1/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     ContainerCreating   0             0s    <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   1/1     Running             0             1s    10.244.194.127   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   1/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   1/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    
  5. 查看更新后的結果

    root@k8s-master1:~# kubectl get pods -owide
    NAME                                READY   STATUS    RESTARTS   AGE     IP               NODE          NOMINATED NODE   READINESS GATES
    deployment-nginx-6c94d644bd-ft9s6   1/1     Running   0          4m55s   10.244.126.26    k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   1/1     Running   0          4m54s   10.244.194.127   k8s-worker1   <none>           <none>
    root@k8s-master1:~# kubectl get deploy
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment-nginx   2/2     2            2           17h
    root@k8s-master1:~# kubectl get rs
    NAME                          DESIRED   CURRENT   READY   AGE
    deployment-nginx-6977747dd9   0         0         0       17h
    deployment-nginx-6c94d644bd   2         2         2       6m1s
    

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

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

相關文章

20232820 2023-2024-2 《網絡攻防實踐》實踐十一報告

20232820 2023-2024-2 《網絡攻防實踐》實踐十一報告 1.實踐內容 web瀏覽器滲透攻擊 任務&#xff1a;使用攻擊機和Windows靶機進行瀏覽器滲透攻擊實驗&#xff0c;體驗網頁木馬構造及實施瀏覽器攻擊的實際過程 取證分析實踐—網頁木馬攻擊場景分析 攻防對抗實踐—web瀏覽…

非關系型數據庫NOSQL

文章目錄 1. NOSQL 概述2. 相關理論基礎2.1 一致性2.2 分區2.3 存儲分布2.4 查詢模型 3. NOSQL 數據庫的種類3.1 文檔存儲3.2 鍵值存儲3.3 列存儲3.3 圖存儲 4. NOSQL 應用案例和新技術4.1 HBase 數據庫4.2 云數據庫 GeminiDB 非關系型的數據庫 NOSQL (Not Only SQL)是對不同于…

linux-x86_64-musl 里面的musl是什么意思?

在一些開源庫里面可以看到&#xff0c;linux-x86_64-musl類似于這樣的字符串&#xff0c;這個musl是什么意思呢&#xff1f; 在字符串 "linux-x86_64-musl" 中&#xff0c;musl 指的是 musl libc&#xff0c;這是一個輕量級的 C 標準庫實現。 讓我們來拆解一下這個字…

Linux系統(ubuntu)掛載jffs2文件系統

一. 掛載操作 1、加載mtdram模塊&#xff1a; sudo modprobe mtdram total_size16384//total_size后面跟的參數單位是KB&#xff0c;并且其大小要大于jffs2鏡像文件的大小 2、sudo modprobe mtd 3、sudo modprobe mtdblock 4、sudo modprobe jffs2 5、拷貝jffs2鏡像文件到/dev…

Unity性能優化工具介紹

文章目錄 一.Stats組件1.Audio音頻的數據組件:2.圖形數據 二.Profiler 性能分析器 一.Stats組件 Unity自帶Statistics(統計數據),Game視窗中點擊Stats打開 1.Audio音頻的數據組件: 1):Level 聲音強度 單位是分貝(dB) 表示音頻聽聲音的大小,是閃爍波動的. 2):SDPload 數據信…

閱讀筆記——《AFLNeTrans:狀態間關系感知的網絡協議模糊測試》

【參考文獻】洪玄泉,賈鵬,劉嘉勇.AFLNeTrans&#xff1a;狀態間關系感知的網絡協議模糊測試[J].信息網絡安全,2024,24(01):121-132.【注】本文僅為作者個人學習筆記&#xff0c;如有冒犯&#xff0c;請聯系作者刪除。 目錄 摘要 1、引言 2、背景及動機 2.1、網絡協議實現程…

每日AIGC最新進展(9):定制化多主題文本到視頻的生成、3D動漫角色生成、具有多種幾何形狀和紋理細節的3D高斯引導服裝合成

Diffusion Models專欄文章匯總:入門與實戰 DisenStudio: Customized Multi-subject Text-to-Video Generation with Disentangled Spatial Control 本文提出了一個名為DisenStudio的框架,用于定制化多主題文本到視頻的生成。該框架旨在解決現有文本到視頻生成模型在處理多主題…

UE5文件操作

首先在虛幻引擎中創建UMyBlueprintFunctionLibrary類&#xff0c;可以在該類中寫我們重復利用的功能&#xff0c;并且這些功能不依賴于特定的游戲對象&#xff0c;方便全局調用。 1.文件的讀取和寫入 UFUNCTION(BlueprintCallable, Category "File")static bool lo…

C++小病毒

C小病毒&#xff08;注&#xff1a;對電腦無過大傷害&#xff09; 短短行&#xff0c;創造奇跡&#xff01; 把這個文件命名為virus.exe就可以使用了。 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {HWND hwnd GetForegroundW…

Unity射擊游戲開發教程:(24)創造不同的敵人

在這篇文章中,我們將討論添加一個可以承受多次攻擊的新敵人和一些動畫來使事情變得栩栩如生。敵人沒有任何移動或射擊行為。這將有助于增強未來敵人的力量。 我們將聲明一個 int 來存儲敵人可以承受的攻擊數量,并將其設置為 3。

PDF24 Creator v11.12.1軟件安裝教程(附軟件下載地址)

軟件簡介&#xff1a; 軟件【下載地址】獲取方式見文末。注&#xff1a;推薦使用&#xff0c;更貼合此安裝方法&#xff01; PDF24 Creator v11.12.1是一款免費、簡便實用的多功能 PDF 工具。用戶可通過直觀拖放界面輕松組合、編輯和處理PDF文件。功能包括合并、分割、添加、…

C# 觀察者模式實現

代碼&#xff1a; using System; using System.Collections.Generic;public delegate void NotificationObserverCallback(object obj);public class NotificationObserver {public NotificationObserverCallback Selector null;public string KeyName ""; }public…

Java開發工具類(JDK、Hutool、Guava)

目錄 Java開發常用的工具類1、JDK自帶程序讀取控制臺輸入內容&#xff08;調試程序或者學習的時候比較有用&#xff09;Arrays工具類 數組轉集合Collections 集合工具類 排序Collections 集合工具類 查找Lambda表達式 操作集合 收集、轉map、分組 2、Apache 的 commons-lang3 和…

一文解讀:OA中會議管理功能,幫助設計師看清楚門道

會議管理是OA系統中的重要功能之一&#xff0c;它涉及到會議的組織、安排、記錄和跟進等方面。本文將從以下四個方面介紹會議管理在OA系統中的功能、流程、設計注意事項和所涉界面。 一、OA中會議管理的功能 OA中常用的會議功能如下&#xff1a; 會議預約&#xff1a;OA系統提…

RedisTemplate操作Redis, 看這一篇文章就夠了

文章目錄 1. String 命令1.1 添加緩存1.2 設置過期時間(單獨設置)1.3 獲取緩存值1.4 刪除key1.5 順序遞增1.6 順序遞減1.7 常用的 2. Hash命令2.1 添加緩存2.2 設置過期時間(單獨設置)2.3 添加一個Map集合2.4 提取所有的小key2.5 提取所有的value值2.6 根據key提取value值2.7 獲…

x的平方根-力扣

本題想到使用二分法不斷逼近一個區間&#xff0c;直到最后趨近于x&#xff0c;從而求得解。注意的點&#xff0c;一開始使用 if(mid * mid < x) 進行判斷時&#xff0c;會出現越界&#xff0c;原因是輸入一個很大的數是&#xff0c;超過int表示的范圍&#xff0c;繼而修改為…

1812 java二手汽車銷售管理系統Myeclipse開發mysql數據庫web結構java編程計算機網頁項目

一、源碼特點 jsp 二手汽車銷售管理系統 是一套完善的web設計系統&#xff0c;對理解JSP java編程開發語言有幫助采用了java設計&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統采用web模式&#xff0c;系統主要采用B/S模式 開發。開發環境為TOMCAT7.0,Myeclipse8…

【優選算法】模擬 {經驗總結;相關編程題解析}

一、經驗總結 模擬題型的算法原理相對簡單&#xff0c;就是依葫蘆畫瓢&#xff1a;題目中怎樣描述&#xff0c;算法就怎樣執行。考驗的主要是將實際問題轉換為代碼的能力。 但是模擬題型并不是只能傻乎乎的按步驟編碼&#xff0c;也可以先將模擬算法的流程通過舉例或繪圖演示…

Excel插入多行VBA實現

我們還可以利用 VBA&#xff08;Visual Basic for Applications&#xff09;宏語言&#xff0c;在 Excel 中寫一個 VBA 宏來自動插入多行數據。這種方法可以方便我們自定義需要插入的行數和插入位置。下面是編寫 VBA 宏的步驟&#xff1a; 1、按下Alt F11快捷鍵&#xff0c;打…

react之Effect同步

第四章 - 脫圍機制 使用 Effect 同步 有些組件需要與外部系統同步。例如&#xff0c;你可能希望根據 React state 控制非 React 組件、設置服務器連接或在組件出現在屏幕上時發送分析日志。Effects 會在渲染后運行一些代碼&#xff0c;以便可以將組件與 React 之外的某些系統…