K8S知识图谱
K8S集群组件
- Kubernetes集群主要由Master和Node两类节点组成。
- Master主要包含API Server、controller-manager、Scheduler和etcd几个组件,其中API Server是整个集群的网关。
- Node主要由kubelet、kube-proxy和容器引擎等组件构成,kubelet是Kubernetes集群的工作于节点之上的代理组件。
- 完整的Kubernetes集群还需要部署有CoreDNS(或KubeDNS)、Prometheus(或HeapSter)、Dashboard和Ingress Controller几个附加组件。
- Kubernetes的网络中主要存在四种类型的通信:同一Pod内的容器间通信、各Pod间的通信、Pod与Service间的通信,以及集群外部的流量同Service之间的通信。
Pod
虚拟化管理VM、Docker管理容器、Kubernetes管理Pod。
Pod部署
pending running running failed
- 1.Pod是Kubernetes中被调度的最小单位。
- 2.Pod中可能包含多个容器。单容器Pod是最简单的,但是多容器Pod对于紧耦合的容器使用场景来说更加适用,多容器Pod非常适用于日志和服务网格。
- 3.Pod被调度到节点上——一个Pod不能被调度为跨多个节点。
- 4.Pod是被基于声明式的方式定义在一个清单文件中的,该文件会被POST到API Server,然后被调度器分配到节点上。
- 5.几乎总是通过更高级的部署对象来部署Pod。
Pod生命周期
- 1)用户通过kubectl或其他API客户端提交Pod Spec给API Server。
- 2)API Server尝试着将Pod对象的相关信息存入etcd中,待写入操作执行完成,API Server即会返回确认信息至客户端。
- 3)API Server开始反映etcd中的状态变化。
- 4)所有的Kubernetes组件均使用“watch”机制来跟踪检查API Server上的相关的变动。
- 5)kube-scheduler(调度器)通过其“watcher”觉察到API Server创建了新的Pod对象但尚未绑定至任何工作节点。
- 6)kube-scheduler为Pod对象挑选一个工作节点并将结果信息更新至API Server。
- 7)调度结果信息由API Server更新至etcd存储系统,而且API Server也开始反映此Pod对象的调度结果。
- 8)Pod被调度到的目标工作节点上的kubelet尝试在当前节点上调用Docker启动容器,并将容器的结果状态回送至API Server。
- 9)API Server将Pod状态信息存入etcd系统中。
- 10)在etcd确认写入操作成功完成后,API Server将确认信息发送至相关的kubelet,事件将通过它被接受。
K8S资源
资源划分与管理
命名空间:将不同的业务区分开来,虚拟空间。
标签与注解:区分资源。
命名空间
标签与注解
资源控制器
- ReplicationController:用于确保每个Pod副本在任一时刻均能满足目标数量,换言之,它用于保证每个容器或容器组总是运行并且可访问;它是上一代的无状态Pod应用控制器,建议读者使用新型控制器Deployment和ReplicaSet来取代它。
- ReplicaSet:新一代ReplicationController,它与ReplicationController的唯一不同之处仅在于支持的标签选择器不同,ReplicationController只支持等值选择器,而ReplicaSet还额外支持基于集合的选择器。
Deployment:用于管理无状态的持久化应用,例如HTTP服务器;它用于为Pod和ReplicaSet提供声明式更新,是建构在ReplicaSet之上的更为高级的控制器。 - StatefulSet:用于管理有状态的持久化应用,如database服务程序;其与Deployment的不同之处在于StatefulSet会为每个Pod创建一个独有的持久性标识符,并会确保各Pod之间的顺序性。
- DaemonSet:用于确保每个节点都运行了某Pod的一个副本,新增的节点一样会被添加此类Pod;在节点移除时,此类Pod会被回收;DaemonSet常用于运行集群存储守护进程——如glusterd和ceph,还有日志收集进程——如fluentd和logstash,以及监控进程——如Prometheus的Node Exporter、collectd、Datadog agent和Ganglia的gmond等。
- Job:用于管理运行完成后即可终止的应用,例如批处理作业任务;换句话讲,Job创建一个或多个Pod,并确保其符合目标数量,直到Pod正常结束而终止。
DaemonSet
ReplicaSet
Deployment
StatefulSet
CronJob & Job
网络与服务
Cluster IP: k8s集群内部访问
Node Port:外部应用访问k8s集群服务
Load Balancer:负载均衡
Service & Endpoint
k8s集群内的service通过DNS 服务器解析endpoint(pod)的地址
Ingress
暴露k8s集群的Serivce
存储
emptyDir、hostPath、NFS、PVC、SC