K8S
组件
API Server
所有服务统一入口
Scheduler, ReplicaSet, Etcd, Kubelet, Kube proxy 都访问 API SERVER
Scheduler
负责接受任务,选择合适节点分配
集群时,实际只有一台master机器上工作
ETCD
保证集群的高可用
可依赖的分布式键值存储
使用http协议
WAL write ahead log
存储需要持久化的重要信息
Kubelet
和 CRI(container runtime interface) 交互
Kube proxy
写入规则至 IPTables 或 IPVS, 实现服务映射访问
Coredns
为 service 实现 name => ip 的解析
Dashboard
为集群提供 B/S 访问体系,展示集群和服务的各种状态
Ingress Control
七层代理,实现负载均衡
Federation
跨集群中心多 k8s 管理功能
Prometheus
提供k8s集群监控能力
ELK
提供 k8s 日志统一分析接入平台
网络解决方案
Flannel
工作
让集群中的不同节点创建的容器都具有全局唯一的虚拟ip地址
并在这些ip地址之间建立覆盖网路,将数据包原封不动的传递到目标容器内
守护进程和工作进程封装/解封网络报文
配置
可分配的ip地址资源段保存到Etcd中
监控Etcd中每个Pod的实际地址,并在内存中维护Pod节点路由表
Pod内部网络通讯
共享同一个Linux协议栈
Pod之间网络通讯
在同一个机器上:网桥直接转发,不经Flannel
不在同一个机器:经过Flannel的封装和转发
Pod到Service
LVS
Pod到外网
由机器网卡改写源ip
外网访问Pod
通过Service
POD
k8s的网络模型假设了所有pod都在一个可以直接联通的网络空间中
Pod配置介绍: kubectl explain pod
, kubectl explain pod.status
自主式Pod
无人看管,所以不会重启
控制器管理的Pod
ReplicaSet
保证副本数和用户的期望值一样
有容器异常退出,会自动创建新Pod
Deployment 自动管理 ReplicaSet
可使用 tag 进行管理
主要用于无状态服务
HPA(Horizontal Pod AutoScale)
根据用户定义的CPU和内存阈值来自动扩缩容
Stateful Set
主要解决有状态服务的问题
支持自己的有状态服务仍需自己实现自定义功能
稳定的持久化存储,即POD重新调度后仍能访问到相同的持久化数据
稳定的网络标识,即POD重新调度后其 PodName 和 HostName 不变,基于 Headless Service 实现
有序部署,有序扩展,部署/扩展时按定义的顺序进行,不会并发进行
有序扩缩容,有序删除
Daemon Set
确保集群中全部或一些(可自行排除)节点上运行指定Pod的副本
每个Node上运行日志手机Daemon,如fluentd, logstash
每个Node上运行监控Daemon,如 Prometheus Node Exporter
Cron Job
Job: 只执行一次的任务
CronJob: 类似 Crontab
资源控制器
资源分为三个级别
名称空间级别
kube-system
为集群系统组件的名称空间,kubectl get pods -n kube-system
工作负载型资源: Pod, ReplicaSet、Deployment、StatelfulSet、DaemonSet、Job、CronJob
服务发现及负载均衡型资源: Service, Ingress、...
配置与存储型资源: Volume(存储卷), CSI(容器存储接口)、...
特殊类型资源: ConfigMap(配置中心), Secret(敏感数据类型)、DownwardAPI(外部信息输出给容器)
集群级别
集群级资源: Namespace, Node, Role, ClusterRole, RoleBinding, ClusterRoleBinding
元数据型
元数据型: HPA, PodTemplate, LimitRange
服务发现
SVC
根据 service ip 访问时使用 round robin(轮询) 来访问每个Pod
构建
存储
有状态服务需要存储数据
调度器
安全
集群认证
鉴权 访问控制
HELM
包安装 部署常用部件
运维
Last updated
Was this helpful?