kubernetes一个简单server实例
一个server对应一个replicationcontroller。
replicationcontroller维护指定数量的容器(pod)实例。
kubernetes为一个server抽象出一个对外接口(即kubia-http)。对外使用统一IP地址,对内负载均衡。
为何多个容器比单个容器中包含多个进程要好
1.若一个容器中含有多个不相关的进程,那么我们需要自主完成进程的维护工作。比如:某一个进程崩溃,而其他进程正常运行。我们不能依靠k8s重启一个pod帮我们解决。因为正常运行的进程就会多出一个实例。
2.进程日志都记录到标准输出,对进程的日志管理增加了困难
pod
pod作为kubernetes资源管理的基本单位,我们应将pod视为独立的机器,并将不同的应用程序组织到不同的pod中(仅非常紧密的应用集成到一个pod中)。这与微服务思想相同。
思考三个问题:
它们需要一起运行还是可以在不同的主机上运行?(运行环境)
它们代表的是整体还是相互独立的组件?(应用逻辑)
它们必须一起进行扩缩容还是可以分别进行?(拓展逻辑)
kubernetes通过标签的方式,对pod以及节点进行标签标记。通过标签约束pod应部署在哪一类节点上。(极度不推荐指定某一节点,这与kubernetes的思想背道而驰)
keep alive问题
如果pod崩溃,则会由存活探针发现,并重启pod。该任务由承载pod的节点上的kubelet完成。
如果节点崩溃,则kubelet无法完成(因为kubelet也崩溃了),那么需要ReplicationController来管理pod。(如果该pod不是由类似ReplicationController创建的,那么该pod就会丢失?)
ReplicationController,ReplicaSet
类似于MySQL里的视图。给定选择条件,管理并维护符合条件的pod组。一般用ReplicaSet(ReplicationController已过时)。
均可以使用YAML定义
DaemonSet
确保在其管理节点上运行一个(特定的)pod。且维护退出节点与新增节点。对于退出DaemonSet的节点,DaemonSet会关闭相应的pod。
job资源
完成一个任务,若任务正常结束(exit 0)则job(pod)释放。若任务异常结束,job会调度该pod,执行此任务。
可以设定job的重启规则(fail,never),设定job并行度,设定任务完成时间。
可以设定定时任务(CronJob).即一个定时器,每隔多久执行一次任务。
pod的对外统一接口service
Kubernetes in Action