1. 基础概念
- Pod/Pod控制器
- Name/NameSpace
- Label/Label选择器
- Service/Ingress
1.1 Pod/Pod控制器
Pod
- Pod是K8S里能够被运行的最小逻辑单元
- 1个Pod里面可以运行多个容器,被称为SideCar模式
Pod控制器
- Pod控制器是Pod启动的一种模板,用来保证在K8S里启动的Pod应始终按照人们的预期运行(副本数、声明周期、健康状态检查)
- K8S内提供了众多的Pod控制器:Development, DaemonSet, ReplicaSet, StatefulSet, Job, Cronjob
1.2 Name/Namespace
Name
- K8S内部使用“资源”来定义每一种逻辑概念,每种“资源”都有自己的“名称”
- “资源”包括:apiVersion, kind, metadata, spec, status
- “名称”通常定义在“资源”的metadata里
Namespace
- 可以理解为K8S内部的虚拟集群组
- 不同名称空间内的“资源”名称可以相同,相同名称空间内的“资源”不行
- K8S默认存在的名称空间有:default, kube-system, kube-public
1.3 Label/Label选择器
Label
- 标签用于分类管理资源对象
- 标签和资源是多队多的关系
- 标签是KV形式
Label选择器
- 可以通过标签选择器过滤指定的标签
- 标签选择器目前有两个:基于等值关系基于集合关系
1.4 Service/Ingress
Service
- 每个Pod会被分配一个单独的IP地址,这个IP地址会随着Pod的销毁而消失
- Service可以看做一组提供相同服务的Pod对外访问的接口
- Service作用于哪些Pod是通过标签选择器来定义
Ingress
- Ingress是K8S集群里工作在OSI网络参考模型下,第7层的应用,对外暴露的接口
- Service只能进行L4流量调度,表现形式是ip+port
- Ingress则可以调通不同业务域、不同URL访问路径的业务流量
2. 核心组件
配置存储中心:etcd服务
主控(master)节点:
- kube-apiserver
提供了集群管理的REST API接口,负责其他模块之间的交数据交互,是资源配额的控制入口,提供完备的集群安全机制
- kube-controller-manager
由一系列控制器组成,管理所有控制器
- kube-scheduler
接收调度pod到适合的运算节点上,预选策略、优选策略
运算(node)节点:
- kube-kubelet
主要功能是定时从某个地方获取节点上pod的期望状态,并调用对应的容器平台接口达到这个状态;定时汇报当前节点状态给apiserver,以共调度的时候使用;镜像和容器的清理工作
- kube-proxy
是K8S在每个节点上运行网络代理,service资源的载体;建立了pod网络和集群网络的关系(clusterIP->podIP);流量调度模式:Userspace(废弃)、Iptables(濒临废弃)、Ipvs(推荐)
CLI客户端:kubectl
核心附件:
- CNI网络插件:flannel/calico
- 服务发现用插件:coredns
- 服务暴露用插件:traefik
- GUI管理插件:Dashboard
3. K8S架构图
系统架构
三重网络