前情提要:
為了瞭解GCP如何部署、使用,看著影音學習GCP


GCP入門 - 分成五大類

計算 - Compute engine app engine

網路 - Networking (DNS, vpn)

儲存 - storage

大數據 - BigData

API - 一大堆東西

GCE - Google Compute Engine

GCE 是屬於 google 的 Iaas 服務,全名是 Infrastructure as a service - 基礎設施及服務,白話文就是說,提供你建置電腦所需要的配備 (CPU、記憶體、硬碟),用這些東西搭配出一個你想要的環境。

依照你的專案需求,可以選擇不同的配件,比如今天你是高運算服務,就可以配備高記憶體、high CPU,讓服務跑順一點。

硬碟

google提供兩種,一種是標準永久磁碟 HDD、SSD,如果你想要更快速可以選擇 local SSD(暫存磁碟)

HDD

比較生活化的比喻,HDD和VM的組合就像是聯結車,VM就是前面的車頭,HDD就是後面的貨櫃,不過因為車頭和貨櫃是分開的,所以就算車頭壞了,貨櫃還是正常。

local SSD

local SSD和VM的組合就像是廂型車,VM就是前面的車頭,HDD就是後面的貨櫃,但是廂型車是一體成型的,所以今天車頭損毀的話,硬碟會一起壞掉,另外因為廂型車是一體成型,所以中間資料傳輸的速度比較快。

用 GCE 的好處

第一好處是大大減少 infra 的維護時間與精力,過去來說,主機如果出問題,就要實體去維修,現在都在雲端上,會方便很多。

第二大好處就是彈性,可以自由選擇想要的配件。

第三大好處就是安全、快速,因為google本來就會在資料傳輸上面做加密,google是唯一在台灣設有數據中心,設有機房的雲端大廠。

GKE - Google Kubernetes Engine

Kubernetes Engine 原先的名稱叫做 Container Engine,他的核心技術是 K8S,為了方便記憶會稱為 GKE。

講 K8S 前,先來了解 Container 是啥, Container 是一種虛擬化的技術,他可以把我們需要執行程式所需要的執行環境打包起來,如此一來我們可以很方便的部署在不同的平台上,那 Container 內的應用程式,也都可以享有一樣的執行環境,Kubernetes 的原意是希臘語的掌舵手,他的功能就是去管理各個 Container。

Kubernetes 最小的部署單位,一單會稱為 Pod,在 Pod 下面才會有各個不同的 Container,在 Pod 裡面的 Container 其實都會享有一些共同的資源,比如說 IP 位置、計算資源…等等。

我們假設有一個社區,K8S就是這個社區的大房東,社區會有一棟一棟的大樓,大樓你可以把它想成虛擬機器(俗稱的VM),在大樓裡面我們又會去區隔很多的住戶(每個住戶代表一個POD),住戶要怎麼被找到位置,就可以夠過他們的門牌號碼(IP 位置),每個住戶都會有很多家庭成員,比如說 爸爸、媽媽、兄弟姐妹,這些角色就可以被認為是 Container,這些成員都可以共用家裡面的水、電、瓦斯…等等,這些資源就可以被理解為剛剛說的計算資源。

K8S 這個大房東,主要在做的事情就是管理每一個住戶(Pod),可以使用多少計算資源,為了就是讓整個社區可以更有效率的使用資源,舉個例子,假設今天大樓A也太多的住戶(Pod),他就可以協調某一些的住戶(Pod),可以轉移到B大樓,這樣資源就可以分配的更平均。

K8s的操作很單純,就是把你想要的應用程式、想保留的空間..等等,全部放到 yaml、json 的設定的檔中,這樣 GKE 會自動幫你調節資源,不需要手動調節。

GAE - Google App Engine

以下是在Google App Engine 上託管網站的步驟教學

創建 Google 雲端平台專案

您需要先在 Google 雲端平台上創建一個新專案,才能將 Google 工具應用於您自己的網站或應用,而在這之前,您需要有一個 Google 帳戶。

  1. 轉到 Google 雲端平台控制台上的 App Engine 儀表板,然後按新增/建立。
  2. 輸入專案名稱,編輯並記下您的專案 ID。待會將使用到您的專案 ID:
    • 專案名稱:GAE Sample Site
    • 專案ID:gaesamplesite
  3. 如果您之前尚未建立專案,則需要選擇是否要接收電子郵件更新、同意服務條款,然後您應該能夠點擊 “建立專案(+)” 的按鈕來新增專案。

