kubectl查看日志命令(kubectl 查看yaml)

kubectl查看日志命令(kubectl 查看yaml)可以通过 kubectl explain 查看资源清单包含了那些字段 kubectl explain Pod 可以通过提供的 More info 网页查看具体的配置样例 apiVersion 定义了对象版本 Kind 定义了资源类型 matadata 定义了元属性信息 lt 资源名称 gt spec 定义了 Pod 的规格 具体容器信息 nbsp status

大家好,我是讯享网,很高兴认识大家。



可以通过 kubectl explain 查看资源清单包含了那些字段

kubectl explain Pod

查看k8s ingress收到的请求_运维
讯享网

可以通过提供的More info 网页查看具体的配置样例

apiVersion 定义了对象版本

Kind 定义了资源类型

matadata 定义了元属性信息 <资源名称>

spec 定义了Pod的规格,具体容器信息 

status 定义了状态,不可修改,不需要定义。

查看matadata对象该如何定义

kubectl explain Pod.metadata

查看对象该如何定义直接在后面.+对象名即可。

字段类型为 <string> 字符串

字段类型为 <Object> 对象

字段类型为 <map[string]string> map集合

字段类型为 <[]Object> 对象列表

 带有required 为必填 

查看k8s ingress收到的请求_linux_02

metadate:

  • labels 创建资源具有的标签
  • namespace 资源所属命名空间(默认default)

 spec: 

  • activeDeadlineSeconds  pod可运行的最长时间
  • affinity pod亲和性
  • containers 定义容器必填字段,至少要有一个容器
  • dnsConfig
  • dnsPolicy 

 pod.spec.containers 

  • args 
  • command
  • env
  • envFrom
  • image 用来指定容器需要的镜像
  • imagePullPolicy 镜像拉取策略,Always 一直重新拉取、Never 从不拉取镜像、IfNotPresent优先使用本地镜像,没有在拉取镜像。
  • name
  • ports 端口

pod.spec.containers.ports

  • containerPort 必须字段,端口号
  • hostIP 将容器中的服务暴露到宿主机的端口上时,可以指定绑定的宿主机 IP
  • hostPort 容器中的服务在宿主机上映射的端口
  • name 端口名称

样例:

k8s中物理集群中的虚拟集群。可以给不同用户、租户、环境或项目创建对应的命名空间。

命名空间的名称仅能是字母、数字、下划线、连接线等字符组成。

命名空间通过资源配额可以限制资源。

删除命名空间,级联下的资源对象也会被删除。

资源限额

命名空间可以通过ResourceQuota限制空间资源

kubectl explain resourcequotas

查看限额

kubectl get quota -n test

标签是一对 key/value, 被关联到对象。标签可以用来划分特定的对象,一个对象可以有多个标签。但是key值必须是唯一的。通过标签可以方便的对资源进行分组管理。k8s中大部分资源都可以打标签。

查看k8s ingress收到的请求_运维_03

查看k8s ingress收到的请求_linux_04

我们创建pod资源的时候,pod会根据schduler进行调度,那么默认会调度到随机的一个工作节点,如果我们想要pod调度到指定节点或调度到一些具有相同特点的node节点可以使用pod中的nodeName或nodeSelector字段指定调度到的节点

nodeName

kubectl explain pod.spec

通过nodeName 可以直接指定调度到那个节点

查看k8s ingress收到的请求_运维_05

样例:

 nodeSelector

通过node节点标签选择器,进行调度

查看k8s ingress收到的请求_java_06

 样例:

查看k8s ingress收到的请求_Pod_07

kubectl explain pod.spec.affinity

查看k8s ingress收到的请求_运维_08

node节点亲和性(nodeAffinity)

Node节点亲和性针对的是pod和node的关系,Pod调度到node节点的时候匹配的条件

preferredDuringSchedulingIgnoredDuringExecution (软亲和性)

requiredDuringSchedulingIgnoredDuringExecution (硬亲和性,必须满足)

