GCP 介紹
GCP 基礎
前情提要:
為了瞭解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 帳戶。
- 轉到 Google 雲端平台控制台上的 App Engine 儀表板,然後按新增/建立。
- 輸入專案名稱,編輯並記下您的專案 ID。待會將使用到您的專案 ID:
- 專案名稱:GAE Sample Site
- 專案ID:gaesamplesite
- 如果您之前尚未建立專案,則需要選擇是否要接收電子郵件更新、同意服務條款,然後您應該能夠點擊 “建立專案(+)” 的按鈕來新增專案。
新增應用程式
每個專案可以包含一個 App Engine 的應用程式。該怎麼為專案準備一個應用程式:
- 我們需要發布一個範例應用程式。如果您手中沒有範例可以應用,請下載並解壓縮此範例應用程式。
- 看一下這個範例的結構 – website 文件夾包含您的網站內容及app.yaml ,app.yaml 是您的應用程式配置文件(configuration file)。
- 除了您的網站必須放在website 文件夾、首頁必須被稱為index.html 之外,您可以對其它文件採取任何您喜歡的形式。
- app.yaml 文件是一個配置文件,負責告訴 App Engine 如何將 URL 對應到您的靜態文件,您並不需要編輯它。
部署你的應用程式
現在我們已經將專案和範例應用程式準備好,讓我們來部署應用程式吧。
- 打開 Google Cloud Shell
- 將 sample-app 文件夾拖放到代碼編輯器的視窗左側中。
- 執行下列 command line 用以選擇你的專案
$ gcloud config set project gaesamplesite
- 返回到 Cloud Shell 並輸入以下命令進入您的應用程式所在目錄:
$ cd sample-app
- 現在準備部署您的應用程序,將您的應用程序上傳到 App Engine:
$ gcloud app deploy
- 輸入一個數字以選擇您希望應用程式所在的區域。
- 輸入 Y 確認。
- 現在導向您的瀏覽器至
.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檔案在裡面。
一鍵下載所有檔案
到瀏覽器上的畫面,勾選該畫面所有檔案,點選下載,他會給你一串指令,把這串指令貼到終端機,就會一次幫你全部載下來。