新增應用程式

每個專案可以包含一個 App Engine 的應用程式。該怎麼為專案準備一個應用程式:

  1. 我們需要發布一個範例應用程式。如果您手中沒有範例可以應用,請下載並解壓縮此範例應用程式
  2. 看一下這個範例的結構 – website 文件夾包含您的網站內容及app.yaml ,app.yaml 是您的應用程式配置文件(configuration file)。
    • 除了您的網站必須放在website 文件夾、首頁必須被稱為index.html 之外,您可以對其它文件採取任何您喜歡的形式。
    • app.yaml 文件是一個配置文件,負責告訴 App Engine 如何將 URL 對應到您的靜態文件,您並不需要編輯它。

部署你的應用程式

現在我們已經將專案和範例應用程式準備好,讓我們來部署應用程式吧。

  1. 打開 Google Cloud Shell
  2. 將 sample-app 文件夾拖放到代碼編輯器的視窗左側中。
  3. 執行下列 command line 用以選擇你的專案
$ gcloud config set project gaesamplesite
  1. 返回到 Cloud Shell 並輸入以下命令進入您的應用程式所在目錄:
    $ cd sample-app
    
  2. 現在準備部署您的應用程序,將您的應用程序上傳到 App Engine:
$ gcloud app deploy
  1. 輸入一個數字以選擇您希望應用程式所在的區域。
  2. 輸入 Y 確認。
  3. 現在導向您的瀏覽器至 .appspot.com 查看您的網站。舉例來說,對於專案 ID gaesamplesite,將轉到 gaesamplesite.appspot.com。

GCloud - GCP CLI 命名行工具

首先在本機安裝GCloud

$ brew install --cask google-cloud-sdk

這樣就安裝好了,接著再打上此行指令確認是否有安裝完成

$ gcloud -v

------
Google Cloud SDK 431.0.0
bq 2.0.92
core 2023.05.12
gcloud-crc32c 1.0.0
gsutil 5.23

確認安裝好後,就可以來初始化 gcloud 了

$ gcloud init

------
Welcome! This command will take you through the configuration of gcloud.

Your current configuration has been set to: [default]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.
Reachability Check passed.
Network diagnostic passed (1/1 checks passed).

You must log in to continue. Would you like to log in (Y/n)?  Y

Your browser has been opened to visit:

輸入 gcloud 後,會有這幾行程式碼出現,主要是在確認你的網路是否有連線成功,如果你連公司網路,被防火牆擋住的話,可以直接輸入這個指令,他的意思就是忽略網路偵測

$ gcloud init --skip-diagnostics

接著就會跳出 google 帳號登入視窗,你直接選擇要的 google 帳號,便可以用 shell 進入該帳號。

再來我們進入帳號裡面後,他會要你選擇進入哪一個 projects 裡面:

You are logged in as: [a034506618@gmail.com].

Pick cloud project to use: 
 [1] boxwood-bee-212310
 [2] ferrous-thought-313317
 [3] flowing-castle-381508
 [4] gclud-cli-test
 [5] independent-tea-380808
 [6] my-project-0804test
 [7] speech-to-text-231611
 [8] Enter a project ID
 [9] Create a new project

Please enter numeric choice or text value (must exactly match list item):  4

上面我們選擇進到 [4] gclud-cli-test 這個專案裡面,他會問你要不要重新輸入預設的時區和區域,如果想要特別設定就輸入 Y,不想重設就直接輸入 n 就好:

$ Do you want to configure a default Compute Region and Zone? (Y/n)?  n

------
Your Google Cloud SDK is configured and ready to use!

* Commands that require authentication will use a034506618@gmail.com by default
* Commands will reference project `gclud-cli-test` by default
Run `gcloud help config` to learn how to change individual settings

This gcloud configuration is called [default]. You can create additional configurations if you work with multiple accounts and/or projects.
Run `gcloud topic configurations` to learn more.

Some things to try next:

