一、基本觀念
1. Project
- Project 是 GCP 的計費項目,需要綁定一個 Billing Account (可能是個人信用卡或公司帳號),所有資源會掛在 Project 下,並依使用量計費,從 Billing Account 扣除。
- Billing 可以開許多個,如下,進入 Billing 功能,按【CREATE ACCOUNT】即可增加,目前我已經有一個命名為 POC 的 Billing Account。
- 每個帳號可以開許多 Project,方便管理一個組織中各個不同的工作、組織成員,建立 Project 時,即會選擇要綁定到那一個 Billing Account。
- GCP 的資源結構如下,由一個組織,下面可以分 folder,folder 下再分 Project,然後就如上面所說,資源會掛到 Project 下。
在 GCP Console 中的「Manage resource」功能中,可以管理 Project。
2. Cloud Shell
GCP Console 是 GUI 管理介面,Cloud Shell 是命令列管理介面。
開啟 Cloud Shell 的方式,很簡單,按下 GCP Console 的右上角紅色框起來的按鍵即可,開啟後會出現在下面,如綠框所示。
Cloud Shell 是基於 GCE (Google Compute Engine) 的 VM,這個 VM 的 OS 是 Debian,內附 5 GB 的儲存空間,足夠供管理者安裝一些必要的功具軟體,預設已經安裝好 Google Cloud SDK。
Google Cloud SDK 包含 gcloud、gsutil、kubectl、bq 等命令列指令,SDK 也可以安裝在 VM 或任何電腦上,OS 支援 Windows、Linux、Mac,Cloud SDK 本身是免費的,當然如果是安裝在 GCP 上的 VM,VM 會產生費用,安裝在自己的電腦,用來管理公有雲上的資源也是可以,這樣就不會有費用。
二、gcloud 命令
1. activate Cloud Shell
- gcloud auth list
列出有效的帳號名稱,如下,目前僅一個有效的帳號,可以同時登入多個,並透過gcloud config set account …
切換帳號。 - gcloud config list project
列出 project ID,如下所示。
2. Configuration your environment
- gcloud config get-value compute/region
如下,可以看到一開始沒有設定預設的 region、zone,因此透過 gcloud config set compute/region asia-east1-b 將預計的 region、zone 設定在台灣彰濱機房的 zone b。 - gcloud config set compute/zone
重新下指令查詢,可以看到 region 已經設定,但是 zone 沒有! 也就是說 set compute/region 真的只設定了 region 卻沒有設定 zone,透過 gcloud config set compute/zone asia-east1-b 才設定好 zone。
3. Finding project information
- gcloud config get-value project
查出目前正在使用的 project。 - gcloud compute project-info describe --project $(gcloud config get-value project)
上面指令 --project 後面的參數是 project id,可以查出這個 project 的詳細設定。
4. Setting environment variables
- export PROJECT_ID=$(gcloud config get-value project)
設定環境變數 PROJECT_ID 為目前 project 的 id。 - export ZONE=$(gcloud config get-value compute/zone)
設定環境變數 ZONE 為目前系統所在的 available zone。 - echo -e "PROJECT ID: $PROJECT_ID\nZONE: $ZONE"
用 echo 指令顯示出上述兩個環境變數,確認值是正確的。
5. Creating a virtual machine with the gcloud tool
gcloud compute instances create gcelab2 --machine-type e2-medium --zone $ZONE
在 $ZONE ( asia-east1-b ) 建立一個新的 VM,命名為 gcelab2,VM 型別為 e2-medium。用 GCP Console 查看,確實有建立出來,如下:
gcloud compute instances create --help
這個指令可以顯示出說明文件,查看有那些參數可以用。
6. Exploring gcloud commands
- gcloud -h
-h 參數,可以顯示出如下的命令說明文件。 - gcloud config --help or gcloud help config
這兩個命令是等價的,都顯示出 gcloud config 的命令說明文件。 - gcloud config list
列出目前環境裡的所有 gcloud 設定。 - gcloud config list --all
這個指令和上一個指令最大差別的,沒有設定值的也會被列出來,可以看出來有那些值可以設定。 - gcloud components list
這個指令會列出已安裝的所有 component - gcloud components install COMPONENT_ID
- gcloud components remove COMPONENT_ID
上面兩個指令可以安裝、移除 component
7. Filtering command-line output
- gcloud compute instances list
列出目前 project 中的所有 VM,目前只有剛剛建立的 gcelab2 這個 VM。 - gcloud compute instances list --filter="name=('gcelab2')"
如果 project 中 VM 很多,可以加上過濾條件,上面指令的過濾條件是 name。 - gcloud compute firewall-rules list
列出 project 中的所有防火牆規則,會非常多,通常會加上過濾條件。 - gcloud compute firewall-rules list --filter="ALLOW:'icmp'"
8. Connecting to your VM instance
- gcloud compute ssh gcelab2 --zone $ZONE
ssh 到剛剛建立的 VM,當目前的 zone 和要連入的 VM 所處的 zone 不同,才需要指定 zone。 - sudo apt install -y nginx
在 VM 中安裝 NGINX - exit
離開 VM
9. Updating the firewall
- gcloud compute firewall-rules list
列出 project 中的所有防火牆規則,會非常多,通常會加上過濾條件,參看上面第 7 項。 - gcloud compute instances add-tags gcelab2 --tags http-server,https-server
為 VM 加上 tag http-server、https-server,這只是為了分類及搜尋用途。 - gcloud compute firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server
為有 tag http-server 的所有 VM 開啟防火牆 port 80。 - gcloud compute firewall-rules list --filter=ALLOW:'80'
列出開放 port 80 的所有防火牆規則 - curl http://$(gcloud compute instances list --filter=name:gcelab2 --format='value(EXTERNAL_IP)')
用 curl 指令,從外部 IP 連線到 VM 裡的 NGINX,確定是否連的到,是否 NGINX 正常運作,如下,表示防火牆確實有開通,NGINX 也正常運作。
10. Viewing the system logs
- gcloud logging logs list
列出可以查看的系統 log 有那些 - gcloud logging logs list --filter="compute"
加上過濾條件,結果如下: - gcloud logging read "resource.type=gce_instance" --limit 5
讀取 log 的內容,指定讀的是 resource.type=gce_instance 裡的 log,並限制只列出 5 個。 - gcloud logging read "resource.type=gce_instance AND labels.instance_name='gcelab2'" --limit 5
讀取指定 VM 的 log
參考資料: https://www.cloudskillsboost.google/focuses/563?locale=zh_TW&parent=catalog
回覆刪除