《华为云云原生王者之路训练营》黄金系列课程第4课,由华为云Kubernetes容器平台技术专家Alan主讲,详细介绍Kubernetes集群和Kubernetes节点的生命周期管理。

前言

第3课Kubernetes快速入门

云原生第4课:Kubernetes 集群管理_kubernetes

上节课的这张架构图,比较直观地展示了组件如何部署在Master或者Node节点。

其中Master节点中主要承载了:kubernetes的REST API入口、KV数据库、k8s资源的控制器、负责绑定工作负载到Node的调度器;而Node节点则部署了K8S Agent:kubelet/kubeproxy、容器运行时(CRI)、相关容器存储和网络插件(CNI/CSI)

01

 Kubernetes集群生命周期管理介绍 

Kubernetes集群的部署形态

云原生第4课:Kubernetes 集群管理_数据库_02

从部署形态观察Kubernetes集群,可以总结大致有几种部署分类:

1)自建模式:在拥抱最大的自由度的同时,也必须面临一些庞杂的事务,例如

  • 计算/存储/网络资源的规划与管理需要对接云基础设施
  • Kubernetes的service/ingress需要对接负载均衡服务, storageClass需要对接后端存储
  • Master节点以及组件的参数配置、资源扩容、版本升级以及运维。
  • Node节点需要基于业务变化进行动态的资源预置、组件部署。

2)托管模式:

  • 相对于自建模式,
  • 把非业务相关的平台对接、Kubernetes控制平面等托管给容器平台,
  • 用户主要聚焦于业务部分,以及承载业务的节点资源的管理。

3)Serverless模式:

  • 更近一步,把资源的问题全交给容器平台。
  • 用户仅关注于自身业务

当前也存在自建与托管之间的其他部署形态,比如Kubernetes控制平面用户可以完全控制及修改,但其本质更接近于自建模式。

  • 因为云容器平台由于用户的介入极难保证Kubernetes集群的生命周期及功能可控,最终用户承担较大的风险。
  • 同时Kubernetes作为开源发布,框架本身就支持各种非侵入式插件,例如自定义调度器、自定义CRD及Controller等等,控制平面非托管的收益并没有想象中高。

Kubernetes集群常见部署方式

云原生第4课:Kubernetes 集群管理_kubernetes_03

Kubernetes部署工具:https://kubernetes.io/zh/docs/setup/production-environment/tools/

Turnkey 云解决方案:https://kubernetes.io/zh/docs/setup/production-environment/turnkey-solutions/

部署形态主要基于分工与需求考虑,而部署方式就理想照进现实,需要脚踏实地的投入!一般Kubernetes开发者,会采用minikube方式部署一个本地的Kubernetes集群,基本能满足个人调试需求;

更进一步,如果对Kubernetes集群有一定的部署要求,则一般通过第三方工具托管集群的生命周期管理。Kubernetes官方就推荐了3种工具,与详细的使用引导,社区也有大量的部署分享。

但即使不以生产可用为标准,此类工具的使用仍然需要使用者:具有一定的容器基础知识,需要一定的动手能力和问题解决能力。例如多实例容灾、自签证书、对接软件仓库,在国内环境中部署,需要考虑外网拉包的问题。从个人看,对初学者并不是部署首选,会极大增大学习成本和门槛。从企业看,作为生产环则需要权衡长期使用的,所以,在Kubernetes的生产部署的文档中,明确指出了优先考虑Turkey云解决方案,即使用认证的云容器平台托管。这也是大部分企业使用的形态。

其实可以发现,平台托管虽然牺牲了灵活度,单在Kubernetes作为实际编排标准的前提下其实是一种非常理智与成熟的决策。由于平台屏蔽了跨云的差异,导致业务跨云迁移和容灾的成本极低,最终容器平台基于统一的Kubernetes聚焦于差异化的竞争力,用户则用脚投票。这对Kubernetes社区与生态的发展是极其有利的。

Kubernetes集群-生产集群

回顾Kubernetes中对生产集群诉求的总结:

  • 高可用的架构设计
  • 弹性伸缩的能力
  • 对安全与权限管理的更高要求。

基于以上评判标准,就可以发现:从生产集群角度评估,选型/部署只是第一步,真正复杂的是Kubernetes及相关插件的长期监控运维、持续的迭代演进、CVE漏洞的快速分析/修复测试/方案推送等等。

从华为云CCE的实践看,不止一次地碰到过相对棘手的:OS内核缺陷导致的可靠性问题,例如cgroup的kmem泄露,docker的bug导致的稳定性问题。可以发现,生产集群的维护是一个长期的、庞杂的、系统性的任务,如果每一个Kubernetes的使用者都陷入到上述的柴米油盐中,即使Kubernetes作为容器平台事实标准,其光辉也会因此稍显暗淡。

Kubernetes生产环境:https://kubernetes.io/docs/setup/production-environment/

CCE集群简介

云原生第4课:Kubernetes 集群管理_数据库_04

CCE集群,从部署形态上看,关键的特点是:

  • 控制平面托管
  • 深度对接云基础实施
  • 云原生全栈

从云容器引擎CCE与云服务的交互概图中,可以看到运维审计、业务负载均衡、应用持久化存储、镜像仓库对接等等。

演示1:使用华为云CCE服务管理Kubernetes集群(操作演示)

请观看课程视频9分40秒-12分40秒:

https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXI033+Self-paced/about

02

 Kuberbetes节点生命周期介绍 

Kubernetes节点架构

Kubernetes节点介绍-Node定义

{
   "kind": "Node",
   "apiVersion": "v1",
   "metadata": {
       "name": "192.168.0.10",
       "labels": {
           "name": "my-first-k8s-node"
       }
   },
   "spec": {
       “providerID”: “”
   },
   "status": {
       "nodeInfo": {
           "machineID": ““
       },
       "capacity": {
           "cpu": "2",
           "memory": "3864020Ki“
       },
       "allocatable": {
           "cpu": "2",
           "memory": "3864020Ki“
       }
   }
}

上面是一个有所节选的Kubernetes定义的Node资源对象,从结构上可以发现,大致分成了

  • 元数据,节点名与节点标签
  • 节点属性
  • 节点的状态信息

从另一个维度看,除了节点元数据之外,其包含的比较关键的信息还包括:云厂商provider信息与节点资源的使用情况。这可以帮助大家理解,Kubernetes中的Node的核心目标就是业务的载体,或者理解为各类业务负载所需资源的一个套餐集合。大家有兴趣也可以去了解下VirtualKubelet这类项目,而不是仅仅将节点理解成一台实体的服务器。

通过节点池管理集群节点资源

节点池:集群中具有相同配置的一组节点,一个节点池包含一个节点或多个节点。

CCE集群中添加节点除了创建集群时直接添加,主要包括3种方式:

  • 节点管理-创建节点(通过CCE创建服务器)
  • 节点管理-纳管节点(已创建的服务器)
  • 节点池管理-更新期望节点数

[参考链接]

节点概述:https://support.huaweicloud.com/usermanual-cce/cce_01_0180.html

节点池概述:https://support.huaweicloud.com/usermanual-cce/cce_01_0081.html

创建节点池:https://support.huaweicloud.com/usermanual-cce/cce_01_0012.html

管理节点池:https://support.huaweicloud.com/usermanual-cce/cce_01_0222.html


感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!

云原生第4课:Kubernetes 集群管理_大数据_05