- Pod/Pod控制器
- Name / Namespace
- Label / Label选择器
- Service / Ingress
Pod / Pod 控制器
Pod: 能够被运行的最小逻辑单元. 边车(SideCar)模式, 类似那种带挎抖的摩托车.
1个 Pod 可以运行多个容器, 容器之间共享 UTS + NET + IPC 名称空间.
Pod 控制器: 管理 副本数,生命周期,健康状态等, K8S 提供多种控制器:
Deployment, DaemonSet, ReplicaSet, StatefulSet, Job, Cronjob
Name / Namespace
每一种功能都是一种 "资源" , 隔离资源 -> Namespace, 在 metadata 中定义了各种资源的 name.
Label
资源与标签之间是多对多的关系. Label选择器: 可以通过标签来过滤资源.
标签的组成是 key = value
Service / Ingress
在 K8S 中, 每个 Pod 都会分配一个独立的 IP 地址. 但这个IP地址会随着Pod的销毁而消失.
一个service 可以看做一组提供相同服务的 Pod 的对外访问接口, service 作用于哪些 Pod 是通过标签选择器来定义的。
Ingress 是 K8S 集群里的工作在 OSI 网络参考模型下, 第7层的应用(最上层应用层) 对外暴露的接口.
abc.od.com/sh, 通过 Ingress 决定这个地址找哪个 service, service -> Pod 决定找哪个 Pod.
Service 暴露的是 ip + port 的形式, 而 Ingress 则可以调度不同业务域,不同 URL 访问路径的业务流量
核心组件
配置存储中心 -> etcd服务, 存储集群元数据信息, key-value 形式
主控(master)节点
kube-apiservice: restful API 接口. 负责数据交互. 通信枢纽, 资源配额入口.
kube-controller-manager: 管理控制器的,有一系列控制器, Node Controller, Deployment Controller, Service Controller......
kube-scheduler: 接收调度 pod 到适合的运算节点上. 预先策略(predict), 预选策略(priorities)
运算(node)节点
kube-kubelet 服务: 定时获取 pod 的期望状态, 真正干活的, 定时汇报当前节点的状态给 apiserver
kube-proxy服务:每个节点运行网络代理,service资源的载体, 管理 clusterip -> podip, 建立pod网络和集群网络的关系.
流量调度模式: IPVS 推荐.
CLI客户端
kubectl : 命令行工具
核心附件(插件)
CNI 网络插件 -> flanel / calico
服务发现插件 -> coredns
服务暴露插件 -> traefik
GUI管理插件 -> dashboard
三套网络
service 网络是虚拟网络. 192.168.0.0/16
Pod 网络: 实际网络. 172.7.21.0/24 (Node 主机的 IP 地址为 10.4.7.21)
Cluster 节点网络. 10.4.7.0/24
逻辑架构图
举例, 部署架构
实际上, 一个server 上可以同时部署 master 和 node 节点, 当然, 如果资源足够充分, 可以拆分 master 和 node 到不同机器上.
左下角的2个大框部分才是 K8S, 上边,右边的实际上不属于 K8S 范畴.