K8s概念總結
》》》Pod的生命周期階段
Pod的生命周期可以簡單描述:首先Pod被創建,緊接著Pod被調度到Node節點進行部署。
Pod是非常忠誠的,一旦被分配到Node節點后,就不會離開這個Node節點,直到它被刪除,刪除可能是人為刪除或者被RC(Replication Controller 舊版本)、RS(ReplicaSet新版本)刪除,也可能是當Pod進行Succeeded或Failed階段過期,被K8s 清理掉。總之Pod被刪除后,生命周期結束。即使被RS、RC 進行重建,也是新的Pod。
Pod的生命周期被定義為以下幾個階段
Pending:Pod已經被創建,但是一個或者多個容器還未創建,這包括Pod調度階段,以及容器鏡像下載階段
Running: Pod已經被調度到Node節點上,所有容器已經創建,并且至少一個容器在運行或者正在重啟
Succeeded:Pod中所有容器正常退出 就是Exit Code 為0
Failed: Pod中所有容器退出,至少有一個容器是非正常退出(Exit Code 非0 )
Pod被創建成功后,首先會進入Pending階段,然后被調度到Node后運行,進入Running階段。如果Pod中的容器停止(正常或者異常退出),那么Pod根據重啟策略的不同會進入不同的階段。
》》回調函數
# Pod活著才可能提供處理能力(提供服務),Pod死了,一定就不能提高處理能力,Pod活著不一樣就能提供處理能力
# liveness 存活性檢測 檢測Pod是否活著
# readiness 就緒性檢測 檢測Pod是否準備就緒提供處理能力
開始回調鉤子(postStart)里面有如下三種方式:
exec : 執行命令,執行的結果如果返回值不為0即為失敗(注:exec下面執行的命令,必須為當前容器內支持的命令)
tcpsocket :探測端口,探測的端口如果探測失敗即為失敗
httpget : 訪問鏈接 ,如果訪問鏈接狀態碼不為200即為失敗
。。。。。
# exec 方式
spec: containers: - image: nginx:1.17.1name: nginx-containerports: - name: "port-name"containerPort: 8080protocol: TCPlifecycle:postStart: # 主容器啟動后鉤子exec:command: - "/bin/sh"- "-c"- "touch /opt/lifecycle.txt"preStop: # 主容器終止前鉤子exec:command: - "/bin/sh"- "-c"- "cat /opt/lifecycle.txt"
以下列子是在主容器啟動后會去訪問鏈接http://192.x.1.x:8080/login,在主容器終止前去訪問鏈接http://192.x.1.x:8080/logout;
# httpget方式
spec: containers: - image: nginx:1.17.1name: nginx-containerports: - name: "port-name"containerPort: 8080protocol: TCPlifecycle:postStart: # 主容器啟動后鉤子httpGet: path: /login # Url地址port: 8080 # 端口host: 192.x.1.x # 默認pod的PodIPschema: HTTP # 支持的協議,http或httpspreStop: # 主容器終止前鉤子httpGet: path: /logout # Url地址port: 8080 # 端口host: 192.x.1.x # 主機地址schema: HTTP # 支持的協議,http或https 默認 http
以下列子是在主容器啟動后嘗試去連接8080端口,在主容器終止前去連接8081端口
# tcpsocket 方式
spec: containers: - image: nginx:1.17.1name: nginx-containerports: - name: "port-name"containerPort: 8080protocol: TCPlifecycle:postStart: # 主容器啟動后鉤子tcpSocket: port: 8080preStop: # 主容器終止前鉤子tcpSocket: port: 8081
Pod健康檢測
apiVersion: v1
kind: Pod
metadata:name: liveness-exec-podlabels:test: liveness
spec:containers:- name: livenessimage: nginx:latest# 定義健康檢查探針livenessProbe:httpGet: # 指定探針的檢測方法為httpGet。path: /index.html # 指定訪問的文件路徑信息即可,無需指定IP地址,因為默認就是訪問本機,可以理解為127.0.0.1。port: 800 # 指定對容器的哪個端口發送GET請求。 因Nginx 默認是 80端口,如800也就是不成功,會重啟pod。如果80,則就正常initialDelaySeconds: 15# 指定每次周期的健康檢查的間隔時間。periodSeconds: 5timeoutSeconds: 1successThreshold: 1failureThreshold: 3