闖入 GKE Google Kubernetes Engine - 生成鏡像到部署我的第一個應用 (1)

闖入 GKE Google Kubernetes Engine — 生成鏡像到部署我的第一個應用 (1)

GKE Google Kubernetes Engine Generate a mirror to deploy my first app
Kubernetes 目前在全世界的應用上大放異彩,他解決了長久以來容器話後產生的容器編排問題,包含網路、存儲,容器應用間的溝通問題。

採用聲明式 API 的 Kubernetes,使得二次開發與擴充非常容易,開源社區也非常活絡,想了解 Kubernetes 的歷史由來可以查看這邊文章

本教學文不會牽涉到太多艱難技術細節,讀者能夠快速完成成品體驗

在這篇文章中會提到的觀念或技術

  1. Kubernetes

  2. docker

  3. Go

  4. Google Kubernetes Engine (GKE)

  5. Container Registry

  6. GCP CLI

環境需求

能夠安裝 docker

這篇文章要介紹的主要是 Kubernetes 在 Google Cloud Platform 中的使用,Google Cloud Platform 基於 k8s 上實現了 Cloud Native 的 Kubernetes Engine。

使得部署稍加困難的 Kubernetes 得到了生產力的強力解放。現在,我們就來實際部署一個簡單的應用吧!

項目準備

首先我先準備了一個以 Go 語言編寫的 Web API 項目

實現的原始碼可以參考 Github 項目

如果你還沒安裝 docker 請參考 docker

  1. 打開項目後執行 docker-compose build

  2. docker images 檢查是否有成功

如下圖:

上傳至 Container Registry

Container Registry 是 Google Cloud Platform 提供的私有容器鏡像儲存庫

安裝 GCP CLI(Cloud SDK)

依照文檔上操作,安裝 Cloud SDK 工具

安裝完成後使用 gcloud --version

如果安裝成功會出現類似以下訊息:

1
2
3
4
5
:~ yasuoyuhao$ gcloud --version
Google Cloud SDK 239.0.0
bq 2.0.42
core 2019.03.17
gsutil 4.37

p.s 如果沒辦法使用 docker 也可以使用 GCP 提供的鏡像實作

登入 Cloud SDK

在終端機輸入:

gcloud auth login

登入已經註冊過 GCP 的帳號,如果還沒註冊過,請參考這裡

設定 project

打開 GCP 控制台,並且找到已經成立的專案,若尚未建立專案,請參考這裡

輸入

gcloud config set project PROJECT_ID

PROJECTID 請參考自己創建的

輸入:

gcloud config list

可以得到目前專案檔的設定,看看是否切換成功

上傳鏡像至 Container Registry

由於 Container Registry 是私有的倉庫 (Docker Hub 就是公有的),所以我們需要授權

輸入檢查 docker 授權狀況

gcloud auth configure-docker

Container Registry 有自定義的規則,請參考

Container Registry 鏡像名稱規則為

[HOSTNAME]/[PROJECT-ID]/[IMAGE]

所以我們需要幫我們剛剛做出來的鏡像打標籤:

先找到我們剛剛做出來的鏡像檔

docker images

幫我們的鏡像打標籤,以符合 GCP 規定,指令規則如下:

docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]

SOURCEIMAGE 是來源,以我們的例子就是 yasuoyuhao/gin-goserver
HOSTNAME 是 gcp 代管位置

選項有下列四種:

  • gcr.io 代管位在美國的映像檔,但此位置日後可能會改變

  • us.gcr.io 代管位在美國的映像檔,使用的儲存空間值區與 gcr.io 代管的映像檔不同

  • eu.gcr.io 代管位在歐盟的映像檔

  • asia.gcr.io 代管位在亞洲的映像檔

我們這邊使用 `asia.gcr.io

PROJECT-ID 就是我們 GCP 上面得 PROJECT ID — 以這個例子就是 yasuoyuhao-system

IMAGE 這邊我們要幫上傳儲存的鏡像取名,我們依然使用同一個名稱,但加上版本號碼 gin-goserver:v0.1

組合起來我們的指令就是

docker tag yasuoyuhao/gin-goserver asia.gcr.io/yasuoyuhao-system/gin-goserver:v0.1

然後使用 docker images 檢查

然後我們需要上傳推送鏡像

然後我們到 GCP 上查看

恭喜,鏡像成功上傳了!

部署 Kubernetes Engine

部署至 Kubernetes Engine 有兩種方法
使用指令
使用 UI 介面

我們這篇教學使用 UI 介面,對於新上手的使用者來說比較容易上手

建立叢集

直接選擇您的第一個叢集

等待叢集建立完成

部署應用

我們要部署剛剛的上傳的鏡像

選擇上面標籤的部署

選擇我們剛剛做好的容器鏡像

按下繼續

設定應用程式名稱

按下部署

等待部署完成

按下重新整理過後,應該會發現部署已完成,並且有 3 個 pod

公開應用

我們剛剛完成了容器部署!

然而在 kubernetes 中,必須公開服務才能讓外面的使用者連入這個應用,所以我們要來設定公開服務。

點選公開

  • 通訊埠設定 80

  • 目標通訊埠設定 8888

按下公開發佈

等待發布完成

發布完成後會出現 k8s 對外開放的 ip

太棒了! 我們來連接看看

公開ip/sd/cpu

成功了! 現在可以連接到部署好的應用中,並且可以取得 cpu 資料了!!!

Google Kubernetes Engine 讓原本繁瑣的部署設定簡約成 UI 介面,使得一般使用者也可以很簡單的使用!!

使用後也記得刪除鏡像及叢集呦,以免產生費用。

結尾

不過,kubernetes 偉大的設計不僅僅如次,下次,我們就來深度剖析 kubernetes 的神秘面紗,還有如何很好的配合使用 CloudBuild 完成自動化建置鏡像及部署更新容器鏡像。

yasuoyuhao 2019/03/21
如果喜歡我的文章,可以按下喜歡或追隨讓我知道呦,更歡迎許多大神指點討論。感謝您的閱讀。
部落格:yasuoyuhao’s Area
medium - 好讀版