Pod常见状态:kubectl get pod 显示的状态信息;
Unschedulable:Pod不能被正常调度,kube-scheduler没有匹配到合适的node节点;
可能的产生原因:
1.node节点资源不足;
2.在做“亲和”时出错导致无法找到相关node;
Podscheduler:pod正处于被调度状态,在kube-scheduler刚开始调度时,还没有将pod具体分配到指定的node,在筛选出合适的节点后就会更新etcd数据,将pod分配到指定的node节点;(调度过程很快,除非负载很高,否则很难观测到此状态)
Pending:正在创建pod,但是pod中的container还没有全部被创建完成;
可能的产生原因:
1.当环境负载较高时,可能会因为调度临时终端导致短暂,临时的Pending状态;
2.pod内某个container因为权限或依赖问题(如存储pv或pvc创建中断)导致无法继续创建;
Faild:pod中有container启动失败,导致的pod工作异常;
可能的产生原因:
1.pod所使用的镜像出错,例如其中服务或环境配置报错;
Unknown:由于某种原因无法获取pod当前状态,较少见到;
可能的产生原因:
1.通常是由于与pod所在node节点通信错误;
Initialized:所有pod中的初始化容器已完成;
ImagePullBackOff:pod所在节点下载镜像失败;
可能的产生原因:注意这个状态其实表示已经连接到Harbor服务,所以并非权限失败
1.Harbor服务器负载过高;
2.镜像下载超时导致;
Running:pod内部的container已经被创建并启动;
Ready:表示pod中的容器已经可以提供访问服务,通过# kubectl describe pod观测;
Error:pod启动过程中发生错误,较少见到,可以使用# kubectl describe 进行排错;
可能的产生原因:
1.container内环境配置问题;
NodeLost:node节点失联;
Waiting:pod等待启动;
Terminating:pod正在被撤销;
CrashLoopBackOff:由于某些原因,kubelet将container进行重构,虽然不一定能解决问题;
InvalidImageName:node节点无法解析镜像名称,导致镜像无法下载;
可能的产生原因:
1.镜像名称书写错误;
ImageInspectError:无法检验镜像,通常是因为镜像不完整导致,较为少见;
ErrImageNeverPull:策略禁止拉取镜像,可能是因为镜像中心权限为私有等原因;
RegistryUnavailable:镜像服务器不可用,网络原因或Harbor宕机;
ErrImagePull:镜像拉取出错,超时或下载被强制终止;
CreateContainerConfigError:不能创建kubelet使用的容器配置;
CreateContainerError:创建容器失败;
RunContainerError:pod运行失败,容器中没有初始化pid为1的守护进程等原因;
ContainersNotInitialized:pod没有初始化完毕;
ContainerCreating:pod正在创建中;
PodInitializing:pod正在初始化中;
DockerDeamonNotReady:node节点docker服务没有启动;
NetworkPluginNotReady:网络插件没有启动;
pause容器:
又叫infra容器,是pod的基础容器,镜像体积只有几百K左右,配置在kubelet中;
功能:实现同一个pod中多个container之间的网络通信;
infra容器加载后会初始化Network Namespace,之后其他容器就可以加入到infra容器中共享pod网络,因此如果一个pod中有A,B两个容器container,那么关系如下:
1.A容器和B容器可以直接使用localhost通信;
2.A容器和B容器可以看到网卡,IP和端口监听信息;
3.pod只有一个IP地址,就是该pod的Network Namespace对应的IP地址(由infra容器初始化并创建);
4.K8S环境中每个pod有一个独立的IP地址(前提是地址充足),并且此IP被各个pod中所有的container在内部共享使用;
5.pod删除后infra容器随即被删除,其ip被回收;
pause容器共享的namespace:
1.net namespace,pod中所有的container共享同一个网络命名空间,就是说他们都使用相同的IP和端口信息;
2.IPC namespace,pod中所有的container可以使用systemc VIPC或POSIX消息队列进行通信;
3.UTS namespace,pod中所有的container共享同一个主机名;
MNT namespace,PID namespace,User namespace并未共享;