作者 | Qhh0205
概述
Google 的 k8s 在 2017 年已經從容器編排領域的競爭中取得主導地位,從 Docker[1] 之前的一度排擠到最終完全擁抱 k8s,顯然 k8s 已經成了目前業界的標準。
但是到目前為止能提供 k8s 完全託管服務的雲服務商少之又少,即便是目前在雲提供商有統治力的 AWS 也沒有完全提供 k8s 託管服務,僅僅提供有限的定製服務,在這一方面並不成熟。
然而 Google 的 k8s 託管服務,即 GKE,卻將 k8s 託管服務做到了極致(至少目前看來),不僅提供了全套的 k8s 託管服務,更引人註目的是 Google 已然將 Autoscaler 和 k8s 整合,實現了 k8s 節點的自動伸縮機制,能根據 pod 的需求自動化新增或刪除節點,當現有節點無法承載新的服務時會自動新增節點來滿足需求,當現有節點足夠空閑時會啟用調節機制自動化收縮節點,從某種意義上來說這幾乎做到了無伺服器的理念。
然而這也許只是冰山一角,更多強大的功能還需要進一步探索,本文只是一個入門指南,主要指導能快速開始上手基於 Google Cloud Platform 的 GKE[2] 服務(k8s 託管服務)。
GKE 入門指南
接下來我們一步步指引如何使用 GKE 來部署服務,前提是對 k8s 有所瞭解,能簡單使用 kubectl 命令。
1. 安裝並配置 Google Cloud SDK
Google Cloud SDK 是 訪問 GCP(Google Cloud Platform)平臺各種資源的命令列工具集,類似 aws 的 aws 命令列工具。
安裝和配置就不多說了,點選下麵連結選擇相應作業系統版本的 tar 包下載,然後解壓,在 PATH 環境變數中新增 google-cloud-sdk/bin
即可:
https://cloud.google.com/sdk/?hl=zh-cn
2. 初始化 Google Cloud SDK
初始化 Google Cloud SDK 是將 gcloud
命令和 Google 賬號系結起來並設定一些其他的預設值,比如區域,代理,賬號,專案(Google 賬號中新建的專案)之類的。
在執行 gcloud init
初始化之前得先給 gcloud
配置 HTTP 代理(GFW 你懂得),具體配置見我之前這篇文章[4]。然後執行 gcloud init
完成初始化,直接根據嚮導來即可。
3. 到 Google Cloud Platform 控制檯建一個 k8s 叢集,記住名稱
4. 安裝 gcloud kubectl 元件
gcloud components install kubectl
5. 獲取群集的身份驗證憑據
建立群集後,您需要獲取身份驗證憑據以與群集進行互動。要為叢集進行身份驗證,請執行以下命令:
gcloud container clusters get-credentials
6. 接下來部署一個簡單的 hello-server 服務到 GKE
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
相關連結
附錄
gloud 常用命令
gcloud auth login --no-launch-browser # gcloud 登入認證
gcloud config set compute/zone [COMPUTE_ZONE] # 設定預設區域
gcloud components list # 列出可安裝元件
gcloud components install [元件名稱] # 安裝元件
gcloud components update # 更新所有已安裝元件
gcloud components remove [元件名稱] # 解除安裝已安裝元件
設定 gcloud http 代理
gcloud config set proxy/type http
gcloud config set proxy/address 127.0.0.1
gcloud config set proxy/port 1087
設定叢集 docker 私服認證
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
註意:設定 docker 私服後,要在 GKE 部署 k8s 服務,必須得在 k8s 資源檔案(yaml 格式)中的 container
同一級指定 imagePullSecrets 鍵,要不然仍然無法拉取配置的私服的映象,示例資源檔案如下:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: regcred
檢視叢集 docker 私服配置
kubectl get secret regcred --output=yaml #base64 格式 顯示
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d # base64