iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
DevOps

k8s新手船長船難記系列 第 29

[DAY29]GKE-從0開始動手建k8s

上一篇文章對GKE做了小小的介紹,這篇就來從0開始建k8s,本篇都是以UI操作用主,如果有cli控可以參考

建立k8s cluster

進入GCP的console頁面時,點選導覽選單,選擇今天本篇的主角Kubernetes Engine
https://ithelp.ithome.com.tw/upload/images/20211005/20129515YLPp41F0Mz.png

第一步就是先建立叢集

一進來就可以看到google大大的廣告Autopilot,如果按下立即試用的話,本篇就全劇終 /images/emoticon/emoticon01.gif
這邊不理它,下面的總覽會呈現目前已經建立的k8s cluster,包含node數量跟資源,通知這邊會跟你說目前是否可版本升級或是資源吃緊,像圖上的pod無法排程就是cluster中有pod發生異常。
https://ithelp.ithome.com.tw/upload/images/20211005/201295157vL9Zgv9Gp.png
選擇GKE Standard
https://ithelp.ithome.com.tw/upload/images/20211005/20129515lfDkAa8k2w.png

這點就分成三個部份叢集基本資訊節點集區叢集

叢集基本資訊

https://ithelp.ithome.com.tw/upload/images/20211005/20129515P4mOMM07lq.png

這邊區域跟地區性就自行選擇cluster的所在機房,在台灣一般都選asia-east1-a/b/c這三個。
指定預設節點位置:如果只選一個區域,node只會建在一個區域,如果不想要雞蛋放在同一個籃子裡,也可以勾多個區域,這樣子node會分佈到不同的區域上

控制層版本

靜態版本:pool的gke版本不會被自動更新,但是master還是會被自動更新
發布版本:你就當開啟window更新就好

如果是prod環境就自行評估要不要用發布版本,這邊就用靜態版本為主,GKE跟K8s的版本號會有差一些些喔。

https://ithelp.ithome.com.tw/upload/images/20211005/20129515VKrPI2aOPq.png

節點版本可以不跟cluster master的一致,但是版本號無法超越它。
啟用自動調度資源功能就是auto scaling node的功能,可設定它的node上下限值,搭配指定節點位置設定,可以做到跨zone的使用情境
自動升級這個就見人見智啦,個人是傾向關掉..因為你不想要半夜突然被call起來尿尿吧XD,它還有一個先天的限制,node數最好要大於3台,如果低於3台,有可能更新時三台同時離線XD

節點數

https://ithelp.ithome.com.tw/upload/images/20211005/20129515bsb2lglKPD.png

節點的image有分成二種
含有 Containerd 的 Container-Optimized OS含有 docker 的 Container-Optimized OS
基本上新版本GKE預設已經是含有 Containerd 的 Container-Optimized OS,windows node也有,但是需 Kubernetes 1.21.1-gke.2200 以上版本才行。

節點安全性

https://ithelp.ithome.com.tw/upload/images/20211005/201295159VC39MwldG.png
安全性如果沒特殊需求就是照default走就好

節點中繼資料

https://ithelp.ithome.com.tw/upload/images/20211005/20129515GDxsQjog8i.png

如果要幫cluster貼上label可以在這邊新增

自動化

https://ithelp.ithome.com.tw/upload/images/20211005/201295158eeXLbxJCl.png
因為無法關掉自動更新,所以可以用維護作業排除時段的方法來避免,新增一組很長期的時間就可以/images/emoticon/emoticon01.gif
因為啟用垂直自動調度 Pod 資源功能啟用節點自動佈建功能 這二個功能算是GKE上面新增的黑科技,但是因為沒有實際在生產環境用過,無法很確認它的作動方式,如果本身deplymonet上面有指定resource的話,應該是不用特別開啟它。

網路連線

https://ithelp.ithome.com.tw/upload/images/20211005/20129515D6ha0mykiV.png
網路這邊會吃虛擬私人雲端網路的設定,如果沒特殊需求就直接用default就好,這邊就不多做說明咧了~~
公用叢集知道ip就可以被外部網路打到,也可以從cluster裡面連外
私人叢集除非有開loadbanace或是nodeport才會被外部存取,cluster內是無法連外,但是可以透過cloud nat連外

叢集預設 Pod 位址範圍這個就看自己有沒有ip位址範圍的需求,如果沒有是可以照著他的範例填就好
其他選項就照default值就好

安全性

https://ithelp.ithome.com.tw/upload/images/20211006/20129515nB57M7VP5d.png
這邊一樣是照default值就可以了

中繼資料

https://ithelp.ithome.com.tw/upload/images/20211006/20129515d8yII6ITQ3.png
這邊可以自行加上label,方便團隊管理專案

功能

