Pod由一个或者多个容器组成,这里的容器通常指的是运行应用程序的业务容器。但是Pod中除了业务容器外,还有基础容器、初始化容器和临时容器。 ...因为当Pod中的容器异常退出或者容器镜像不包含调试工具时,例如没有shell时,会导致命令“kubectl exec”无法使用。这时候临时容器对于交互式故障排查很有用。 ...下面是Kubernetes官方提供的一个临时容器是示例。(1)使用镜像“k8s.gcr.io/pause:3.1”创建一个Pod。...(2)使用命令“kubectl exec”创建shell进入容器。...OCI runtime exec failed: exec failed:container_linux.go:346: starting container process caused "exec:
目录 为什么要用Kubernetes? K8s控制节点-Master概念 K8s计算节点-Node概念 什么是Pod? 为什么要引入Pod?...的使用 为什么要用Kubernetes?...不推荐使用Iptables的原因是:当我们的规则特别多的时候,它的性能就会急剧下降 其他组件 Calico:符合CNI标准的网络插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由器。...-64c6c494dc-lhkl2_kube-system_517b9ab1-a323-4530-8be4-ebd3a7d41de4_1 为什么要引入Pod?...failed: exec failed: container_linux.go:380: starting container process caused: exec: "pgrep nginx":
名字已经变了,说明pod已经重启了,且pod里面有两个容器 % kubectl get pods -n inject NAME READY STATUS...OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec...-n inject inject-594c785fb6-tlhns -c nginx -- ps -ef OCI runtime exec failed: exec failed: container_linux.go...:380: starting container process caused: exec: "ps": executable file not found in $PATH: unknown command...00:00:00 ps -ef 同理我们到istiod pod里面看下启动的进程 % kubectl exec -it -n istio-system istiod-76d66d9876-hgsmt
这意味着虽然可以想以前一样运行应用程序的容器,但不能在容器运行的时候进入容器内。这是一个重大的安全改进,因为你现在已经为黑客通过 shell 进入你的容器关上了大门。...我在代码仓中创建了一个 kubernetes.yaml 文件,该文件包含使用我们构建的镜像的 Deployment 和 负载均衡的 Service。...我们得到了 Hello World!。这表明 Flask 应用程序在正常工作。...然而,让我们试着在容器中执行 exec: $ kubectl exec -it flask-deployment-576496558b-hnbxt /bin/bash OCI runtime exec...failed: exec failed: container_linux.go:349: starting container process caused "exec: \"/bin/bash\":
由于本文篇幅过大,下图是本文涵盖的一些内容,方便大家从总到分的进行理解和学习: 为什么要有Pod Pod是什么?...Pod的生命周期只跟Pause容器一致,与其他应用容器无关 为什么要有Pod的存在?...container级别,Pod整体资源的配置是由Container的配置值累加得到。...requests BestEffort类别:Pod中没有设置requests和limits 为什么要进行Pod QoS划分?...如果启动探测失败,kubelet会杀死容器并根据重启策略进行重启 存活探针livenessProbe apiVersion: v1 kind: Pod metadata: name: liveness-exec
2.2 探测成功 (1)http/https, 返回码 【200~400),左闭右开,不包括400; (2)tcp 端口,端口探测畅通; (3)exec 执行命令,返回码为0; 探测失败,正好是相反,不再赘述...后续出现pod 异常,便于分析。 四 FAQ (1)为什么我的pod 重启?...分析要点: (1)describe pod分析状态码 (2)get ev 看当前事件 (3)get node 看node 状态 (4)logs -p 查看历史pod 日志 (2)为什么探测失败,pod没有重启...分析要点:重点分析probe 配置参数,达到失败阈值才会重启 (3)为什么只有这个pod 重启? 分析要点:建议结合FAQ 1 及业务日志综合排查。 (4)Pod没有健康检查,为啥也会重启?...(5)node 重启导致的pod restart 略 (6)调试撒手锏 分析要点: (1)手动更新pod 启动命令,如sleep infinity , 保持pod前台运行 (2)exec 进入pod,手动运行业务
知道整个集群所有节点的资源情况,对于 pod 的调度和正常运行至关重要 kubectl: 命令行接口,用于对 Kubernetes 集群运行命令 https://kubernetes.io/zh/docs...K8s 功能的早期候选版本,可能包含 Bug,最终不一定进入 K8s beta 已经过测试的版本,最终会进入 K8s,但功能、对象定义可能会发生变更。...进入 Pod 内的容器 $ kubectl -n exec pod_name> -c -ti /bin/sh 查看 Pod 内容器日志,...CPU 内核数量,然后将这个数量乘以 1000,得到的就是节点总 CPU 总毫数。...内所有容器均已退出,但至少有一个容器退出为失败状态 | | CrashLoopBackOff | Pod 内有容器启动失败,比如配置文件丢失导致主进程启动失败 | | Unknown | 由于某种原因无法获取该
,如下进入pod为test-pod1里的容器nginx1和bs1kubectl exec -it test-pod1 -c nginx1 -- bashkubectl exec -it test-pod1...[*].name}# 进入某个pod里的容器kubectl exec -it goweb-demo-686967fd56-556m9 -c goweb-demo -n test-a -- bash# 进入容器后...如果 Pod 对应的 restartPolicy 值为 "Never",并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。...紧接着是第三阶段,状态变成了CrashLoopBackOff,对于这个状态,我的理解是,初始化容器运行失败了,准备再次运行。...,则Kubernetes会将整个Pod状态设置为失败。
一旦开始在集群节点中创建 Pod,首先就会进入 Pending 状态,只要 Pod 中的所有容器都已启动并正常运行,则 Pod 接下来会进入 Running 状态,如果 Pod 被要求终止,且所有容器终止退出时的状态码都为...0,Pod 就会进入 Succeeded 状态。...如果进入 Failed 状态,通常有以下3种原因。 Pod 启动时,只要有一个容器运行失败,Pod 将会从 Pending 状态进入 Failed 状态。...在要求 Pod 正常关闭的时候,只要有一个容器退出的状态码不为0,Pod 就会进入 Failed 状态。...我给的建议如下: 如果容器中的进程能够在遇到问题或异常的情况下自行崩溃,就像刚才的 Nginx 容器,那么不一定需要存活探针,kubelet 会根据 Pod 的重启策略自动执行正确的操作。
前言 绝大多数的kubernetes集群都有这个隐患。只不过一般情况下,泄漏得比较慢,还没有表现出来而已。 一个pod可能泄漏两个memory cgroup数量配额。...即使pod百分之百发生泄漏, 那也需要一个节点销毁过三万多个pod之后,才会造成后续pod创建失败。 一旦表现出来,这个节点就彻底不可用了,必须重启才能恢复。...SCF发现很多节点会出现类似以下报错,创建POD总是失败: Dec 24 11:54:31 VM_16_11_centos dockerd[11419]: time="2018-12-24T11:54:...b98d4aea818bf9d1d1aa84079e1688cd9b4218e008c58a8ef6d6c3c106403e7b/start returned error: OCI runtime create failed: container_linux.go...from=groupmessage 不过按照文中的复现方法,我在3.10.0-862.9.1.el7.x86_64版本内核上并没有复现出来。 经过反复尝试,总结出了必现的复现条件。
在网络命名空间中访问虚拟服务 上面只是在 Host 的网络命名空间中进行测试,现在我们进入网络命名空间 netns_leah 中进行测试: $ ip netns exec netns_leah curl...至于为什么要这么做,目前我还不清楚,我猜测可能是因为网桥 bridge_home 不会调用 IPVS,而将虚拟服务的 IP 地址分配给一个网络接口则可以绕过这个问题。...:8080 还是失败了。。。...然后我花了一个下午的时间,终于搞清楚了启用混杂模式后为什么还是不能解决这个问题,因为混杂模式和下面的选项要一起启用才能对 IPVS 生效: $ sysctl --write net.ipv4.vs.conntrack...参考文章 为什么 kubernetes 环境要求开启 bridge-nf-call-iptables ?
最近和读者朋友聊天,聊起写文章无法带来收益的问题,确实,我这种小博主写文章基本没什么收益,所以开了文中广告,请大家见谅(虽然只有几毛收益)。目前写文章就是我的业余爱好,只是在不断努力提升文章内容质量。...所以大家可以和我交流下自己的看法,在运维开发领域那些知识是比较关注的呢,近期会努力准备出课程,提前预约的朋友可以得到最优惠的价格!大致就以下名片里的四部分。...如果存活探针检查失败,意味着容器无法继续运行,因此Kubernetes会采取措施重启该容器。 官网解释:指示容器是否正在运行。...如果就绪态探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。初始延迟之前的就绪态的状态值默认为 Failure。...failureThreshold 表示在认定探针失败之前,探针需要连续失败的最小次数。 httpGet, tcpSocket, exec 和 grpc 分别表示不同的探针检查方式。
Pod的周期 Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少 其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以 失败状态结束而进入 Succeeded...在 Kubernetes API 中,Pod 包含规约部分和实际状态部分。...如果你使用 kubectl 来查询包含 Running 状态的容器的 Pod 时,你也会看到 关于容器进入 Running 状态的信息。...如果你使用 kubectl 来查询包含 Terminated 状态的容器的 Pod 时,你会看到 容器进入此状态的原因、退出代码以及容器执行期间的起止时间。...使用livenessProbe中的exec探测 apiVersion: v1 kind: Pod metadata: name: liveness-exec-pod namespace: default
如果想要管理有状态应用, 他是不的 ,为什么呢? 首先, 他的设计初衷就是为了管理无状态应用的, 基本上就没考虑过有状态应用。...在默认 Pod 管理策略(OrderedReady) 时使用滚动更新, 可能进入需要人工干预才能修复的损坏状态。...我们使用 kubectl exec 命令进入到容器中查看它们的 hostname kubectl exec web-0 -- sh -c 'hostname'得到的内容就是web-1和web-0 。...service访问pod的方式来探讨StatefulSet 当我们把这两个 Pod 删除之后,Kubernetes 会按照原先编号的顺序,创建出了两个新的 Pod。...为什么pod重建后数据不会丢失 其实,我和你分析一下 StatefulSet 控制器恢复这个 Pod 的过程,你就可以很容易理解了。
一、发现问题 在一次系统上线后,我们发现某几个节点在长时间运行后会出现CPU持续飙升的问题,导致的结果就是Kubernetes集群的这个节点会把所在的Pod进行驱逐(调度);如果调度到同样问题的节点上,...为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?...排查问题 定位到有问题的Pod后,使用kubectl exec进入Pod容器内部: kubectl -n app exec -it 49a89b2f-73c6-40ac-b6de-c6d0e47ace64...比如从上面得到了线程ID,使用如下命令进入线程,如ID 12262: [arthas@1]$ thread -n 12262 打印出线程日志: [arthas@1]$ thread -n 12262 "...也加深了对Kubernetes集群调试的能力 [加油]。
】exec连接未关闭导致的事件阻塞,分别介绍了两种可能导致Pod Terminating的原因。...Pod Terminating 前一阵有客户反馈使用docker18版本的节点上Pod一直处在Terminating状态,客户通过查看kubelet日志怀疑是Volume卸载失败导致的。...Pod Terminating,随便起一个容器(例如CentOS),并通过exec进入容器并退出,这时去查看docker的堆栈(发送SIGUSR1信号给dockerd),如果发现如下有一条堆栈信息:...:125 +0x34b 之后可以使用《【Pod Terminating原因追踪系列之二】exec连接未关闭导致的事件阻塞》中介绍的方法,确认一下该条堆栈信息是否是刚刚创建的CentOS容器产生的,当然从堆栈的时间上来看很容易看出来...,如果发现gRPC连接返回状态码为UNKNOWN或者NOT_SERVING时对失败次数加1,当失败次数大于域值(域值为3)并且containerd进程已经down掉(通过向进程发送信号进行判断),则会重启
可以通过 kubectl logs 查看 Pod 的日志。 Failed(失败) 至少有一个容器没有正常退出,以失败告终。...ImagePullBackOff 容器尝试拉取镜像失败,并且 Kubernetes 将在一段时间后进行重试。 ErrImagePull 容器无法拉取指定的镜像。...CrashLoopBackOff 容器已经崩溃,并且 Kubernetes 将在一段时间后进行重试。通常是由于容器崩溃导致的,然后容器被重新启动。 Init:Error Init 容器初始化失败。... ubuntu@VM-16-3-ubuntu:~$ 某些POD中的容器也开放了shell的访问权限,因此可以通过kubectl exec的命令进入POD...『分享』你的每个『赞』和『在看』,我都喜欢!
kubernetes Pod 的生命周期(Readiness and liveness and startupProbe) 容器探针 为什么要使用readiness and liveness?...就陷入死循环了,因为启动之后经过10s探测发现不正常就会更具重启策略进行重启Pod,一直进入死循环。...initialDelay:10 periodSeconds: 10 我们这只成这样的话,只要服务在1010=100s内任何时候启动来都行,探针探测成功后就交给livenessProbe进行继续探测了,当我们发现问题的时候...: 容器未通过测试 3, 未知: 测试失败,因此不会采取任何动作 探针示例: ExecAction # cat nginx.yaml apiVersion: v1 kind: Pod metadata:...kubelet, 192.168.1.124 Started container 很明显的从事件信息里面可以看到他服务探测有一次是报错404的,然后立马就执行了重启容器的过程 探针参数介绍: exec
当我们在生产环境发布应用时,必须要考虑到当前系统还有用户正在使用的情况,所以尽量需要做到不停机发版。...如果 v2 版本启动失败 v1 版本不会做任何操作,依然能对外提供服务。...这样一旦我们更新了 Pod 的镜像时,kubernetes 就会先创建一个新版本的 Pod 等待他启动成功后再逐步更新剩下的 Pod。...优雅停机 滚动升级过程中不可避免的又会碰到一个优雅停机的问题,毕竟是需要停掉老的 Pod。 这时我们需要注意两种情况: 停机过程中,已经进入 Pod 的请求需要执行完毕才能退出。...containers: - name: example-container image: example-image lifecycle: preStop: exec
一直以来我对优雅地停止 Pod 这件事理解得很单纯:不就利用是 PreStop Hook 做优雅退出吗?...比如说我们起一个微服务,网关把一部分流量分给我们,这时: 假如我们一声不吭直接把进程杀了,那这部分流量就无法得到正确处理,部分用户受到影响。...PreStop Hook 回到 Kubernetes(下称 K8s),当我们想干掉一个 Pod 的时候,理想状况当然是 K8s 从对应的 Service(假如有的话)把这个 Pod 摘掉,同时给 Pod...最后我们串起来再整个表述一下 Pod 退出的流程(官方文档里更严谨哦): 1. 用户删除 Pod。 2. 2.1. Pod 进入 Terminating 状态。 2.2....这个过程很不错,但它存在一个问题就是我们无法预测 Pod 会在多久之内完成优雅退出,也无法优雅地应对“优雅退出”失败的情况。而在我们的产品 TiDB Operator 中,这就是一个无法接受的事情。
领取专属 10元无门槛券
手把手带您无忧上云