查看文档可以获得填写规则

kubectl explain pod.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions

查看k8s ingress收到的请求_查看k8s ingress收到的请求_09

填写筛选条件 values 可以设置多个 满足其中一个即可。

查看k8s ingress收到的请求_linux_10

 样例:根据节点标签dome=test完成调度

Pod节点亲和性

kubectl explain pod.spec.affinity

pod 自身亲和性调度有两种表现形式

podAffinity (pod亲和性)

podAntiAffinity (pod反亲和性)

查看k8s ingress收到的请求_java_11

 使用pod亲和性必须添加位置拓扑键 topologyKey,完成调度的参照。

样例:

节点亲和性

节点反亲和性:

查看k8s ingress收到的请求_linux_12

给节点选择的主动权,我们给节点打个污点,不能容忍的pod就运行不上来。

污点是定义在节点上的键值属性数据。taints是键值对数据。

污点等级

  • NoSchedule (仅影响pod调度,后来的pod不容忍这个污点无法调度到该节点,已存在的pod不受影响)
  • NoExecute(既影响现有pod也影响pod调度,节点中现有pod会被剔除)
  • PreferNoSchedule (最好不也可以是NoSchedule的柔性版本)

污点容忍

kubectl explain pod.spec.tolerations

查看k8s ingress收到的请求_java_13

如果 operator 的值是 Exists,则 value 属性可省略
如果 operator 的值是 Equal,则表示其 key 与 value 之间的关系是 equal(等于)
如果不指定 operator 属性,则默认值为 Equal
另外,还有两个特殊值:

样例:

查看k8s ingress收到的请求_java_14

 pod的status简述了其生命周期的阶段。

挂起(pending): pod创建时调度条件不满足,多会处于此状态。

运行中(running): pod正常运行。

成功(succeeded): pod成功运行结束,并且不在重启

失败(failed): pod中容器异常终止,或者说容器以非0状态推出

未知(unknown):未知状态,pod所在节点kubelet故障未上报pod信息,

Evicted: 这种状态多见系统内存不足

CrashLoopBackOff: 容器启动又异常退出,重启次数过多也会出现此状态

Error 状态:Pod 启动过程中发生了错误

ready 代表pod的容器状态

问题排查命令

查看pod详情

kubectl describe pod  pod名称 (如果不是默认空间需要指定空间名)

查看pod容器日志

kubectl logs test-host -c test-host

pod重启策略(RestartPolicy)应用于pod内的所有容器,pod所在的node上的kubelet会进行判断和重启操作。某个容器异常推出或健康检测失败会。kubelet会根据重启策略进行操作

pod的重启策略包括: Always、OnFailure、Never 默认是Always

Always:当容器失败时,由kubelet自动重启该容器。

OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。

Never:不论容器运行状态如何,kubelet都不会重启该容器

示例:

pod中可以定义多个容器,部署应用的容器称为主容器。pod创建时可以有一个或多个先于主容器启动的init容器,init容器中的程序执行完了才会运行主容器,由于pod中共享存储,多用于主容器启动前的一些初始化工作

init容器与主容器区别:

1 init容器运行完,主容器才会启动。

2 每个init容器必须运行成功,才可以执行下一个init容器

3 如果init容器运行失败,pod会不断重启,知道运行成功,如果重启策略设置为Never,他不会重启

示例:

初始化容器启动之后,开始启动主容器,在主容器启动之前有一个post start hook(容器启动后钩子)和pre stop hook(容器结束前钩子),无论启动后还是结束前所做的事我们可以把它放两个钩子,这个钩子就表示用户可以用它来钩住一些命令,来执行它,做开场前的预设,结束前的清理,如awk有begin,end,和这个效果类似;

postStart:该钩子在容器被创建后立刻触发,通知容器它已经被创建。如果该钩子对应的hook handler执行失败,则该容器会被杀死,并根据该容器的重启策略决定是否要重启该容器,这个钩子不需要传递任何参数。

