Post

k8s架构与资源对象概览

k8s架构与资源对象概览

k8s简介

Kubernetes, also known as K8s, is an open source system for automating deployment, scaling, and management of containerized applications.

k8s是一个对容器化应用进行自动化部署、扩缩容以及管理的平台,由谷歌的内部系统Borg演化而来。k8s于2015年发布第一个正式版本,是第一个从CNCF(Cloud Native Computing Foundation)毕业的项目。目前各大云厂商均有提供k8s服务:Google Kubernetes Engine(GKE),Amazon Elastic Kubernetes Service(EKS),Alibaba Cloud Container Service for Kubernetes (ACK)等。

k8s的优势

在谈k8s的优势前先来看下,一个企业级通用软件架构是怎样的:

组件上我们有:服务注册中心,配置中心,监控平台,网关。 组件交互上要保证可用性、伸缩性、鲁棒性等, 常用的措施包括但不限于重试、限流、熔断、降级、负载均衡。 服务发布方面需支持滚动发布。此外,还要有系统的安全性保证。

先来看看基于应用层框架是如何实现以上架构的:

我们发现在开发时不仅需要关注业务逻辑,还需要考虑 以上的通用问题,因此k8s将这些实现下沉到基础设施上, 减少共性问题上的重复开发,提升开发效率。

此外,Pod中的容器运行时可以运行任何语言的程序,无论使用什么语言/框架,k8s均可以支持。

来看看k8s是如何实现的:

通过kubeproxy,微服务之间形成服务网格(Service Mesh),以此实现包括限流、熔断等微服务流量管理,常见的实现有Istio。

k8s组件

K8s 集群节点可分为控制平面和工作节点:

  • 控制平面(Control Plane):用于管理集群的整体状态
  • 工作节点(Node):用于运行容器

集群主要组件如下图所示:

控制平面组件

kube-apiserver

用于暴露集群api

etcd

类似于zk的元数据管理数据库,采用k-v存储

kube-scheduler

对未分配节点的pod进行分配

kube-controller-manager

集群控制器,本质上是一个循环判断,将当前集群状态收敛到预期状态

cloud-controller-manager

云控制器,使用该组件与云厂商上的节点交互

工作节点组件

kubelet

每个工作节点上运行的与集群控制面交互的代理

kube-proxy

每个工作节点上的网络代理,用于实现 Service等功能

container runtime

容器运行时,运行用户容器,

参考

This post is licensed under CC BY 4.0 by the author.