Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

GCP 筆記: Create and Manage Cloud Resources

建立虛擬主機

Regions and Zones

地區 (Region) 指的是實際的地理位置,區域 (Zone) 則是資料中心的邏輯分割方式,一個地區可以有多個區域。

區域底下的資源稱為 Zonal Resources。

建立實體:Compute Engines > VM Instances > CREATE INSTANCE。

建立後可以直接在面板中用 SSH 連線,也可以透過指令碼建立 SSH 連線。

gcloud compute ssh gcelab2 --zone us-central1-f

安裝 Nginx

透過 SSH 進入實體後,可以開始安裝 Nginx。

sudo su -
apt-get update
apt-get install nginx -y

檢查 Nginx 是否執行。

ps auwx | grep nginx

從 GCP 面板的 External IP 取得可從外部存取的 IP 位址。

透過指令碼建立實體

gcloud compute instances create gcelab2 --machine-type \
n1-standard-2 --zone us-central1-f

透過 --help 選項可以查看 gcloud compute instance create 的預設值。

gcloud compute instances create --help

## 可以用 gcloud config set 變更預設值

Cloud Shell 與 gcloud 指令

使用 get-value 取得預設的 zone 跟 region

gcloud config get-value compute/zone
gcloud config get-value compute/region

剛開始應該都會是 (unset)。

可以透過 project-info describe 尋找預設的 Region 與 Zone (google-compute-default-zone)

gcloud compute project-info describe --project <your_project_ID>

設定環境變數

環境變數再用來寫堆疊程式碼 (Stacked Scripts) 的時候很好用。

export PROJECT_ID=<your_project_ID>
export ZONE=<your_zone>

# 輸出環境變數
echo $PROJECT_ID
echo $ZONE

搭配環境變數建立虛擬主機

gcloud compute instances create gcelab2 \
	--machine-type n1-standard-2 \
    --zone $ZONE

查詢 gcloud 指令說明

# 簡單版
gcloud -h

# 詳細說明
gcloud config --help
gcloud help config # 與前面的結果一樣

# 查詢組態
gcloud config list
gcloud config list --all # 包含 unset 的組態

# 列出所有 components
gcloud components list

安裝新的 Component

可以使用 interactive 介面,會協助自動完成指令。(但是真的很難用)

sudo apt-get install google-cloud-sdk

# 啟用 interactive
gcloud beta interactive

用 Cloud Shell 透過 SSH 連結

gcloud compute ssh gcelab2 --zone $ZONE

第一次連結時,會先建立 SSH Key。

Home 目錄

在 Home 目錄底下的內容會跨專案、跨實體存在,所以即使刪除了 VM 實體後仍會存在。

Kubernetes Engine

Kubernetes 在做的事情:

  • 在同一個實體,或是多個實體中,同時部署多個容器 (container)。
  • 管理各容器的狀態。如果提供某個服務的容器不小心毀損了,Kubernetes 會偵測到並重啟容器,確保持續提供服務。
  • 將一個實體上所有的容器轉移到另外一個實體上。
  • 提供實體的擴充性。Kubernetes 叢集 (Cluster) 可以從一個實體,擴充到多個實體同時運作。

(資料來源:https://ithelp.ithome.com.tw/articles/10192401

設定預設區域

gcloud config set compute/zone us-central1-a

建立容器的叢集

gcloud container clusters create [CLUSTER-NAME]

取得授權憑仗

gcloud container clusters get-credentials [CLUSTER-NAME]

# 執行後會產生
Fetching cluster endpoint and auth data.
kubeconfig entry generated for [CLUSTER-NAME].

將應用程式部署到叢集中

使用 kubectl create deployment 從 gcr.io 的映像檔將專案部署到叢集中。

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

使用 kubectl expose deployment 讓專案可以給外部存取。--port 來指定開放的連接埠。

kubectl expose deployment hello-server --type=LoadBalancer --port 8080

kubectl get service 檢查目前叢集的狀態:

kubectl get service

## 顯示結果
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
hello-server   LoadBalancer   10.xx.xxx.xxx   xx.xx.xxx.xxx   8080:30477/TCP   3m10s
kubernetes     ClusterIP      10.xx.xxx.1     <none>          443/TCP          14m

接著可以透過 http://EXTERNAL-IP:8080 存取服務。

刪除叢集

gcloud container clusters delete [CLUSTER-NAME]
Eric Chuang
Eric Chuang

正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料