https://ithelp.ithome.com.tw/upload/images/20211006/2012951582rw5UVQ1m.png
如果有使用elk取代stackdriver的話,那就可以不用cloud logging,因為這邊還是會收取費用,如果自架log系統就可以不用被課金了(?)
cloud monitoring就打開就好,剩下功能就照default值設定
Istio這邊就不走gcp上的版本,因為gcp上的istio跟官方版的還有是版本差異,所以統一還是走官方安裝就好


以上該勾的都勾一勾完就可以建立啦
除了從ui操作外,他還有REST跟CLI操作
REST

POST https://container.googleapis.com/v1beta1/projects/rd2-test/zones/asia-east1-a/clusters
{
  "cluster": {
    "name": "cluster-1",
    "masterAuth": {
      "clientCertificateConfig": {}
    },
    "network": "projects/rd2-test/global/networks/default",
    "addonsConfig": {
      "httpLoadBalancing": {},
      "horizontalPodAutoscaling": {},
      "kubernetesDashboard": {
        "disabled": true
      },
      "dnsCacheConfig": {},
      "gcePersistentDiskCsiDriverConfig": {
        "enabled": true
      }
    },
    "subnetwork": "projects/rd2-test/regions/asia-east1/subnetworks/default",
    "nodePools": [
      {
        "name": "default-pool",
        "config": {
          "machineType": "n1-standard-2",
          "diskSizeGb": 100,
          "oauthScopes": [
            "https://www.googleapis.com/auth/devstorage.read_only",
            "https://www.googleapis.com/auth/logging.write",
            "https://www.googleapis.com/auth/monitoring",
            "https://www.googleapis.com/auth/servicecontrol",
            "https://www.googleapis.com/auth/service.management.readonly",
            "https://www.googleapis.com/auth/trace.append"
          ],
          "metadata": {
            "disable-legacy-endpoints": "true"
          },
          "imageType": "COS_CONTAINERD",
          "diskType": "pd-standard",
          "shieldedInstanceConfig": {
            "enableIntegrityMonitoring": true
          }
        },
        "initialNodeCount": 1,
        "autoscaling": {},
        "management": {
          "autoUpgrade": true,
          "autoRepair": true
        },
        "maxPodsConstraint": {
          "maxPodsPerNode": "110"
        },
        "version": "1.20.9-gke.1001",
        "upgradeSettings": {
          "maxSurge": 1
        }
      }
    ],
    "locations": [
      "asia-east1-a"
    ],
    "networkPolicy": {},
    "ipAllocationPolicy": {
      "useIpAliases": true
    },
    "masterAuthorizedNetworksConfig": {},
    "autoscaling": {},
    "networkConfig": {
      "datapathProvider": "LEGACY_DATAPATH"
    },
    "defaultMaxPodsConstraint": {
      "maxPodsPerNode": "110"
    },
    "authenticatorGroupsConfig": {},
    "databaseEncryption": {
      "state": "DECRYPTED"
    },
    "shieldedNodes": {
      "enabled": true
    },
    "releaseChannel": {},
    "notificationConfig": {
      "pubsub": {}
    },
    "initialClusterVersion": "1.20.9-gke.1001",
    "location": "asia-east1-a",
    "loggingConfig": {
      "componentConfig": {}
    },
    "monitoringConfig": {
      "componentConfig": {
        "enableComponents": [
          "SYSTEM_COMPONENTS"
        ]
      }
    }
  }
}

CLI

gcloud beta container --project "your_project" clusters create "cluster-1" --zone "asia-east1-a" --no-enable-basic-auth --cluster-version "1.20.9-gke.1001" --release-channel "None" --machine-type "n1-standard-2" --image-type "COS_CONTAINERD" --disk-type "pd-standard" --disk-size "100" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --max-pods-per-node "110" --num-nodes "1" --monitoring=SYSTEM --enable-ip-alias --network "projects/rd2-test/global/networks/default" --subnetwork "projects/rd2-test/regions/asia-east1/subnetworks/default" --no-enable-intra-node-visibility --default-max-pods-per-node "110" --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --enable-shielded-nodes --node-locations "asia-east1-a"

這時候就可以看到叢集上面出現剛剛建立的資訊
https://ithelp.ithome.com.tw/upload/images/20211006/2012951505hIC1we4V.png
建立完成後,可以執行連線至叢集

gcloud container clusters get-credentials cluster-1 --zone asia-east1-a --project your_project

最後一哩路就完成啦~~~

以上就是簡單的GKE建立叢集的流程,如果要安裝Istio就可以從前面的文章一步一步裝起來~~


上一篇
[DAY28]GKE-Google Kubernetes Engine
下一篇
[DAY30]從上船到沉船30天心得
系列文
k8s新手船長船難記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言