pod 公升級與回滾

2021-09-26 03:51:15 字數 3535 閱讀 9696

pod 公升級方式:

1、刪掉舊pod,在部署新pod.

2、建立新pod,通過修改service選擇器後刪除舊pod

3、滾動式公升級  rolling-update

4、使用deployment宣告方式公升級

前兩者不在詳述,都需要中斷業務。

kubectl 滾動式公升級:

實驗:定義kubia-v1 yaml 檔案建立pod 和service

apiversion: v1

kind: replicationcontroller

metadata:

name: kubia-v1

spec:

replicas: 3

template:

metadata:

name: kubia

lebels:

spec:

containers:

- images: luksa/kubia:v1

name: nodejs

---apiversion: v1

kind: service

metadata:

name: kubia-v1

spec:

type: loadbalancer

selector:

ports:

- port: 80 

targetport: 8080

使用 kubia-v2替換kubia-v1

kubectl  rolling-update  kubia-v1 kubia-v2 --image=luksa/kubia:v2 #執行替換命令.乙個新的rc會被建立,初始副本為0。

kubectl describe rc kubia-v2  #檢視kubia-v2的rc

隨著kubectl繼續滾動公升級,開始看到越來越多的請求被切換到v2 pod,v1的pod 不斷的被刪除。

rolling-update的方式公升級需要執行 kubectl 命令,如果在公升級過程中失去網路連線公升級程序會將中斷。 rolling-update是一種淘汰的公升級方式。

deployment 宣告式公升級

deployment用於部署應用程式並已宣告的方式公升級應用、而不是通過rc,rs進行部署。

使用deployment時,實際上pod是由deployment的replicaset建立和管理的,不是由deployment直接建立和管理。

deployment也是由標籤選擇器、期望副本數和pod模本組成,此外還包含乙個字段指定乙個部署策略,該策略定義在修改deployment資源時應該如何執行更新。

建立乙個deployment yaml 檔案

kind: deployment         #kind 名稱為deployment

metadata: 

name: kubia            #deployment名稱中不在需要版本號

spec:

replicas: 3

template:

metadata:

name: kubia

labels:

spec:

contaoners:

- image: luksa/kubia:v1

name: nodejs

kubectl  create -f  kubia-deployment.yaml --record #建立deployment, --record 引數會記錄歷史版本號。

可以同過kubectl get deployment 和 kubectl describe deployment 檢視詳細資訊。

kubectl rollout status deployment kubia  #檢視 kubia的部署狀態。

deployment 公升級策略:

1、滾動式公升級(rollingupdate)

2、recreate (逐漸刪除舊pod,逐漸建立新pod)

要觸發公升級,只需要修改deployment的yaml 檔案即可。

kubectl set image deployment kubia nodejs=lunksa/kubia:v2   #這條命名會將模板裡的映象修改為lunksa/kubia:v2 (新版本)修改完成後會開始滾動公升級。

修改deployment或者其他資源的不同方式:

方法作用

kubectl  edit 

使用預設編輯器開啟資源配置,修改儲存並退出編輯器

例: kubectl edit deployment  kubia

kubectl  patch 

修改單個資源屬性

例:kubectl patch deployment kubia -p 『]}}}

通過乙個完整的yaml或json 檔案,應用其中新的值來修改物件,如果yaml或json中指定的物件不存在,則會被建立。該檔案需要包含資源的完整定義,(不能像 kubectl patch 那樣只建立想要更新的字段)

kubectl replace 

kubectl replace -f  kubia-deployment-v2.yaml 

kubectl setimage

修改pod、rs、rc、 deployment 、demonset 、job內的映象

例:kubectl  set image  deploymen kubia nodejs=luksa/kubia:v2

回滾公升級:

kubectl  rollout undo deployment kubia  #回滾到上乙個版本

kubectl   rollout  history deployment kubia # 檢視kubia 歷史版本

kubectl rollout undo deployment kubia —to-revision=1 #回滾到指定版本

暫停滾動公升級:

如果想讓新版和舊版pod混合執行、看看新版pod執行是否正常則在執行公升級幾秒後在執行暫停公升級命令。

kubectl rollout pause deployment kubia

恢復滾動公升級:

確認了剛才新版沒有問題,可以繼續公升級替換所以舊版本pod,可以執行恢復公升級命令。

kubectl rollout resume deployment kubia 

取消出錯滾動公升級 :

kubectl describe deploy kubia # 檢視deployment的詳細情況。

如果出現progressdeadlineexceeded記錄,則表示完成滾動公升級時間太久。

可通過設定deployment  spec 中使用 progressdeadlineseconds來指定時間。

因為錯誤滾動公升級不能在繼續,所以執行下面命令取消公升級。

kubectl rollout undo deployment kubia

openssh公升級和回滾

公升級有很多教程,但是回滾沒有很詳細的教程,因為回滾操作很少操作,但是生產環境要有預案,雖然我的回滾解決辦法有點蠢,但是沒有時間去研究那摩多,當時,直接把有關原環境資訊cp備份,然後回滾的時候還原。親測可用!wget o openssh 8.4p1.tar.gz wget o zlib 1.2.11...

事務回滾與手動回滾

一般我們在開發時,在方法或者類上加了 transactional事務註解,然後會用 try catch 將可能會出問題的 塊包起來,在catch裡面處理捕獲的異常,但是,如果在catch裡面沒有把異常丟擲去,此時事務是不會自動回滾的 比如這種情況 這裡既沒有丟擲異常,也沒有手動回滾,在插入流水表之後...

NameNode節點的公升級 回滾 提交

我記得在前面已經以regular方式為例詳細的講述了有關namenode啟動的過程,在開始本文的重點之前,我覺得還是有必要在簡單的描述一下這個過程 好了,再回到本文將要闡述的重點吧 namenode節點的公升級 回滾 提交,這一步實際上只發生在上面過程的第一步 載入fsimage editlog。前...