GoTech 雲端練功坊:GKE 航向未來,建立強大的基礎容器設施
Google Kubernetes Engine
Part 1
雲端計算五大特徵
- On-demand self-service - 自助服務
- Broad network access - 無地點限制
- Resource pooling - 一堆的資源
- Rapid elasticity - 更多的彈性
- Measured service - 只花你想花費的
GCP 提供的服務
- Compute Engine
- GKE - 今天主題
- App Engine
- Cloud Run
- Cloud Functions
google 的資料代管服務
- Cloud Bigtable
- Cloud Storage
- Cloud SQL
- Cloud Spanner
- Firestore
GCP 的機房存在哪裡
Region
asia-East-1 : 台灣 asia-East-2 : 大阪 …等等
zone
一個區域裡面的不同機台 asia-East-1-a - 台灣的第一台機台 asia-East-1-b - 台灣的第二台機台 …等等
Multi-region
防止今天某個機台壞掉,一次存在兩個不同區域的機台
專案架構層級
Organization
Department A Department B
Team1 Team2
Store Front Test project Production
GKE Cloud Storage Bucket Compute Engine Instance App Engine Service
- 專案ID - 此 ID 是獨一無二的
Quotas limits
GKE 有設定需求保護,避免帳單爆炸,不過需求數量是可以調整的
Rate quota
GKE API: 3,000 requests per min
Allocation quota
15 networks per project
Many quotas are changeable
Part 2
以前的年代在部署的時候,我們是直接部署在實體的機房內,機房內會有一大堆要設定的東西,這樣非常的沒效率
又或者一種情況,不同的應用程式,裝在一台 VM 上,不過這會遇到一些問題。像是,兩個應用程式不同的 dependency
所以又進化到,所以今天有2個應用程式,我們開了2個VM,但是如果有100套應用程式,需要開100套應用程式,這樣又會覺得這樣好麻煩
容器化的好處,把多個應用程式做好隔離環境,而且少掉了OS,也少掉了很多的容量,因此又可以輕量化
程式碼打包成容器會有一個流程,這個流程不是固定的,會把一個 Dockerfile 檔案打包成一個 image 檔,根據 Dockerfile 檔案的內容打包成不同的 image
docker build 後,會先丟到引擎中(不一定在你的電腦中運行),最後再跟據 docker 檔案建立 image
Kubernetes 是啥
他可以一次幫你管理多個 Container,大型的 Container 管理工具
什麼時候會用到 Kubernetes
當你的 Container 多到不想管,想自動運行的時候,就可以使用 Kubernetes
原生 Kubernetes (K8s) 和 Google Kubernetes (GKE) 有啥差別
-
Kubernetes is powerful, but managing the infrastructure is a full-time job
-
不過使用 GKE 的話,一些管理和設定,Google 會幫你搞定,或是改成 UI/UX 的方式,讓你好操作
Ps. GKE 就是代管版本的 K8S
Part 3
Container 輕量化的架構,來部署我們的程式
DockerFile 封裝 STEP
- 基底工具
- 安裝 Dependency
把我們的 Container image 上傳到雲端上
Kubernetes Architecture
我們是如何將 Container 部署在 Kubernetes 上面呢?
Kubernetes objects
Persistent entities representing the state of the cluster
Object spec
Desired state described by us
Object status
Current state described by Kubernetes
我們在 GKE 中,POD 是一個最小的單位,每一個 POD 可以共享一個 container,每一個 POD 有自己內網的 IP
- 一個 POD 裡面會有多個 Container,那我要怎麼放呢
- POD 的使用方式是,一個 POD 裡面會有數個 Container,但是架構是一個主義用程式(線上商店)、多個附屬程式(計算 LOG、database),而不是三個不同的主應用程式(3個不同的線上商店)
POD
Shared networking
Container Container Container
Shared storage
kube- APIserver
- 所有的元件都要跟 kube API 溝通
etcd kube- scheduler kube- controller- manager - Kubernetes的大腦 可以指定有幾個 POD 持續執行,如果今天有某個 node 被刪掉,這個東西會恢復剛剛被刪掉的 POD
kube- cloud- manager -
Node Kubelet - 跟 kube- API 溝通,Kubelet收到指令後,會叫 POD 啟動,啟動後,會回報狀態給 kube- API
Kube-proxy - 有關網路連接
Google Kubernetes Engine Concepts
剛剛上面 k8s 的元件(Control plane),google 都幫你設定好了,
More about nodes for GKE Standard mode
X Kubernetes doesn’t create nodes.
Cluster admins create nodes and add them to Kubernetes.
O GKE manages this by deploying and registering Compute Engine instances as nodes.
GKE Standard mode uses node pools to manage different kinds of nodes
我們在建置 GKE 的 NODE 時,我們可以把相似的 NODE,全部整合成一個 NODE POOL
- GKE 上,一個 NODE 就等於一個 VM
Object Management
how to deploy a pod
$ kubectl run jason --image=nginx
一個環境底下,不會有兩個同名的 POD
Labels can be matched by label selectors
apiVersion: -
There are three initial namespaces in a cluster
Node Node Node
Default
Part 4
The kubectl command
kubectl must be configured first
● Relies on a config file: $HOME/.kube/config. ● Config file contains: ○ Target cluster name ○ Credentials for the cluster ● Current config: kubectl config view. ● Sign in to a Pod interactively.
The kubectl command has many uses
● Create Kubernetes objects ● View objects ● Delete objects ● View and export configurations
POD AutoScale
POD 水平擴展(HPA) - k8s原生就有的功能, POD 垂直擴展(VPA) -
怎麼選擇這兩個,這邊有寫 https://cloud.google.com/architecture/best-practices-for-running-cost-effective-kubernetes-applications-on-gke#vertical_pod_autoscaler
how deployment work
Part 5 Pod Networking
Part 6 Volumes
Volumes
Ephemeral volume types explained
emptyDir: Ephemeral: shares Pod’s lifecycle. ConfigMap: Object can be referenced in a volume. Secret: Stores sensitive info, such as passwords. downwardAPI: Makes data about Pods data available to containers.