2018年11月30日星期五

申請 Google Cloud Platform ( GCP ) 及示範 Kubernetes Engine

上一回【Docker 上的 Kubernetes

GCP_cover.png

上一回硬將 Docker-compose file 用落 K8s,而且是無法設定的 single node cluster 模式,還有煩人 database lock 問題未解決,用來開發還好,但用在 production 上,無法接受。

一邊看 GCP 有甚麼可以設定,一邊解說功能及使用方法,這次主要說 Kubernetes Engine。

流程︰
  1. 前期準備︰
    • 申請 GCP
    • 建立 Project
    • 設定帳單
    • 安裝 Google Cloud SDK 或使用 Google Cloud Shell

  2. 開始使用︰
    • 設定 project 及 zone
    • 建立及授權 cluster
    • deploy image 到 cluster
    • 測試結果

———————————簡易的分隔線————————————

申請 GCP︰


GCP_apply_1.png

首先建立或登入您的 Google 帳戶
https://javatoybox.blogspot.com/2017/05/GoogleACApply.html

申請 Google Cloud Platform 前,請確保信用卡。假如持有香港身份證,但不能申請信用卡 ( 如學生 ),有 Tab & Go ( 拍住賞 ) 這個選擇, 是 HKT Payment Limited 旗下公司,別用 TNG,是不同公司。

需要用 prepaid 版 Mastercard 這個功能,TNG 沒有這種服務。保險起見,卡裡最好有 $100 HKD ( Tab & Go 最少增值金額 )。

[以正視聽] TNG =/= Tap and Go
https://lihkg.com/thread/581723/page/1

Mastercard® 預付卡發卡機構
https://www.mastercard.com.hk/zn-hk/consumers/find-card-products/prepaid-cards/prepaid-card-issuers.html

GCP_apply_2.png

填上卡號等資料,按【開始免費試用】,手提電話會有訊息,說扣掉你 $1 USD,這會換算成 HKD 顯示,測試信用卡是否正確且能用。

GCP_apply_3.png

恭喜,成功踏出第一步!

———————————簡易的分隔線————————————

準備及設定  Kubernetes Engine︰


這一步屬於【歸類】動作,編組成 Project、cluster、帳單之類,方便日後資源調配,不用把散落一地的資源及設定,逐一搬弄,只需把標籤好的東西整串移動。

參考官方 Kubernetes Engine Quickstart,最後改裝成使用 Docker hub image 在 Kubernetes Engine 運行。

官方 Kubernetes Engine Quickstart
https://cloud.google.com/kubernetes-engine/docs/quickstart

建立 Project︰


GCP_start_1.png

首先建立 Project,與 Eclipse 概念一樣。

設定帳單︰


GCP_start_2.png

打開選單,設定預算。

GCP_start_3.png

設定預算,黃色高亮位置一定要設好!我要免費試,所以設定為 0 元。

———————————簡易的分隔線————————————

安裝 Google Cloud SDK 或使用 Google Cloud Shell︰


GCP_sdk_install_1.png

不用 Google Cloud SDK,選 Google Cloud Shell 也可以。大部份步驟跟官方 Quickstart 一樣。照官網指示做,完成安裝及嘗試 Deploy。

——————————— ( 補充資訊 start ) ————————————

免費方案限制︰



完美的錯誤示範!以下教學用了香港區伺服及沒有關掉負載平衡,所以不是免費用量。


只有伺服設在美國地區及流量不輸出至中國及澳洲才有額度免費!還有!
「一年免費」或「用過限額」即中止試用!




一律免費的用量限制
https://cloud.google.com/free/docs/always-free-usage-limits

試用中止條件
https://cloud.google.com/free/docs/gcp-free-tier?hl=zh-tw

關閉 HttpLoadBalancing︰



如果忘了在建立 Cluster 時取消勾選,可在 Google Could Shell 打以下 command 取消 LoadBalance。

gcloud container clusters update tomee-test --zone us-central1-a --update-addons=HttpLoadBalancing=DISABLED


gcloud reference
https://cloud.google.com/sdk/gcloud/reference/container/clusters/update#--update-addons

