Google Cloud Platform In Practice
  • 簡介
  • 有別於其他Cloud的想法
  • 認識Google Cloud
    • Google Cloud Platform服務介紹
      • GCP從Free Trial開始
      • 開始之前先了解線上的資源
      • Project與Billing Account
      • GCP計算機
      • Google Cloud使用者與角色
      • 透過IAM管理專案資源
      • Service Account
      • Organization Node
    • GCP指令列工具 - gcloud
      • 安裝Google Cloud SDK
      • Google Cloud SDK基本使用說明
      • 認證gcloud指令
      • 在gcloud使用service account認證
      • 查詢zone與region
      • 好用的gcloud指令
  • Google Cloud上的運算服務
    • Compute Engine
      • Compute Engine基本介紹
      • Compute Engine的主機類型選擇
      • Compute Engine硬碟的選擇
      • 動手開一台GCE主機
      • 了解GCE上的auto scale
      • 使用HTTP(S) Load Balancer
      • 使用TCP Load Balancer
      • 為您的HTTP Load Balancer建立自簽SSL憑證
      • 淺談StackDriver的監控服務
        • Cloud Logging
        • Cloud Monitor
      • 進階的GCE操作
        • GCE的Software Raid建置
        • 匯入Amazon主機Image
        • Resize Boot Disk
      • GCE進階導讀
    • App Engine
      • GAE的理念
      • Standard Environment介紹
        • 第一個GAE程式 - 以GAE Java為例
      • Flexible Environment介紹
        • 標準執行環境範例 - 以Node.js為例
        • 客製化執行環境範例 - 以Node.js為例
      • GAE進階導讀
    • Container Engine
      • 建立自己的GKE Cluster
      • 基本操作
      • 使用YAML描述部署
      • 結合NLB與HLB部署
      • GKE進階導讀
  • Google Cloud上的儲存服務
    • CloudSQL
      • CloudSQL簡介
      • 建立CloudSQL
      • 連線CloudSQL - 使用Apps Script
    • Cloud Datastore
      • Cloud Datastore簡介
      • Cloud Datastore的基本觀念
      • 簡單的Cloud Datastore範例 - 以Node.js套件為例
    • Cloud Storage
      • Cloud Storage簡介
      • 掛載GCS資料夾
      • 設定Website Bucket
      • 透過HTTP(S) Load Balancer幫GCS加上CDN
      • GCS與GCP服務的整合
      • Cloud Storage進階導讀
    • Cloud Bigtable
      • Cloud BigTable簡介
      • Cloud BigTable與GCP服務的整合
      • Cloud BigTable進階導讀
  • Google Cloud上的大資料處理服務
    • BigQuery
      • BigQuery簡介
      • BigQuery的結構
      • 指令列工具 - bq
      • 載入CSV資料到BigQuery
      • 載入JSON資料到BigQuery
      • 透過 bq 查詢資料
      • BigQuery的省錢祕技
      • BigQuery進階導讀
    • PubSub
      • PubSub簡介
      • PubSub入門
    • Cloud Dataflow
      • Cloud Dataflow簡介
      • 第一個Dataflow Pipeline - 以Java為例
      • Dataflow進階導讀
    • Datalab
      • 啟動您的Datalab
      • 深入了解datalab
      • Datalab進階導讀
    • Cloud Spanner (beta)
      • Spanner簡介
      • Spanner基本操作介紹
      • Spanner進階導讀
  • Google Cloud上的人工智慧服務
    • Cloud Machine Learning Engine
    • Vision API
    • Natual Language API
    • Speech API
    • Video Intelligence API (private beta)
  • 更多GCP學習資源
  • GCP支援服務
Powered by GitBook
On this page
  • K8S的結構
  • 手動執行模式
  • 建立Nginx服務為例
  • 將服務掛載內部IP
  • 對服務掛載LoadBalancer (外部IP)
  • 總結
  1. Google Cloud上的運算服務
  2. Container Engine

基本操作

Previous建立自己的GKE ClusterNext使用YAML描述部署

Last updated 7 years ago

當GKE Cluster建立起來之後,後續的操作基本上與K8S幾近相同,所有操作都是透過kubectl來使用,下面簡單介紹一下透過kubectl指令在GKE的環境上建立主機與服務。

K8S的結構

GKE在架構上透過Pod來封裝一個以上的container作為部署的最小單位,並且透過deployment來封裝pod,讓pod本身可以被監控與執行scale或rolling update等動作,整體的概念如下圖所示:

  • Pod封裝container作為部署的最小單位

  • 透過deployment或是relicaset等方式封裝pod運作的細節,如份數等等資訊

  • 最後透過service或是ingress連結對外的開放端口提供服務

而在這之中,GKE為管理整個K8S cluster的角色,透過GKE底層的instance group的操控,即可進一步做到底層資源的橫向擴展。

手動執行模式

kubectl提供指令"run"來手動執行單一個pod,可以作為一次性部署或是臨時操作使用。

建立Nginx服務為例

我們可以簡單的指定image名稱來啟動一個nginx起來...

kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"

仔細看,其實該nginx會被封裝到deployment中,而該deployment預設會以剛剛給定的image啟動一個pod

$ kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"
deployment "nginx-app" created

$ kubectl get deploy nginx-app
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-app   1         1         1            1           14s

因此跑起來的nginx-app,基本上可以透過deployment來操作scale out與rolling update等動作..

將服務掛載內部IP

到這個階段,啟動階段所掛載的port是container內部的port,如果想要讓外部可以存取您的nginx,可以透過expose的方式來掛載service到pod上...

kubectl expose deployment nginx-app --port=80 --name=nginx-http

操作無誤後,可以透過get service的方式來找到所有expose的設定...

kubectl get services
NAME         CLUSTER-IP      EXTERNAL-IP       PORT(S)    AGE
kubernetes   10.99.240.1     <none>            443/TCP    1d
nginx-http   10.99.255.30    <none>            80/TCP     1h

在這個時候,您可以直接登入該container所掛載的位置,並且透過docker ip來做存取,例如:

curl http://10.99.255.30:80

不過這樣的存取方式僅限於server內部使用,或是具備存取該node權限的服務使用。

對服務掛載LoadBalancer (外部IP)

如果要完全open您的服務供外部連線使用,需要透過LoadBalancer的參數指定來連線GKE的外部Network Load Balancer,才可以直接讓服務對外。

kubectl expose deployment nginx-app --type="LoadBalancer"

檢視服務掛載IP後:

kubectl get services
NAME         CLUSTER-IP      EXTERNAL-IP       PORT(S)    AGE
kubernetes   10.99.240.1     <none>            443/TCP    1d
nginx-app    10.99.249.119   130.211.254.181   80/TCP     2m

此時,service已經有外部的IP位置,可以透過外部IP來存取:

curl http://130.211.254.181:80

總結

透過剛剛的演練,大概說明了K8S的一些基本操作,包含:

  • 如何啟動一個Deployment,包含使用指定的Image來建立

  • 使用expose來串接service,串接外部Load Balancer

而K8S持續在演化與發展當中,請大家持續關注K8S帶來更好的部署概念!