Kubernetes Pod组件和网络通信
容器的有状态和无状态容器本身应用是针对无状态服务的,也就是在一个集群应用中,应用是可以停止然后恢复还能进行服务的,比如web服务,IPVS等等,对于数据库这样的有状态服务是K8s的目标,目前也有针对的控制组件叫StatefulSetPod组件Pod 是 Kubernetes 的最小工作单元,是一个或多个容器的集合单位。Pod的好处在于:方便管理,有些应用必定跟其他应用是频繁交互,并且是需要共享资源
·
容器的有状态和无状态
容器本身应用是针对无状态服务的,也就是在一个集群应用中,应用是可以停止然后恢复还能进行服务的,比如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
更多推荐
已为社区贡献15条内容
所有评论(0)