Part 1

雲端計算五大特徵

  1. On-demand self-service - 自助服務
  2. Broad network access - 無地點限制
  3. Resource pooling - 一堆的資源
  4. Rapid elasticity - 更多的彈性
  5. Measured service - 只花你想花費的

GCP 提供的服務

  1. Compute Engine
  2. GKE - 今天主題
  3. App Engine
  4. Cloud Run
  5. Cloud Functions

google 的資料代管服務

  1. Cloud Bigtable
  2. Cloud Storage
  3. Cloud SQL
  4. Cloud Spanner
  5. 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) 有啥差別

  1. Kubernetes is powerful, but managing the infrastructure is a full-time job

  2. 不過使用 GKE 的話,一些管理和設定,Google 會幫你搞定,或是改成 UI/UX 的方式,讓你好操作

Ps. GKE 就是代管版本的 K8S

Part 3

Container 輕量化的架構,來部署我們的程式

DockerFile 封裝 STEP

  1. 基底工具
  2. 安裝 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.