定义pod的资源清单一共有五个字段: Pod
apiVersion kind metadata spec status(只读)
那么在spec中内嵌的为Container的字段有:
spec :
containers:
nodeSelector:
restartPolicy:
always, Never, OnFailure
container:
name
image
imagePullPolicy: Always, Never, IfNotPresent
ports:
name
containerPort
livenessProbe
readinessProbe
lifecycle
ExecAction: exec
TCPSocketAction: tcpsocket
HTTPGetAction: httpget 哪个地址的哪个端口发起请求
那么下来我们说一下Pod控制器:
那么配置清单的配置,是定义pod内部的所需的资源,而后直接提交给apiserver,由apiserver转交给schelder完成调度,由目标节点启动相关的资源创建就完成了,那么在由yaml文件创建的pod在被删除的情况下会被重建吗? 答案:是当然不会的。那么此次的行为称为自主式pod,是不由pod控制器重建的。
那么在定义pod的时候是很少用自主式的pod来进行创建的,一般都是由pod控制器来实现的,那么pod的创建被内嵌到了pod控制器中。
pod控制器的类型:
ReplicationController: 最早的k8s的控制工具,后来人们发现这个设计的目标过于庞大,不现实,目前废弃了这个功能。
ReplicaSet: 代用户创建指定数量的pod副本,并确保pod副本一直处于用户期望的数量状态,日过少了多退少补,而且还支持滚动更新,扩容缩容。
ReplicaSet的组件:一共由三个组件组成:
1.用户期望的pod副本数 2.标签选择器,以便pod方便管理属于自己的pod 3.pod模版,那么在pod当前的数量不符合期望值,那么根据模版进行补全
但是ReplicaSet并不是直接使用的pod控制器,或者说k8s并不建议使用ReplicaSet的控制器,
而是应该使用Deployment控制器,但是Deployment并不是直接控制pod而是基于ReplicaSet之上的,那么Deployment通过控制ReplicaSet来控制Pod,那么一定是Deployment一定是提供了比ReplicaSet更强大的功能,那么Deployment支持滚动更新等更多更请大的功能,而且还提供了声明式的配置,那么声明式的配置可以随时进行声明,可以随时改变我们在apiserver上的目标状态,只要那么资源支持动态的更新,运行时的修改,那么由了一个更为请大的接口,那么Deployment就是将来掌握的控制器之一,支持无状态应用最好的控制器。
注:pod的副本数和节点的数量并没有什么必然的关系,pod数量超过节点数的时候必然是不同的pod数分布在不同的节点上,或者一个节点上分布多个pod对象,那么对于pod内部的日志的信息的收集就比较麻烦,日志存在的信息是在节点上以存储卷映射的形式存于节点上的,
节点上日志的运作: 我们应该在每一个节点上收集节点和容器所创建的pod上的日志,他们通过卷的方式映射到节点上,