容器的有状态和无状态

容器本身应用是针对无状态服务的,也就是在一个集群应用中,应用是可以停止然后恢复还能进行服务的,比如web服务,IPVS等等,对于数据库这样的有状态服务是K8s的目标,目前也有针对的控制组件叫StatefulSet

Pod组件

Pod 是 Kubernetes 的最小工作单元,是一个或多个容器的集合单位。
Pod的好处在于:方便管理,有些应用必定跟其他应用是频繁交互,并且是需要共享资源和网络的,这样用Pod来管理是很需要的(有点类似Docker-compose,但是Pod功能更强大和方便)
在这里插入图片描述

  • Pod内容器基于同一个namespace实现隔离和共享
  • Pod是一个整体运行,也就是说生命周期是一样的,容器同时关和开等等
  • Pod内容器共享网络,也就是容器之间可以127.0.0.1通讯
  • Pod内容器共享资源,也就是类似给所有的容器挂载了相同存储

Pod的控制管理器

就是Master组件controller-manager,Kubernetes 通常不会直接创建 Pod,而是通过 Controller 来管理 Pod 的,Controller 定义副本,节点选择、部署特性等

  • ReplicationController:最基本的副本管理,当容器意外退出,会自动创建Pod来代替,回收退出的容器
  • ReplicaSet :K8s新版中建议使用的,对比ReplicationController多了支持集合式选择,也就是支持定义根据Pod标签的操作
  • Deployment :K8s中使用的一般是Deployment+ReplicaSet,由Deployment创建管理ReplicaSet,ReplicaSet管理Pod,但是Deployment可以很好地实现其他机制的不兼容问题,Deployment的应用场景
    • 滚动更新和回滚应用
    • 扩容和缩容
    • 暂停和继续
      在这里插入图片描述
  • StatefulSet:解决有状态服务的问题(任何Pod相关的不变)
    • 实现存储持久化不变,Pod的摧毁和创建都会自动调度到相同的数据上
    • 实现网络标志不变,PodName、HostName不变
    • 有序部署和有序收缩,就是有状态服务器的启动顺序规则,典型的比如数据库>>apache>>nginx
  • DaemonSet:用于每个 Node 最多只运行一个 Pod 副本的场景。DaemonSet 通常用于运行 daemon守护进程
  • Job和Cron Job
    Job:用于运行结束就删除的应用(批量处理任务)
    Cron Job:可以基于管理时间点运行

Pod网络通讯

  • Pod之间通讯(同主机)是基于docker0网卡作为网关
  • Pod之间通讯(不同主机)需要借助Overlay网络来实现(K8s常见使用flanel)
  • Pod到service 基于iptables转发维护
  • Pod到外网 基于iptable的SNAT
  • 外网访问Pod:Service
    在这里插入图片描述
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