# GKE Class [上課資源](https://www.notion.so/VSOP-Architecting-with-Google-Kubernetes-Part-II-0a44fc04dfe045ab815f23cedf03172c) ## 課程大綱 @Brave 第一天的圖貼一下哈哈 QQ ## DAY1 ### Docker介紹 * container優點 * 映像檔小 * 啟動快 * 版本一致 * 架構 * 資源隔離 * 不共用函式庫 * 低開銷 ![](https://i.imgur.com/5QZI63R.png) ![](https://i.imgur.com/1rmKt0f.png) * 容器資源限制 * Requests 最小 * Limits 最大 ### Lab實作 docker 基本操作 ### K8S ![](https://i.imgur.com/wZgmvYV.png) ### GKE ![](https://i.imgur.com/1y26oOA.png) * auto scale 可以設定要幾台pool * Workload > Deploye 部署 ![](https://i.imgur.com/lfUuuA5.png) ![](https://i.imgur.com/wPdmJLO.png) 能夠建立pod之間互通的路由表 #### Pod * 結構 * 包 container(s) * Label * 寫在metadata中 * deployment > Selectors > Services 選擇出相同屬性的Pod出成一個服務 #### 服務 ![](https://i.imgur.com/qzllpok.png) 1. image 2. VM 3. pod 4. deployment : 能夠產生多個pod出來,有replicas的保護,會維持pod的數量 5. service(包含selector) : selector按照label選取需要的服務 #### Ingress(L7 service) ![](https://i.imgur.com/2J03hg5.png) ### Yaml * 必寫四項 * apiVersion * kind * metadata * spec * kuvectl apply/create -f deployment.yaml ### Namespace Pod 在同個namespace才能做溝通,即使在一樣的cluster、node中 ![](https://i.imgur.com/JjyObg5.png) ### Health Check 每隔一段時間去檢查pod的健康狀態,如定期http請求檢查回傳是否正常(200~400) ### Port-forward ## Component ![](https://i.imgur.com/GhtMYwv.png) ### volume 1. emptyDir - Pod中令container間共享資料,生命週期與Pod一致 2. hostPath - 掛載Node的本機目錄中,生命週期與Node相同 3. PV(C) - 外部(及雲端)存儲空間令Pod間共享資料 ![](https://i.imgur.com/XW6la24.png) ### configMap 1. 設定檔參數以key-value方式儲存其中 2. 結合volume掛入pod 3. 設為環境變數 ### Secret 將機敏資料封裝於secret中,配合volume以暫態tmpfs加載 ## DAY2 ### 網路 ![](https://i.imgur.com/qPq92vZ.png) #### Private Cluster ![](https://i.imgur.com/8TVXWpU.png) M為master node,其餘為worker node zonal:放在單一機房 multi-zone:分佈在不同機房 regional:分佈在不同機房,並且個機房皆有master node ![](https://i.imgur.com/EeNOq8P.jpg) #### DNS #### Service ![](https://i.imgur.com/aBRRmyi.png) ![](https://i.imgur.com/tZgqNNC.png) #### Ingress 導流不同的external ip與網域組合 ![](https://i.imgur.com/Sx9xXhv.png) services -> ingress -> LoadBalancer ![](https://i.imgur.com/j9gMMex.png) #### LoadBalancer 唯一external ip ![](https://i.imgur.com/kLk31F3.png) ##### HTTPS憑證 1. gcp ingress 憑證(不支援sub-domain) 2. k8s secret 3. 自訂 ### NEG ![](https://i.imgur.com/x6bpv8e.png) ### 部署策略 ![](https://i.imgur.com/SyZkgV9.png) #### 版本更新 1. Rolling Update ![](https://i.imgur.com/JjxIgzz.png) ![](https://i.imgur.com/mjEj68a.png) 2. Recreate 換標籤,一次全上 - Blue/Green Strategy 4. Canary testing - 分配loadbalancer造訪 %數慢慢升版 - ![](https://i.imgur.com/R28XoDO.png) ### CI/CD ![](https://i.imgur.com/x94xOui.png) Role設定 ### Service Mesh ![](https://i.imgur.com/C6Ys45K.png) <br> ![](https://i.imgur.com/lDwd93d.png) ![](https://i.imgur.com/yofwTIY.png) 1. 授權管理 2. 觀測流量 3. 延遲控制 #### Istio 有額外三個yaml檔案,主要以lable和gateway溝通 1. Ingress GateWay 2. Virtual Service 3. Destination Rule