kubernetes 入门Pod概念及网络通信方式
Posted 看,未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes 入门Pod概念及网络通信方式相关的知识,希望对你有一定的参考价值。
本篇学习部分:
文章目录
Pod 基本概念
Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。
一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。
Kubernetes中的Pod使用主要方式
-
Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。
-
Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位 - 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。
Pods提供两种共享资源:网络和存储
网络
每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。当Pod中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。
存储
Pod可以指定一组共享存储volumes。Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。volumes 还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。
Pod 控制器类型 ReplicationController & ReplicaSet & Deployment
ReplicationController 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的 Pod 来替代;而如果异常多出来的容器也会自动回收。
在新版本的 Kubernetes 中建议使用 ReplicaSet 来取代 ReplicationController。ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且 ReplicaSet 支持集合式的 selector。
虽然ReplicaSet可以独立使用,但一般还是建议使用Deployment 来自动管理 ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet 不支持 rolling- update 但 Deployment 支持)
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义 (declarative) 方法,用来替代以前的 ReplicationController 来方便的管理应用。
典型的应用场景包括:
定义 Deployment 来创建 Pod 和 ReplicaSet
滚动升级和回滚应用
扩容和缩容
暂停和继续 Deployment
HPA
Horizontal Pod Autoscaling 仅适用于 Deployment 和 ReplicaSet ,在V1版本中仅支持根据 Pod 的 CPU 利用率扩所容,在 v1alpha 版本中,支持根据内存和用户自定义的 metric 扩缩容。
StateFullSet
StatefulSet 是为了解决有状态服务的问题(对应 Deployments 和 ReplicaSets 是为无状态服务而设计),
其应用场景包括:
*稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC 来实现
*稳定的网络标志,即Pod 重新调度后其 PodName 和 HostName 不变,基于 Headless Service (即没有 Cluster IP 的 Service)来实现
*有序部署,有序扩展,即 Pod 是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行 (即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是 Running 和 Ready 状态),基于 init containers 来实现
*有序收缩,有序删除(即从N-1到0)
DaemonSet
DaemonSet 确保全部(或者-些) Node. 上运行一个Pod的副本。当有 Node 加入集群时,也会为他们新增一个 Pod。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod 使用 DaemonSet 的一些典型用法:
*运行集群存储 daemon, 例如在每个 Node. 上运行 glusterd、 ceph。
*在每个 Node 上运行日志收集 daemon,例如 fluentd、logstash.
*在每个 Node 上运行监控 daemon, 例如 Prometheus Node Exporter
Job,Cron Job
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的-一个或多个 Pod 成功结束 。Cron Job 管理基于时间的 Job, 即:
在给定时间点只运行一次
周期性地在给定时间点运行
网络通讯方式
Kubernetes 的网络模型假定了所有 Pod 都在一个可以直接连通的扁平的网络空间中,这在 GCE (Google Compute Engine) 里面是现成的网络模型,Kubernetes 假定这个网络已经存在。而在私有云里搭建 Kubernetes 集群,就不能假定这个网络已经存在了。我们需要自己实现这个网络假设,将不同节点上的 Docker 容器之间的互相访问先打通,然后运行 Kubernetes。
同一个Pod内的多个容器之间: lo
各 Pod 之间的通讯: Overlay Network
Pod 与 Service 之间的通讯:各节点的 Iptables 规则
以上是关于kubernetes 入门Pod概念及网络通信方式的主要内容,如果未能解决你的问题,请参考以下文章