K8s的基础概念(2)
目录
1. Pod概念
1.1 什么是Pod
Pod
是可以在 Kubernetes
中创建和管理的、最小的可部署的计算单元。Pod
是一组(一个或多个) 容器
; 这些容器共享存储、网络
。
1.2 Pod的分类
- 自主式
Pod
- 由控制器管理的
Pod
2 Pod控制器
Pod
控制器可以使用工作负载资源来创建和管理多个 Pod
。 资源的控制器能够处理副本的管理、上线,并在Pod
失效时提供自愈能力。
2.1 Deployment
通常用来管理无状态的pod
,有以下作用
- 创建
ReplicaSet
,再由ReplicaSet
创建Pods
- 滚动升级和回滚
- 扩容和缩容
- 暂停和继续
Deployment
2.1.1 ReplicaSet
ReplicaSet
用来确保容器应用的副本数始终保持在用用定义的副本数。如果有异常退出,会创建新的Pod
来替代,ReplicaSet
与ReplicaControll
支持集合式的selector
,一般使用Depolyment
来管理ReplicaSet
2.2 StatefulSet
StatefulSet
通常用来管理有状态的服务。它有以下应用场景:
-
稳定的持久化存储,
Pod
重新调度后还能访问到相同的持久化数据 -
稳定的网络标识,
Pod
重新调度后其HostName
和PodName
不变 -
有序部署,有序扩展,部署和扩展的依据定义的顺序依次进行,在下一
Pod
运行之前,前一个Pod
必须是Read 或 Running
的状态(例如先启动mysql
,在启动tomcat
,最后启动nginx
) -
有序收缩,有序删除
2.3 DaemonSet
DaemonSet
确保Node
上运行一个Pod
副本,当有新的Node
节点加入进来的时候,会为它创建一个Pod
;当有Node
从集群中移除时,这些Pod
也会被删除。它有以下应用场景:
- 在每个
Node
上运行集群存储daemon
,例如:ceph
- 在每个
Node
上运行日志收集daemon
,例如:logstash
- 在每个
Node
上运行监控daemon
,例如:Prometheus
2.4Job
&Cron Job
Job
负责批处理任务,即仅执行一次的任务,它保证执行批处理任务的一个或多个Pod
成功结束
Cron Job
管理基于时间的Job
,即:
- 在给点时间点只运行一次
- 周期性的在给定的时间点运行
3. 网络通信模式
3.1 Flannel
作用:
Flannel
作为一个二进制文件部署在每个node
上,主要实现以下两个功能:
-
为每个
node
分配subnet
,容器将自动从该子网中获取IP
地址 -
当有
node
加入到网络中时,为每个node
增加路由配置
3.2 不同情况下网络通信方式
- 同一个
Pod
内的多个容器之间,共享同一个网络命名空间,同一个Linux
网路协议栈 - 同一物理机上的不同
Pod
内的容器之间,通过Docker0网桥
转发请求 - 不同物理机上的
Pod
内的容器之间,通过Flannel
将Pod
的Ip
和所在Node的Ip
关联起来,通过这个关联来实现相互访问 Pod
到service
网络,使用Iptables
进行维护和转发- 外网访问
Pod
:通过Serveice
负载到响应的Pod
Pod
访问外网:Pod
发送数据到外网时,查找路由表,转发数据包到宿主机网卡,宿主机网卡完成路由选择后,Iptables
将源ip
改为宿主机IP
,然后向外网发送数据包