上一篇文章對GKE做了小小的介紹,這篇就來從0開始建k8s
,本篇都是以UI操作用主,如果有cli控可以參考
進入GCP的console頁面時,點選導覽選單
,選擇今天本篇的主角Kubernetes Engine
一進來就可以看到google大大的廣告Autopilot
,如果按下立即試用
的話,本篇就全劇終
這邊不理它,下面的總覽
會呈現目前已經建立的k8s cluster,包含node數量跟資源,通知這邊會跟你說目前是否可版本升級或是資源吃緊,像圖上的pod無法排程
就是cluster中有pod發生異常。
選擇GKE Standard
這點就分成三個部份叢集基本資訊
、節點集區
、叢集
這邊區域跟地區性就自行選擇cluster的所在機房,在台灣一般都選asia-east1-a/b/c這三個。指定預設節點位置
:如果只選一個區域,node只會建在一個區域,如果不想要雞蛋放在同一個籃子裡,也可以勾多個區域,這樣子node會分佈到不同的區域上
靜態版本:pool的gke版本不會被自動更新,但是master還是會被自動更新
發布版本:你就當開啟window更新就好
如果是prod環境就自行評估要不要用發布版本
,這邊就用靜態版本
為主,GKE跟K8s的版本號會有差一些些喔。
節點版本
可以不跟cluster master的一致,但是版本號無法超越它。啟用自動調度資源功能
就是auto scaling node的功能,可設定它的node上下限值,搭配指定節點位置
設定,可以做到跨zone的使用情境自動升級
這個就見人見智啦,個人是傾向關掉..因為你不想要半夜突然被call起來尿尿吧XD,它還有一個先天的限制,node數最好要大於3台,如果低於3台,有可能更新時三台同時離線XD
節點的image有分成二種含有 Containerd 的 Container-Optimized OS
跟含有 docker 的 Container-Optimized OS
,
基本上新版本GKE預設已經是含有 Containerd 的 Container-Optimized OS
,windows node也有,但是需 Kubernetes 1.21.1-gke.2200 以上版本才行。
安全性如果沒特殊需求就是照default走就好
如果要幫cluster貼上label可以在這邊新增
因為無法關掉自動更新,所以可以用維護作業排除時段
的方法來避免,新增一組很長期的時間就可以
因為啟用垂直自動調度 Pod 資源功能
跟啟用節點自動佈建功能
這二個功能算是GKE上面新增的黑科技,但是因為沒有實際在生產環境用過,無法很確認它的作動方式,如果本身deplymonet上面有指定resource的話,應該是不用特別開啟它。
網路
這邊會吃虛擬私人雲端網路
的設定,如果沒特殊需求就直接用default
就好,這邊就不多做說明咧了~~公用叢集
知道ip就可以被外部網路打到,也可以從cluster裡面連外私人叢集
除非有開loadbanace或是nodeport才會被外部存取,cluster內是無法連外,但是可以透過cloud nat
連外
叢集預設 Pod 位址範圍
這個就看自己有沒有ip位址範圍的需求,如果沒有是可以照著他的範例填就好
其他選項就照default值就好
這邊一樣是照default值就可以了
這邊可以自行加上label,方便團隊管理專案
如果有使用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"
這時候就可以看到叢集上面出現剛剛建立的資訊
建立完成後,可以執行連線至叢集
gcloud container clusters get-credentials cluster-1 --zone asia-east1-a --project your_project
最後一哩路就完成啦~~~
以上就是簡單的GKE建立叢集的流程,如果要安裝Istio就可以從前面的文章一步一步裝起來~~