k8s------Pod、Label、NameSpace

发布时间:2024年01月19日

一、Pod: Kubernetes中的最小调度对象

1.1 说明

Pod(容器组)是k8s创建和调度的最小单元。一个Pod封装多个容器(container)、存储资源(volume)、一个独立网络ip和管理控制容器运行方式。

Pod可以单独运行一个容器,也可以兼容多个容器运行,多个容器共享资源。

1.2 Pod创建

yaml示例:创建一个名为nginx的Pod,这个Pod中包含一个名为container-0的容器,使用nginx:alpine镜像,使用的资源为100m core CPU、200Mi内存。

  • metadata:一些名称/标签/namespace等信息。
  • spec:Pod实际的配置信息,包括使用什么镜像,volume等。

?Pod定义好后就可以使用kubectl创建,如果上面YAML文件名称为nginx.yaml,则创建命令如下所示,-f表示使用文件方式创建。

$ kubectl create -f nginx.yaml
pod/nginx created

1.3 Pod信息查询

Pod创建完成后,使用命令查询Pod状态

?$ kubectl get pods
NAME ? ? ? ? ? READY ? STATUS ? ?RESTARTS ? AGE
nginx? ? ? ? ? ? ? 1/1? ? ? ? ? ? ?Running? ? ? ? ? ? ?0 ? ? ? ? ?40s

READY为1/1,表示这个Pod中有1个容器,其中1个容器的状态为Ready。

-o 表示输出形式
name:仅打印资源名称而不打印其他内容。
wide:以纯文本格式输出额外信息,对于 Pod 来说,输出中包含了节点名称。
示例
kubectl get pods -A -o=wide:获取所有 Pod 的详细信息,包括节点名称。
kubectl get pods -A -o=yaml:获取所有 Pod 的 YAML 格式信息。
kubectl get pods --sort-by=.metadata.name:按名称排序输出所有 Pod。
kubectl get pods -o custom-columns=NAME:.metadata.name,RESC:.metadata.resourceVersion:根据自定义列名输出 Pod 的名称和资源版本。

使用kubectl describe命令查看Pod的详情。

$ kubectl describe pod nginx?

1.4 Pod删除

????????删除pod时,Kubernetes终止Pod中所有容器。 Kubernetes向进程发送SIGTERM信号并等待一定的秒数(默认为30)让容器正常关闭。如果它没有在这个时间内关闭,Kubernetes会发送一个SIGKILL信号杀死该进程。?

按名删除Pod

$ kubectl delete po nginx pod1 pod 2
pod "nginx" deleted

删除所有Pod。

$ kubectl delete po --all
pod "nginx" deleted

根据Label删除Pod

$ kubectl delete po -l app=nginx
pod "nginx" deleted

1.5 使用环境变量

配置spec.containers.env字段

?查询环境变量

1.6 容器启动命令

启动容器就是启动主进程,启动前需要的前置操作可以通过,CMD或ENTRYPOINT完成,示例使用Dockerfile中设置ENTRYPOINT ["top", "-b"]

FROM ubuntu
ENTRYPOINT ["top", "-b"]

实际使用时,只需配置Pod的containers.command参数,该参数是list类型,第一个参数为执行命令,后面均为命令的参数。?

1.7?容器的生命周期

容器生命周期钩子,完成容器前后命令操作处理。

  • 启动后处理(PostStart):容器启动后触发。
  • 停止前处理(PreStop):容器停止前触发。

?实际使用时,只需配置Pod的lifecycle.postStart或lifecycle.preStop参数,如下所示。

二、存活探针(Liveness Probe 监控检查)

2.1 背景介绍

? ? ? ? k8s的自愈能力只能保证Pod崩溃后重启,但是如内存泄漏,JVM进程存活,但是容器进程不可用,无法自愈,提供存活探针完成容器健康检查。分成三种探测机制:

  • HTTP GET:向容器发送HTTP GET请求,如果Probe收到2xx或3xx,说明容器是健康的。
  • TCP Socket:尝试与容器指定端口建立TCP连接,如果连接成功建立,说明容器是健康的。
  • Exec:Probe执行容器中的命令并检查命令退出的状态码,状态码为0说明容器是健康的。

2.2 HTTP GET

????????

2.3 TCP Socket

2.4 Exec?

2.5 高级配置

  • delay:延迟,delay=0s,表示在容器启动后立即开始探测,没有延迟时间
  • timeout:超时,timeout=1s,表示容器必须在1s内进行响应,否则这次探测记作失败
  • period:周期,period=10s,表示每10s探测一次容器
  • success:成功,#success=1,表示连续1次成功后记作成功
  • failure:失败,#failure=3,表示连续3次失败后会重启容器

?

三、Label

3.1 为什么需要Label

Pod过多时管理起来不方便,通过Label可以进行标记分类。

标签管理分类前:

标签管理分类后:

3.2 添加Label

Label 是key-Value形式,示例如下:

--show-labels 查询时展示Label信息

-L只查询固定标签

?对已存在的Pod,直接使用kubectl label命令直接添加Label。

修改Label

四、NameSpace

4.1 目的

使用NameSpace主要是可以把资源进行分组。组织上划分,对运行的对象来说,它不能做到真正的隔离。举例来说,如果两个Namespace下的Pod知道对方的IP,而Kubernetes依赖的底层网络没有提供Namespace之间的网络隔离的话,那这两个Pod就可以互相访问。

?4.2 指定NameSpace查询

coredns是用于做服务发现、everest-csi是用于对接存储服务、icagent是用于对接监控系统。

kube-system这个命名空间中,能够做到与其他Pod之间隔离。

4.3 创建Namespace

apiVersion: v1?
kind: Namespace?
metadata:?
? name: custom-namespace?

使用kubectl命令创建。

$ kubectl create -f custom-namespace.yaml
namespace/custom-namespace created

您还可以使用kubectl create namespace命令创建。

$ kubectl create namespace custom-namespace?
namespace/custom-namespace created

在指定Namespace下创建资源。

$ kubectl create -f nginx.yaml -n custom-namespace?
pod/nginx created

?

文章来源:https://blog.csdn.net/qq_16803227/article/details/135689141
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。