当前位置:首页 > Web开发 > 正文

Kubernetes集群中的Pod可被用于以下两个主要用途: 运行单个容器的Pod

2024-03-31 Web开发

Pod是kubernetes集群中最小的部署和打点的根基单元,,协同寻址,协同调理。

Pod是一个或多个容器的调集,是一个或一组处事(进程)的抽象调集。

Pod中可以共享网络和存储(可以简单理解为一个逻辑上的虚拟机,但并不是虚拟机)。

Pod被创建后用一个UID来独一标识,当Pod生命周期结束,被一个等价Pod替代时UID将从头生成。

Kubernetes Pod中最常用Docker容器运行,固然Pod也能撑持其他的容器运行,好比rkt、podman等。

Kubernetes集群中的Pod可被用于以下两个主要用途:

运行单个容器的Pod。“每个Pod 一个容器”模型是最常见的Kubernetes用例;在这种情况下,可以将Pod看作单个容器的包装器,并且Kubernetes直接打点Pod,而不是容器。

运行多个协同事情的容器的Pod。Pod可能封装由多个紧密耦合且需要共享资源的共处容器构成的应用措施。这些位于同一位置的容器可能形成单个内聚的处事单元,一个容器将文件从共享卷供给给公家,而另一个单独的“挂斗”容器则刷新或更新这些文件。Pod将这些容器和存储资源打包为一个可打点的实体。

Pod控制器

控制器可以为您创建和打点多个Pod,打点副本和上线,并在集群范畴内供给自修复能力。例如,如果一个节点掉败,控制器可以在差此外节点上调理一样的替身来自动替换Pod。

包罗一个或多个Pod的控制器一些示例包孕:

Deployment kubernetes中最常见的控制器。用于运行无状态应用

Statefulset 用于运行有状态应用

DaemonSet 感化就像是计算机中的守护进程,它能够运行集群存储、日志收集和监控等【守护进程】

控制器凡是使用您供给的Pod模块来创建它卖力的Pod。

Pod故障归类

Pod状态 一直处于Pending

Pod状态 一直处于Waiting

Pod状态 一直处于ContainerCreating

Pod状态 处于ImagePullBackOff

Pod状态 处于CrashLoopBackOff

Pod状态 处于Error

Pod状态 一直处于Terminating

Pod状态 处于Unknown

Pod排查故障命令

kubectl get pod <pod-name> -o yaml  # 检察Pod配置是否正确

kubectl describe pod <pod-name>  # 检察Pod详细事件信息

kubectl logs <pod-name> [-c <container-name>] # 检察容器日志

Pod故障问题与排查要领

Pod 一直处于Pending状态

Pending状态意味着Pod的YAML文件已经提交给Kubernetes,API东西已经被创建并生存在Etcd傍边。但是,这个Pod里有些容器因为某种原因而不能被顺利创建。好比,调理弗成功(可以通过kubectl describe pod 命令检察到当前Pod的事件,进而判断为什么没有调理)。可能原因:资源不敷(集群内所有的Node都不满足该Pod请求的CPU、内存、GPU等资源);HostPort已被占用(凡是保举使用Service对外开放处事端口)。

Pod 一直处于WaitingContainerCreating状态

首先还是通过kubectl describe pod 命令检察当前Pod的事件。可能的原因有:

1、镜像拉取掉败,好比镜像地点配置错误、拉取不了国外镜像源(gcr.io)、私有镜像密钥配置错误、镜像太大导致拉取超时(可以适当调解kubelet的-image-pull-progress-deadline和-runtime-request-timeout选项)等。

2、CNI网络错误,一般需要查抄CNI网络插件的配置,好比:无法配置Pod网络、无法分配IP地点。

3、容器无法启动,需要查抄是否打包了正确的镜像或者是否配置了正确的容器参数

4、Failed create pod sandbox,检察kubelet日志,原因可能是磁盘坏道(input/output error)。

Pod 一直处于ImagePullBackOff状态

凡是是镜像名称配置错误或者私有镜像的密钥配置错误导致。这种情况可以使用docker pull来验证镜像是否可以正常拉取。

如果私有镜像密钥配置错误或没有配置,按下面查抄:

1、盘问docker-registry类型的Secret

# 检察 docker-registry Secret $ kubectl get secrets my-secret -o yaml | grep ‘dockerconfigjson:‘ | awk ‘{print $NF}‘ | base64 -d

2、创建docker-registry类型的Secret

# 首先创建一个 docker-registry 类型的 Secret $ kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL # 然后在 Deployment 中引用这个 Secret spec: containers: - name: private-reg-container image: <your-private-image> imagePullSecrets: - name: my-secret

Pod 一直处于CrashLoopBackOff状态

此状态说明容器曾经启动了,但又异常退出。这时可以先检察一下容器的日志。

通过命令 kubectl logs 和 kubectl logs --previous 可以发下一些容器退出的原因,好比:容器进程退出、健康查抄掉败退出;此时如果还未发明线索,还而已到容器内执行命令(kubectl exec cassandra - cat /var.log/cassandra/system.log)来进一步检察退出原因;如果还是没有线索,那就需要SSH登录该Pod地址的Node上,检察Kubelet或者Docker的日志进一步排查。

Pod 处于 Error 状态

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32310.html