Kubernetes集群和组件

一、知识图谱

Kubernetes集群和组件

二、k8s集群

Kubernetes(k8s)是Google使用Go语言编写的一个自动化ring器操作开源平台,包括部署,调度和节点集群间的扩展。高可用的集群副本数据最好是大于等于3个(奇数个,主要是原因使用了多节点选举模式)。下面k8s架构图只是强调核心概念有所简化。

Kubernetes集群和组件

1.特点

轻量级:消耗资源小

开源

弹性伸缩

负载均衡:IPVS

适合无状态服务(是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的,如Apache,Nginx Lvs等),不太适合有状态服务(需要数据存储功能的服务、或者指多线程类型的服务,队列等,如MySql,Kafka等,但可以使用Statefulset)

二、k8s组件

1.Master组件

Master 组件对集群进行全局决策(例如,调度),并检测和响应集群事件(例如,当不满足部署的 replicas 字段时,启动新的 pod)

① kube-apiserver:所有服务访问统一入口

② etcd:键值对数据库 储存K8S集群所有重要信息(持久化)

③ scheduler:负责介绍任务,选择合适的节点进行分配任务

④ CrontrollerManager:维持副本期望数目

2.Node组件

① Kubelet:直接跟容器引擎交互实现容器的生命周期管理

② Kube-proxy:负责写入规则至 IPTABLES、IPVS 实现服务映射访问的

③ Container Runtime:容器运行环境是负责在节点上运行容器的软件

3.其他组件

① COREDNS:可以为集群中的SVC创建一个域名IP的对应关系解析

② DASHBOARD:给 K8S 集群提供一个 B/S 结构访问体系

③ INGRESS CONTROLLER:官方只能实现四层代理,INGRESS 可以实现七层代理

④ FEDERATION:提供一个可以跨集群中心多K8S统一管理功能

⑤ PROMETHEUS:提供K8S集群的监控能力

⑥ ELK:提供 K8S 集群日志统一分析介入平台

三、k8s流程(个人理解)

1.Kubelet将yaml文件发送到apiserver

2.apiserver将客户端请求内容保存ectd中

3.由于scheduler会监测ectd,发现没有分配节点的pod对象后,会通过过滤和打分筛选出合适的节点运行pod

4.节点会通过container runtime运行对用的pod容器以及创建对应的副本数

5.节点上的Kubelet会对自己节点上的容器进行管理

6.CrontrollerManager会监测集群中的每个节点,发现期望状态和实际不符合的话,就会通知对应的节点

7.节点收到通知,会通过container runtime来对pod内的容器进行收缩或者扩张