* Run `gcloud --help` to see the Cloud Platform services you can interact with. And run `gcloud help COMMAND` to get help on any gcloud command.
* Run `gcloud topic --help` to learn about advanced features of the SDK like arg files and output formatting
* Run `gcloud cheat-sheet` to see a roster of go-to `gcloud` commands.

我這邊不想重設,所以最後就會說你已經可以準備開始設了!

這邊要特別提一件事,我們在這邊輸入這個指令:

$ gcloud compute instances list   

如果指令說有錯誤,類似以下錯誤:

> Enabling service [compute.googleapis.com] on project [224083013645]...
> ERROR: (gcloud.compute.instances.create) Retry
> This may be due to network connectivity issues. Please check your network settings, and the status of the service you are trying to reach.

有可能是帳戶沒有連接到「已管理帳單」,簡單說就是你還沒有把這個帳戶綁信用卡,所以目前是不能使用的,只要手動到瀏覽器那邊綁好後,再次輸入指令,就不會故障了:

$ gcloud compute instances list   

------
NAME         ZONE          MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS

不過如果今天這個專案是全新的,這只應下去應該會長上面那樣,如果今天想要用 cli 新增一個 instances,照我們下面這樣輸入:

$ gcloud compute instances create instances-4 --zone asia-east1-b --machine-type f1-micro 

Ps. 如果沒指定規格,預設會開 e2-medium 2core-4GB的機器

新增好之後,我們在輸入一次 list,就可以看到我們剛剛的 instances 了:

$ gcloud compute instances list   

------
NAME         ZONE          MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
instances-4  asia-east1-b  f1-micro                   10.140.0.2   34.80.146.195  RUNNING

進入 instance 中

接著我們來用本機進入剛剛新創的 instance 中:

$ gcloud compute ssh instances-4 --project=gclud-cli-test --zone=asia-east1-b

------
Warning: Permanently added 'compute.7393831583822146124' (ED25519) to the list of known hosts.
Enter passphrase for key '/Users/yee0526/.ssh/google_compute_engine': 
Linux instances-4 5.10.0-22-cloud-amd64 #1 SMP Debian 5.10.178-3 (2023-04-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

yee0526@instances-4:~$ 

這樣就成功進入 instance 中了:

刪除 instance

先列出全部 instances

$ gcloud compute instances list 

------
NAME         ZONE          MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP      STATUS
instances-8  asia-east1-a  n1-standard-1               10.140.0.3   104.199.219.147  RUNNING
instances-4  asia-east1-b  f1-micro                    10.140.0.2   34.80.146.195    RUNNING

我們來刪掉 instances-8 這個實體:

$ gcloud compute instances delete instances-8

------
No zone specified. Using zone [asia-east1-a] for instance: [instances-8].
The following instances will be deleted. Any attached disks configured to be auto-deleted will be deleted unless they are attached to any other instances or the `--keep-disks` 
flag is given and specifies them for keeping. Deleting a disk is irreversible and any data on the disk will be lost.
 - [instances-8] in [asia-east1-a]

 Do you want to continue (Y/n)?  Y

這樣就可以刪掉指定的 instances,再來我們確認是否要成功刪掉:

$ gcloud compute instances list 

------
NAME         ZONE          MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
instances-4  asia-east1-b  f1-micro                   10.140.0.2   34.80.146.195  RUNNING

只剩下一個了!

上傳本機資料到 gcloud 上

先在本機新增一個檔案

# 進到vim裏面,隨便打幾個字,然後存擋完退出
$ vim aaa.txt

到瀏覽器的GCP中,搜尋 Cloud Storage ,並在這裡面建立一個 值區,建立好後就可以把剛剛我們的 aaa.txt 檔案丟上 gcloud

# text_bucket-1 是我創建值區的名稱
$ gsutil cp aaa.txt gs://text_bucket-1 

------
Copying file://aaa.txt [Content-Type=text/plain]...
- [1 files][    4.0 B/    4.0 B]                                                
Operation completed over 1 objects/4.0 B.          

這指令打上後,可以到瀏覽器的GCP看,應該是有一個aaa.txt檔案在裡面。

一鍵下載所有檔案

到瀏覽器上的畫面,勾選該畫面所有檔案,點選下載,他會給你一串指令,把這串指令貼到終端機,就會一次幫你全部載下來。

參考連結:https://www.youtube.com/watch?v=REJmbdxQKp4