——————————— ( 補充資訊 end ) ————————————

設定 project 及 zone︰


設定 project︰


GKE_setting_1.png

本教學使用 Google Cloud Shell 作示範,看圖跟著做,應該沒問題,有時候還會自動幫你選好 Project,連下面 command 也可以省。

  • gcloud config set project [PROJECT_ID]

設定 compute/zone︰


需要留意 zone 那一部份,注意選用的 zone 有沒有支援特定産品,例如 Cloud Filestore 之類,還有 geographical compute zone,例如香港區的 asia-east2,入面還細分 ︰

  • asia-east2-a
  • asia-east2-b
  • asia-east2-c

如官方教學及本教學圖示,必須設定成 geographical compute zone  ( 如需要有限度免費,不要跟足本教學設定地區 ) 才建立 cluster,例如以下 command︰
  • gcloud config set compute/zone asia-east2-a

可以用以下 command 查詢名字︰

  • gcloud compute zones list

Cloud 服務據點
https://cloud.google.com/about/locations/?region=asia-pacific

———————————簡易的分隔線————————————

建立及授權 cluster︰


GKE_setting_2.png

沒有甚麼特別,只是在建立 cluster 需要點時間,請耐心等待,或用網頁介面建立 cluster,記得取消 LoadBalance 選項,要計費的!

  • gcloud container clusters create tomee-test
  • gcloud container clusters get-credentials tomee-test

———————————簡易的分隔線————————————

Deploy image 到 cluster︰


deploy image︰


GKE_setting_3.png

command 跟官方不一樣,這裡直接用 DockerHub 那邊 image 做 deploy。
格式是︰
  • kubectl run [SERVICE_NAME] --image [REGISTRY_URL]/[USER_NAME]/[IMAGE_NAME]:[TAG_NAME] --port [TARGET_PORT]
例子︰
  • kubectl run derby-tomee-server --image registry.hub.docker.com/integrityknight/tomee-derby:1.0.1 --port 8080

Docker-mirror.png

可以設定 mirror,利用 google 提升速度,之後就跟官方教學 command 一樣。

Using Container Registry's Docker Hub mirror
https://cloud.google.com/container-registry/docs/using-dockerhub-mirroring

提供服務︰


--type=LoadBalancer 版本︰ (  Load Balance 收費的!而且很貴! )



如上圖示,把服務對外開放。
  • kubectl expose deployment derby-tomee-server --type=LoadBalancer --port=80 --target-port=8080
Using a Service to Expose Your App
https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/#objectives

kubectl Command Reference
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#expose

--type=NodePort 版本︰( 做 Port following,不知怎對外開放 )



執行完以下 command,跟上圖指示做。這樣 Develop 還好,如果要做測試,我還沒攪到對外連線又不用 load balance 的方法。
  • kubectl expose deployment derby-tomee-server --type=NodePort --port=8080 --target-port=8080 --name=derby-tomee-service-demo
執行 command 記謹按 Enter,出現【When the next line says 'Forwarding from...'】才按 【在網頁中開啟】

———————————簡易的分隔線————————————

測試結果︰


GKE_setting_4.png

用以前例子修改成 GKE 應用 ( Port forwarding 版本 )
https://8080-dot-[xxxxxxxx]-dot-devshell.appspot.com/TomEE-JNDI-Derby-Example/datasource.jsp

JNDI + Derby + TomEE Plus 教學
https://javatoybox.blogspot.com/2018/09/jndi-derby-tomee-plus.html#result

———————————簡易的分隔線————————————

Clean Up︰


把測試完的資源打掃乾淨,請順序使用以下兩個 command。

刪除 deployment︰
  • kubectl delete service derby-tomee-server
刪除 cluster︰
  • gcloud container clusters delete tomee-test

———————————簡易的分隔線————————————

總結︰


沒有 Volume 吧?當然在 GCP 上做法不同,有機會再說,而且 K8s 的 yaml 是怎樣?怎解決 database 沒正確關閉問題?還有強大的 Rolling updates 及 Rollback 都沒學到……

學習 K8s 還有不少距離,才算得上會用。

沒有留言:

發佈留言

設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。