kubernetes核心组件及其作用
- kubelet调度pod
- 同一个pod内的容器共享网络、存储
- Deployment(可以是部署pod也可以是部署service)是在master节点
- service有一个独立的IP跟pod不一样
- service通过Label Selector绑定到具有相同Label的pod
- APIServer提供了资源操作的唯一入口并且提供认证授权和k8s的访问控制
- ControllerManager负责维护集群的状态:故障检测、扩缩容、滚动更新
- Scheduler负责资源调度
- ETCD负责一致性存储:保存了pod、service、集群的状态等信息
- Kubelet负责维护当前节点容器的生命周期、当前节点的volume、网络等
- kube-proxy负责service,提供内部的服务发现和负载均衡
- kube-dns负责整个集群的dns服务(非必须)
- dashboard提供集群相关信息的可视化界面
- service只能在集群内部访问,集群外部访问可以将service暴露一个端口给node,集群外通过nodeip+port的方式访问
- kube-dns让每一个pod都可以通过名字去访问对方
服务编排之Kubernetes
Kubernetes设计理念
- API设计原则
- 控制机设计原则
Kubernetes网络
- CNI
- Flannel、Calico、Weave
- Pod网络
Kubernetes scheduler
- 预选规则(preselect)
- NodiskConflict
- CheckNodeMemoryPressure
- NodeSelector
- FitResource
- Affinity(亲和性)
- 优选规则(optimize-select)
- SelectorSpreadPriority(分散pod)
- LeastRequestedPriority(新pod加入后,node的空闲资源占比)
- AffinityPriority
Kubernetes Pod通讯
- 同一个pod内通讯,共享网络,通过localhost就可以访问
- 同一个Node不同pod通讯,默认路由都是dockers0,关联在同一个docker0网桥,通过pod ip访问
- 不同Node不同pod,需要满足pod ip不能相同,Node ip跟pod ip关联起来才能访问
Kubernetes服务发现
- kube-proxy
1.Cluster IP
2.NodePort(集群外部服务通过Node ip+Node port访问到集群内的服务) - kube-dns:负责集群内部dns解析,目的是可以让pod之间通过名字去访问