Google Code Prettify

2023年1月27日 星期五

GCP: Getting Started with Cloud Shell and gcloud

一、基本觀念

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

 

1 則留言:

  1. 參考資料: https://www.cloudskillsboost.google/focuses/563?locale=zh_TW&parent=catalog

    回覆刪除