Kubernetes组件说明
K8s调用流程:
- 用户通过“Kubectl”进行操作,列如部署新的应用
- API server请求,并将其存储到Etcd
- watcher和controller检测资源状态的变化,并进行操作
- RelicaSet watcher/controller检测到新的app,创建新的pod达到期望的实例数
- Scheduler将新的pod分配到kubelet调用docker,docker去registry下载镜像
- kubelet检测到pods,并通过容器运行时部署他们
- kubeporxy管理pod网络,包括服务发现,负载均衡
Master控制节点:
APIserver:唯一接受客户请求的接口,判断请求是否符合逻辑,如果请求合理,就会把请求保存到Etcd当中,APIserver通知controller,执行相应的变动
kube-controller-manager:维持副本期望数目,不断对比etcd当中的客户期望值和node节点中实现的状态
kube-scheduler:负载介绍任务,选择合适节点分配任务,评估个node节点资源,选择最合适的,从APIserver中获取到任务,开始调度node任务,把执行的结果保存到etcd当中
ETCD:键值对数据库,存储k8s重要信息(持久化)
Node节点:
Kubelet:直接跟容器引擎交互实现容器的生命周期管理,通过APIserver不断检测资源变动,如果变动,首先会去调用docker,有docker去registry下载镜像,去当前节点上启动容器,把容器放到pod里,最小单元就是pod
Kube-proxy:负责写入规则至IPTABLES,IPVS,实现服务映射访问
container Runtime:
Addons附加组件:
以上两个还不能运行起来K8S,还需要附加组件
- DNS
- CNI:容器网络接口的实现(calico....flannel,canel)网络解决方案
- web UI (Dashboard)
- container resource monitoring
- cluster-level logging
重要插件:
CREDNS:可以为集群中的SVC创建一个域名IP的对应关系解析
DASHBOARD:给K8s集群提供一个B/S结构访问体系
ingress controller:官网只能实现四层代理,INGRESS可以提供七层的代理
PROMETHEUS:提供K8s集群的监控能力
ELK:提供K8s集群日志统一分析介入平台
Pod网络
六种命名空间:PID,NET,mount,IPC,USER,UTS
docker网络类型:closed,bridge(桥接),joined(联盟式),host
在一个Pod里的容器网络类型就是joined类型的,共享,UTS,Network,IPC
一个Pod空间里还有一个容器,叫做infra容器,其它容器加入pod中相当于共用的infra容器的网络,docker容器可以使用存储卷,对于pod而言,一个pod里的所有容器可以使用infra的存储卷,可用可不用,用就挂载
Pod控制器类型:
ReplicationController && ReplicaSet && Deployment:
用来确认容器应用的副本数据始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来代替;而如果异常多出来的容器会自动回收。
在新版本的kubernetes中建议使用ReplicaSet代替ReplicationController
ReplicaSet跟ReplicationController没有本质上的不同
ReplicaSet支持集合式的selector
虽然RelicaSet可以独立使用,但一般还是建议使用Deployment来自动管理RelicaSet,RelicaSet管理Pod,这样就无需担心跟其他机制的不兼容问题,如ReplicaSet不支持rolling-update但是Deployment支持)
要是使用回滚功能就会先把老旧RS下的Pod,启动到i新的RS中,把老旧的RS停用
HPA:
HPA仅用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CPU利用率扩所容,在vlalpha版本中,支持根据内容和用户自定义的metric扩缩容,说白了就是水平自动扩展pod数量
StatefullSet:
StatefulSet 是为了解决状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),应用场景包括:
- 稳定的持久化存储,即Pod重新调度后还能访问到相同的持久化数据,基于PVC来实现
- 稳定的网络标识,即Pod重新调度后其PodName和HostName不变,基于Headless Servic(即没有Cluster IP的Service)来实现
- 有序部署,有序扩展
- 有序收缩,有序删除
DaemonSet
确保全部(或者一些)node上运行一个Pod的副本。当node加入集群时,也会为他们新增加一个Pod。当有Node从集群移除时,这些pod也会被回收。删除DaemonSet将会删除它创建的所有Pod
使用DaemonSet的一些典型用法:
- 运行集群存储daemon,列如每个node上运行glusterd,ceph。
- 在每个node上运行日志收集daemon,列如fluentd,logstash
- 在每个node上运行监控daemon,列如Prometheus pod exporter
Job
job负责批量处理任务,即仅执行一次的任务,它保证批量处理任务的一个或多个pod成功结束
Cron job 管理基于时间的job,即:
- 在给定时间点只运行一次
- 周期性地在给定时间点运行

评论