目录

K8s的基础概念(2)

1. Pod概念

1.1 什么是Pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod一组(一个或多个) 容器; 这些容器共享存储、网络

https://z3.ax1x.com/2021/05/17/gRPLnA.jpg

1.2 Pod的分类
  • 自主式Pod
  • 由控制器管理的Pod

2 Pod控制器

Pod控制器可以使用工作负载资源来创建和管理多个 Pod。 资源的控制器能够处理副本的管理、上线,并在Pod 失效时提供自愈能力。

2.1 Deployment

通常用来管理无状态的pod,有以下作用

  • 创建ReplicaSet ,再由ReplicaSet创建Pods
  • 滚动升级和回滚
  • 扩容和缩容
  • 暂停和继续Deployment
2.1.1 ReplicaSet

ReplicaSet用来确保容器应用的副本数始终保持在用用定义的副本数。如果有异常退出,会创建新的Pod来替代,ReplicaSetReplicaControll支持集合式的selector,一般使用Depolyment来管理ReplicaSet

https://z3.ax1x.com/2021/05/13/gDMIC8.jpg https://z3.ax1x.com/2021/05/13/gDM44f.md.jpg

2.2 StatefulSet

StatefulSet通常用来管理有状态的服务。它有以下应用场景:

  • 稳定的持久化存储,Pod重新调度后还能访问到相同的持久化数据

  • 稳定的网络标识,Pod重新调度后其HostNamePodName不变

  • 有序部署,有序扩展,部署和扩展的依据定义的顺序依次进行,在下一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. 网络通信模式

https://z3.ax1x.com/2021/05/17/g24pSe.md.jpg

3.1 Flannel作用:

Flannel作为一个二进制文件部署在每个node上,主要实现以下两个功能:

  • 为每个node分配subnet,容器将自动从该子网中获取IP地址

  • 当有node加入到网络中时,为每个node增加路由配置

3.2 不同情况下网络通信方式
  • 同一个Pod内的多个容器之间,共享同一个网络命名空间,同一个Linux网路协议栈
  • 同一物理机上的不同Pod内的容器之间,通过Docker0网桥转发请求
  • 不同物理机上的Pod内的容器之间,通过FlannelPodIp和所在Node的Ip关联起来,通过这个关联来实现相互访问
  • Podservice网络,使用Iptables进行维护和转发
  • 外网访问Pod:通过Serveice负载到响应的Pod
  • Pod访问外网:Pod发送数据到外网时,查找路由表,转发数据包到宿主机网卡,宿主机网卡完成路由选择后,Iptables将源ip改为宿主机IP,然后向外网发送数据包