[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就可以从前面的文章一步一步装起来~~


<<:  Day22 - Shioaji X Backtesting -双均线策略

>>:  21 - Commitlint - Lint Commit 讯息

30天学会C语言: Day 11-什麽都可以取名字

前置处理器(Preprocessor) 在程序码最前面内容,编译前编译器会依照这些内容进行不同的处理...

iOS APP 开发 OC 第五天, OC 数据类型

tags: OC 30 day OC 有哪些数据类型呢? oc 中支援所有C语言的数据变量。 基本数...

还原 SQL Server 资料库常见的问题 - 心得分享

DBABootcamp 在处理资料库还原的时候,常常会出现 (the database is in ...

Outlook 2007常见问题 - 整理常被问到的案件

PST档单一档案20GB 超过或将近 , 造成开启无反应或者需时很久. 解决1:scanpst 修...

预测运动胜负大法,利用资料累积搭配机器学习探索《财富密码》

您是否有做过投资运彩的发财梦呢,或幻想过周公托梦给您一封如何靠投资运彩赚大钱的《财富密码》!? 但是...