1.1 Kubernetes是啥
Kubernetes是一种全新的基于容器技术的分布式架构方案
- 已成为新一代基于容器技术的PaaS平台的重要底层架构
- 一个开放的开发平台:
- 不局限于任何编程语言
- 没有限定任何编程接口
- 通过TCP协议进行交互
- 完备的分布式系统支撑平台,拥有完备的集群管理能力:
- 多层次的安全防护和准入机制
- 多租户应用支撑能力
- 透明的服务注册和服务发现机制
- 内建智能负载均衡器
- 强大的故障发现和自我修复能力
- 服务滚动更新和在线扩容能力
1.2 资源对象(Resource Object)
1.2.1 分类
(1) 基础资源对象
- 节点-Node
- 容器组-Pod
- 服务-Service
- 存储卷-Volume
(2) 相关事务与控制器
- 标签-Label
- 注解-Annotation
- 命名空间-Namespace
- 水平扩容-HorizontalPodAutoscaler
- 配置-(ConfigMap、Secret)
- 持久化存储-(PersistentVolume、PersistentVolumeClaim、StorageClass)
- 工作负载控制器-(Deployment、StatefulSet、DeamonSet、Job、CronJob)
(3) 资源管控和权限相关的对象
- 资源限制-LimitRange
- 资源配额-ResourceQuota
- 角色-Role
- 角色绑定-RoleBinding
(4) 网络相关的资源对象
- Ingress
- 网络策略-NetworkPolicy
(5) 自定义资源对象
用户可通过自定义资源CRD来自定义资源对象的类型,并编写对应的CRD控制器来实现特定的控制逻辑,CRD也是Kubernetes中Operator自动化机制的重要支撑。
1.2.2 属性
资源对象包括几个公共属性
- 版本:包括了此对象所属的资源组
- 类别:定义资源对象的类型
- 名称:(Metadata) 唯一
- 标签:(Metadata) 表明对象的特征、类别;可通过标签进行筛选
- 注解:(Metadata) 特殊标签 通常用于实现资源对象属性的自定义扩展
通常采用YAML或者JSON格式声明一个Kubernetes资源对象,每个资源对象都有自己特定的结构定义,并统一保存在etcd这种非关系型数据库中,实现最快的读写速度。可通过kubectl执行增删改查等操作。
1.3 K8s集群(Cluster)
由Master和Node组成
1.3.1 Master
负责管理和控制整个集群,是整个集群的“大脑”
Master运行关键进程:
- Kubernetes API Server(kube-apiserver):
1. 提供HTTP RESTful API 接口的主要服务
2. 唯一入口--对资源进行增删查改
3. 集群控制入口 - Kubernetes Controller Manager(kube-controller-manager):
自动化控制中心-资源控制的“大总管” -
Kubernetes Scheduler(kube-scheduler):
负责资源调度(Pod调度)的进程,“公交调度室” -
etcd服务
ps:K8s集群可以无Master,如:当采用kubeadm安装Kubernetes集群时,所有节点都是Node
1.3.2 Node
可以是物理主机,也可以是虚拟机
Node是Kubernetes集群中的工作负载节点,当某个Node宕机时,其上的工作负载会被Master自动转移到其它Node上。
Master运行关键进程:
- kubelet: 负责Pod对应容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能。
- kube-proxy: 实现kubernetes Service 通信与负载均衡机制的服务。
- 本机容器的创建与管理
Node在运行期间可以动态增加到Kubernetes集群中,默认情况,kubelet会向Master注册自己,一旦Node被纳入集群管理范畴,kubelet进程就会定时向Master汇报自身的情报。当某个Node在超过指定时间不上报信息时,会被Master判定为“失联”,标记为“NotReady”,Master会触发“工作负载大转移”的自动流程。