preStop:该钩子在容器被删除前触发,其所对应的hook handler必须在删除该容器的请求发送给Docker daemon之前完成。在该钩子对应的hook handler完成后不论执行的结果如何,Docker daemon会发送一个SGTERN信号量给Docker daemon来删除该容器,这个钩子不需要传递任何参数。

在k8s中支持两类对pod的检测,第一类叫做livenessprobe(pod存活性探测):

存活探针主要作用是,用指定的方式检测pod中的容器应用是否正常运行,如果检测失败,则认为容器不健康,那么Kubelet将根据Pod中设置的 restartPolicy来判断Pod 是否要进行重启操作,如果容器配置中没有配置 livenessProbe,Kubelet 将认为存活探针探测一直为成功状态。

第二类是状态检readinessprobe(pod就绪性探测):用于判断容器中应用是否启动完成,当探测成功后才使Pod对外提供网络访问,设置容器Ready状态为true,如果探测失败,则设置容器的Ready状态为false。

postStart:容器创建成功后,运行前的任务,用于资源部署、环境准备等。

preStop:在容器被终止前的任务,用于优雅关闭应用程序、通知其他系统等。

lifecycle

查看k8s ingress收到的请求_运维_15

查看k8s ingress收到的请求_java_16

而在容器终止之前,发送HTTP警告请求到监控系统。

优雅的删除资源对象

当用户请求删除含有pod的资源对象时(如RC、deployment等),K8S为了让应用程序优雅关闭(即让应用程序完成正在处理的请求后,再关闭软件),K8S提供两种信息通知:

1)、默认:K8S通知node执行docker stop命令,docker会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认超时时间(30s),会继续发送SIGKILL的系统信号强行kill掉进程。

2)、使用pod生命周期(利用PreStop回调函数),它执行在发送终止信号之前。默认情况下,所有的删除操作的优雅退出时间都在30秒以内。kubectl delete命令支持–grace-period=的选项,以运行用户来修改默认值。0表示删除立即执行,并且立即从API中删除pod。在节点上,被设置了立即结束的的pod,仍然会给一个很短的优雅退出时间段,才会开始被强制杀死。

当用户创建pod时,这个请求给apiserver,apiserver把创建请求的状态保存在etcd中;接下来apiserver会请求scheduler来完成调度,如果调度成功,会把调度的结果(如调度到哪个节点上了,运行在哪个节点上了,把它更新到etcd的pod资源状态中)保存在etcd中,一旦存到etcd中并且完成更新以后,节点上的kubelet通过apiserver当中的状态变化知道有一些任务被执行了,所以此时此kubelet会拿到用户创建时所提交的清单,这个清单会在当前节点上运行或者启动这个pod,如果创建成功或者失败会有一个当前状态,当前这个状态会发给apiserver,apiserver在存到etcd中;在这个过程中,etcd和apiserver一直在打交道,不停的交互,scheduler也参与其中,负责调度pod到合适的node节点上,这个就是pod的创建过程。

三种探测方法:

1、ExecAction:在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。

2、TCPSocketAction:通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。

3、HTTPGetAction:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康

K8S提供livenessProbe来检测容器是否正常运行,许多应用程序经过长时间运行,最终过渡到无法运行的状态。这时候检测到容器异常,kubelet会根据重启策略重启容器。

示例:

Exec:

查看k8s ingress收到的请求_Pod_17

http 

查看k8s ingress收到的请求_运维_18

没有配置就绪性探测,pod中容器运行后默认成功。

就绪性探测和存活性探测配置方法类似。

区别在于:

存活性探测失败后会由kubelet根据重启策略操作pod.

就绪性探测失败后会从EndPoint中移除。

存活性探测和就绪性探测配合使用案例:

查看k8s ingress收到的请求_查看k8s ingress收到的请求_19

小讯
上一篇 2025-05-12 18:18
下一篇 2025-05-30 23:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/155117.html