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均可以支持。
通过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
容器运行时,运行用户容器,