TODO
Kubernetes
Docker
2020-04-10 10:00:00 +0800
Kubernetes & Docker
https://kubernetes.io/
- Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications;
- kubernetes components architecture
控制面
- 控制平面,用来对整个集群作出决策,并监测和响应集群产生的事件;
- 控制平面的组件可以运行再一台或者多台机器上,默认的部署脚本,提供所有控制平面的组件部署并运行在同一台机器上,并且不会将用户创建的容器或者pod服务创建在已经部署了控制组件的机器上;
各个组件的简单介绍及功能
kube-apiserver
- kube API服务器是整个控制平面前端,将kubernetes的API接口提供给外部进行访问;
- 该服务提供横向的伸缩和扩容,通过在更多机器实例上部署kube-apiserver,来提供接口对外访问的负载均衡,当然这里的负载均衡需要其他组件参与,例如双结点的LVS+Nginx做负载均衡转发,并将外部访问的报文段转发到不同权重的API服务节点上;
etcd
- etcd.io
- 分布式且高可用的 key-value 存储系统,用来对分布式系统的关键及重要数据做持久化;
- 在kubernetes架构中,用于对kubernetes产生的集群数据做持久化;
- etcd提供高可用,kubernetes后端的集群数据的持久化存储对应生产环境来说,还需要更多的数据备份方式;
kube-scheduler
- kubernetes管理的微服务的最小单位是一个Pod
- 类似于Openstack的Nova的scheduler对新建虚拟机的调度,kube-scheduler对新创建的Pod进行调度,用来选择一个适合的节点来运行该Pod;
- 这里的适合的节点取决于多个因素
- 单一的组合的资源需求
- 硬件/软件/策略的约束
- 亲和力/反亲和力 的规格 ?
- 数据的局部性
- 内部任务之间的影响和干扰
- 截止日期
Kube-controller-manager
控制平面的控制器,单独的进程运行控制器/管理者
该控制器进程的源程序中包含多个“功能独立”的控制器,kubernetes为了进一步简化复杂性,将这些功能独立的控制器编译到同一个可运行指令的二进制文件;
该进程中包括的”功能独立“的控制器:
Node Controller:负责对节点的异常(节点服务崩溃)进行事件回调和响应;
Replication Controller:负载管理和维护Pod的个数,这些Pod用来承载系统中复制控制器的对象(也就是复制的服务)?;
Endpoint Controller:负责将Endpoint对象,加入到一个指定的服务或者Pod中;
Service Account & Token Controllers:管理和创建用于API访问的用户,和用户Token,这些Token用不同的命名空间进行区分;
命名空间的概念,一个命名空间用来声明一个区域或者范围,该范围内包含该命名空间独一无二的身份验证或者程序变量、方法等;
cloud-controller-manager
云控制器,用来和底层云环境进行交互;
运行 cloud-provider-specific 控制器循环,在启动前,必须disable不适用的controller loops;
–cloud-provider = external
当前版本的kubernetes核心代码对”云服务提供商“的代码在功能上有所依赖;
未来版本中,”云服务提供商“将自己管理云厂商的代码段,在运行kubernetes期间和 cloud-controller-manager 进行链接;
对于云提供商的代码有所依赖的控制器包括:
- Node Controller
- 通过云供应商来检查已经停止的节点,是否在环境中已经被释放;
- Route Controller
- 为底层基础设施配置路由
- Service Controller
- 用来创建、更新、删除、云供应商提供的负载均衡产品
- Volume Controller
- 用来创建、附加、挂在”卷“,和云提供商交互进行”卷“的编排;
- Node Controller
Node Components
- 节点组件,运行在kubernetes集群的每一个节点上,用来维护运行的Pods并为Kubernetes提供运行时环境
- Kubelet
- 运行在集群中的每个节点上的agent,用于确保容器运行在Pod中;