mangreen / Some-Note

Development Memo
1 stars 0 forks source link

K8S #22

Open mangreen opened 5 years ago

mangreen commented 5 years ago

GKE

1. Login

$ gcloud auth revoke --all #logout
$ gcloud auth login #login

$ gcloud container clusters get-credentials my-gke-1 --zone <asia-east1-a> --project <proj-123456>
mangreen commented 2 years ago

Kubernetes 核心概念

https://www.gushiciku.cn/pl/pOmH/zh-hk

6 Levels 抽象

藍色部分是高層次的 K8s 抽象,綠色部分描述的是 Node 以及其中的 Node 子進程。 image image

1. Deployment

Deployment 運行的無狀態應用 創建和管理 ReplicaSet

2. ReplicaSet

ReplicaSet 會確保你的 APP 具有指定數量的 Pod。 ReplicaSet 根據 Deployment 中設定的指標來創建和擴展 Pod。

3. Pod

Pod 是 K8s 中的基本構建單元。 一個 Pod 中可以包含多個 Container,但通常是包含一個。 Pod 負責處理容器的數據卷、密鑰、配置。 Pod 的生命週期是不確定的,可能非常短暫,但 Pod 具有很強的再生能力,在死後可以自動重新啟動。 當 ReplicaSet 對 APP 進行水平擴展的時候,就會複製 Pod,每個 Pod 運行相同的容器代碼。 Pod 生存在 Worker Node 上

4. Node Cluster

K8s 羣集由 Master Node(主節點) 和 Worker Node(工作節點) 組成。 下圖是集羣結構描述圖,一個 Worker Node 中可以運行多個 Pod,Master 負責管理這些 Worker Node。 image

5. Node Process

Master 和 Worker Node 中都有子進程組件。

5.1. Master Node SubProcess

image

  1. API server:K8s 的 API 接口。
  2. etcd:分佈式 key-value 存儲,保存集羣的狀態數據。
  3. scheduler:為新的 Pod 選擇合適的 Node。
  4. kube-controller-manager:集羣的控制器,處理集羣的後台任務。
  5. cloud-controller-manager:與雲環境提供商交互的接口。

5.2. Worker Node SubProcess

image

  1. kubelet:負責管理 Node 上的一切事物,與 Master 的 API server 溝通,可以説是 Worker Node 的大腦。
  2. kube-proxy:把連接路由到正確的 Pod,負責負載均衡的工作,就像一個交通警察。
  3. Container Runtime:下載鏡像、運行容器,例如,Docker 就是一個 Container Runtime,所以為了方便記憶,我們可以把 Container Runtime 理解為就是 Docker。

6. Docker Container

如果要與K8s一起運行,則應用程序必須放在某種容器中。 Docker是最常見的容器平台。我們假設您正在使用它。 Docker =/= Container 在創建 Deployment 時,你會指定 Pod 應該使用哪個 Docker 鏡像。 K8s 不會直接創建容器,而是創建包含容器的 Pod。 Pod 中的容器共享一切已經配置好的資源,例如數據卷存儲。

總結

image

K8s 中的 7 個重要對象

image

1. ReplicaSet

2. StatefulSet

https://godleon.github.io/blog/Kubernetes/k8s-StatefulSets-Overview/

什麼時候需要使用 StatefulSet?

而到底如何研判某某 application 是否需要使用 StatefulSet 來佈署呢? 如果有符合以下條件,就需要使用 StatefulSet 來進行佈署:

  • 需要穩定 & 唯一的網路識別 (pod reschedule 後的 pod name & hostname 都不會變動)
  • 需要穩定的 persistent storage (pod reschedule 後還是能存取到相同的資料,基本上用 PVC 就可以解決)
  • 佈署 & scale out 的時後,每個 pod 的產生都是有其順序且逐一慢慢完成的
  • 進行更新操作時,也是與上面的需求相同

有什麼限制?

3. DaemonSet

4. Job

5. CronJob

6. Volume

7. Service

總結

image

mangreen commented 1 year ago

terminationGracePeriodSeconds

為什麼 EKS 在更新 Kubernetes deployment 時會有 HTTP 502 的 error(三)

preStop hook

根據 Kubernetes Pod Lifecycle [1],當 Pod 要被刪除時會由 kubelet 觸發 Container runtime 發出 SIGTERM signal 給每一個 Pod 內 container 的 process 1,倘若超出了 terminationGracePeriodSeconds 所設定時間(預設 30 秒),則會發出 SIGKILL signal 強制終止 process 而造成不預期的錯誤。若其中 Container 中定義使用了 preStop hook,kubelet 會執行完 preStop hook [2] 後才會發出 SIGTERM signal。

mangreen commented 1 year ago

Kubernetes 的 HPA 原理详解

https://zhuanlan.zhihu.com/p/245208287

mangreen commented 1 year ago

AWS EFS

Install

https://zhuanlan.zhihu.com/p/521519604

Help

Pods are getting stuck in ContainerCreating because of EFS CSI driver error