k8s基础5——Pod常用命令、资源共享机制、重启策略和健康检查、环境变量、初始化容器、静态pod

news2024/11/17 9:56:43

文章目录

  • 一、基本了解
  • 二、管理命令
  • 三、yaml文件参数大全
  • 四、创建pod的工作流程
  • 五、资源共享机制
    • 5.1 共享网络
    • 5.2 共享存储
  • 六、生命周期+重启策略+健康检查
  • 七、环境变量
  • 八、Init Containe初始化容器
  • 九、静态Pod

一、基本了解

概念:

  • Pod是一个逻辑抽象概念,是K8s创建和管理的最小单元,一个Pod由一个容器或多个容器组成。
  • 可以把Pod看成一个箱子,箱子里装的就是容器,每个箱子都是互相隔离的。

特点:

  • 一个Pod可以理解为是一个应用实例,提供服务。
  • Pod中容器始终部署在一个Node上。
  • Pod中容器共享网络、存储资源。

主要用法:

  • 运行单个容器:最常见的用法,在这种情况下,可以将Pod看做是单个容器的抽象封装。
  • 运行多个容器:边车模式(Sidecar) ,通过在Pod中定义专门容器,来执行主业务容器需要的辅助工作,其好处是将辅助功能同主业务容器解耦,实现独立发布和能力重用。

应用场景:

  • 日志收集
  • 应用监控

二、管理命令

注意事项:

  1. 和kubectl create deployment 命令相比,kubectl run 【Pod名称】命令更加单一,就相当于只运行了一个容器,前者可以生成多个副本等多项功能,后者没有,一般用于测试,正式环境还是用的前者。
功能命令
创建Podkubectl apply -f pod.yaml 或者 kubectl run nginx --image=nginx
查看Podkubectl get pods 或者 kubectl describe pod <Pod名称>
查看日志kubectl logs <Pod名称> [-c CONTAINER] 或者 kubectl logs <Pod名称> [-c CONTAINER] -f
进入容器终端kubectl exec -it <Pod名称> [-c CONTAINER] – bash
删除Podkubectl delete pod <Pod名称>
查看Pod里的所有容器kubectl get pod 【Pod名称】 -o jsonpath=“{.spec[‘containers’,‘initContainers’][*].name}”

三、yaml文件参数大全

参数释义是否必选
version版本号,例如v1必选
kind资源对象类型,例如pod、deployment、service必选
metadata元数据必选
metadata.name对象名称必选
metadata.namespace对象所属的命名空间,默认值为 default必选
metadata.labels自定义标签列表
metadata.annotation自定义注解列表
SpecPod 中容器的详细定义必选
spec.containers容器列表必选
spec.containers.name容器名称必选
spec.containers.image镜像名称必选
spec.containers.imagePullPolicy镜像拉取策略,可选值Always、Never、IfNotPresent,默认为Always。
Always:表示每次都尝试重新拉取镜像。
IfNotPresent:表示若本地有该镜像,则使用本地的镜像,若本地不存在则拉取镜像。
Never:表示仅使用本地镜像。
若存在以下设置,系统则将设置成默认设置imagePullPolicy=Always:
1、不设置 imagePullPolicy,也未指定镜像的tag。
2、不设置 imagePullPolicy,镜像tag为 latest。
3、启用了名为 AlwaysPulllmages 的准入控制器Admission Controller )
spec.containers.command容器的启动命令列表。
若不指定,则使用镜像打包时使用的启动命令。
spec.containers.args容器的启动命令参数列表。
spec.containers.workingDir容器的工作目录
spec.containers.volumeMounts挂载到容器内部的存储卷配置
spec.containers.volumeMounts .name引用在volumes部分定义的共享存储卷名称
spec.containers.volumeMounts.mountPath挂载到容器内的绝对路径
spec.containers.volumeMounts.readOnly设置是否为只读模式,默认为读写模式
spec.containers.ports容器需要暴露的端口号列表
spec.containers.ports.name端口名称
spec.containers.ports.containerPort容器内部端口
spec.containers.ports.hostPort暴露在宿主机上的端口,默认与containerPort相同,需要保证唯一性。
spec.containers.ports.protocol端口协议,默认为TCP,支持 TCP、UDP、SCTP
spec.containers.env容器运行前需设置的环境变量列表。
spec.containers.env.name变量名称
spec.containers.env.value变量值
spec.containersl.resources资源限制和资源请求的设置配置,用于资源配额和资源限制功能。
spec.containers.resources.limits资源限制值,允许容器内程序最大的使用资源。
spec.containers.resources.limits.cpuCPU 限制,可以写m也可以写浮点数,例如0.5=500m,1=1000m
spec.containers.resources.limits.memory内存限制,单位可以为 MiB、GiB 等
spec.containers.resources.requests容器资源请求值。
告诉k8s最小分配的资源,分配的节点必须能够满足requests指定的值。
spec.containers .resources.requests.cpuCPU请求,可以写m也可以写浮点数,例如0.5=500m,1=1000m
spec.containers.resources.requests.memo内存请求,单位可以为MiB、GiB 等。
spec.volumes共享存储卷列表
spec.volumes.name共享存储卷的名称。
可以定义多个 Volume,每个 Volume的 name 保持唯一。
容器定义部分的containers.volumeMounts.name 将引用该共享存储卷的名称。
类型有: emptyDir、hostPath、secret、nfs、iscsi等等。
spec.volumes.emptyDir类型为emptyDir 的存储卷。
表示与 Pod 同生命周期的-个临时目录,其值为一个空对象:emptyDir:{}
spec.volumes .hostPath类型为 hostPath的存储卷。
表示 Pod 容器挂载的宿主机目录,通过volumes.hostPath.path 指定
spec.volumes.hostPath.pathPod 容器挂载的宿主机目录
spec.volumes.secret类型为secret的存储卷,表示挂载集群预定义的secret对象到容器内部
spec.volumes.configMap类型为 configMap 的存储卷,表示挂载集群预定义的configMap对象到容器内部
spec.volumes.livenessProbe健康检查配置项。
当探测无响应几次之后,系统将自动重启该容器。可设值有:exec、httpGet 和 tcpSocket。
对一个容器仅需设置一种健康检查方法
spec.volumes.livenessProbe.exec健康检查方式之一,exec 方式
spec.volumes.livenessProbe.exec.commandexec 方式需要指定的命令或者脚本
spec.volumes.livenessProbe.httpGet健康检查方式之一,httpGet方式。需指定 path、port
spec.volumes.livenessProbe.tcpSocket健康检查方式之一,cpSocket 方式。
spec.volumes.livenessProbe.initialDelaySeconds容器启动完成后首次探测的时间,单位为s
spec.volumes .livenessProbe.timeoutSeconds健康检查的探测等待响应超时时间,单位为 s,默认值为 1s。若超过该超时时间设置,则将认为该容器不健康,会重启该容器。
spec.volumes .livenessProbe.periodSeconds健康检查的定期探测时间,单位为 s,默认 10s 探测一次。
spec.restartPolicy重启策略,可选值为Always、OnFailure,默认值为Always。
Always:Pod 一旦终止运行,则无论容器是如何终止的,kubelet 都将重启它。
OnFailure:只有 Pod 以非零退出码终止时kubelet 才会重启该容器。如果容器正常结束(退出码为 0),则 kubelet 将不会重启它。
Never:Pod 终止后,kubelet 将退出码报告给Master,不会再重启该 Pod
spec.nodeSelector节点标签,以 key:value 格式指定,Pod将被调度到具有这些Label的节点上。
spec.imagePullSecretspull 镜像时使用的 Secret 名称,以name:secretkey格式指定。
spec.hostNetwork是否使用主机网络模式,默认值为 false。
设置为true,表示容器使用宿主机网络,不再使用 Docker网桥。

四、创建pod的工作流程

基本了解:

  • Kubernetes基于list-watch机制的控制器架构,实现组件间交互的解耦。
  • 其他组件监控自己负责的资源,当这些资源发生变化时,kube-apiserver会通知这些组件,这个过程类似于发布与订阅。

流程图:
在这里插入图片描述
流程解析:
创建一个Pod命令为:kubectl run pod1 --image=nginx,命令执行过程步骤如下:

  1. kubectl向apiserver发送一个创建pod的请求,apiserver会将数据写到etcd(实线),etcd将接受数据情况反馈给apiserver(虚线)。
  2. scheduler调度器订阅apiserver,当apiserver有新事件时scheduler会第一时间收到,此时会根据算法选择一个节点加入分配到k8s-node1节点,并将选择结果告诉给apiserver,apiserver会将数据写到etcd(实线),etcd将接受数据情况反馈给apiserver(虚线)。
  3. k8s-node1节点上的kubelet收到apiserver分配到我这个节点的pod,kubelet调用docker api创建容器,汇报容器的状态。

注意事项:

  1. 从以上的流程中来看,缺少两个组件的使用。
    • kube-controller-manager # 负责一些控制器工作的,例如deployment
    • kube-proxy # 负载pod网络,例如service

情景模拟流程:

  1. 把apiserver 看成 “小卖铺老板”,etcd 看成 “仓库”,scheduler看成“送货员”,其他组件 看成 “学生”。
  2. 当老板接到货物时,会先把货物放进仓库,仓库返回给老板结果。
  3. 送货员根据算法规则算出货物要配送到哪个节点,将结果告诉老板。
  4. 老板根据每个组件学生的订阅要求,发布货物给各个订阅学生。
  5. 学生接收到货物后找docker api获取生成任务,并把结果返回给老板。
  6. 老板把情况记录到仓库里。

五、资源共享机制

5.1 共享网络

  • 共享网络:将业务容器网络加入到“负责网络的容器”实现网络共享。
    在这里插入图片描述

yaml文件示例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: test
  name: pod-net-test 
namespace: default
spec:
  containers:
  - image: busybox 
    name: test
    command: ["/bin/sh","-c","sleep 12h"]
  - image: nginx
    name: web

1.先尝试运行一个Pod,导出查看yaml文件。

[root@k8s-master bck]# kubectl  run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml
[root@k8s-master bck]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

2.尝试运行创建一个deployemnt,,导出查看yaml文件。

[root@k8s-master bck]# kubectl  create deployment web --image=nginx --dry-run=client --replicas=3 -o yaml > deploymnet.yaml
[root@k8s-master bck]# cat deploymnet.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}

3.对比两个命令导出的yaml文件,Pod为对象的内容就是以deployment为对象的最后一部分内容。
在这里插入图片描述
4.修改nginx.yaml文件内容,新增辅助容器busybox使其后台运行24小时不退出。

[root@k8s-master bck]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx    ##主容器。
    name: nginx
  - image: busybox   ##辅助容器。  
    name: bs
    command:
    - sleep
    - 24h

5.导入yaml文件,并查看Pod,其内部有两个容器就是nginx和busybox。

[root@k8s-master bck]# kubectl  apply  -f nginx.yaml 

在这里插入图片描述
6.进入Pod验证。没有使用-c参数指定进入哪个容器,就会提示这行。当一个Pod中有多个容器时,不指定进入容器就默认进入主容器。

[root@k8s-master bck]# kubectl  exec -it nginx -- bash

在这里插入图片描述
7.进入主容器验证。
在这里插入图片描述

8.进入辅助容器验证。可以监听到nginx的80端口,但是查看不到Nginx进程,是因为nginx和busybox容器是通过加入了Infra Container网络容器,该容器通过共用网络协议栈,使busybox容器和nginx容器里实现网络共享。而端口是属于协议栈中的一部分能看到,进程不属于协议栈内容就看不到。
在这里插入图片描述
9.查看Infra Container网络容器位置。
在这里插入图片描述
在这里插入图片描述

5.2 共享存储

  • 共享存储:容器通过数据卷共享数据。
    在这里插入图片描述

1.通过yaml文件定义数据卷。

[root@k8s-master bck]# cat nginx2.yaml 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx2
spec:
  containers:
  - image: nginx      ##主容器。
    name: nginx
    volumeMounts:       ## 数据卷挂载
    - name: log         ## 指定挂载的数据卷名称
      mountPath: /data  ## 数据卷挂载到容器中的路径
  - image: busybox    ##辅助容器。 
    name: bs
    command:
    - sleep
    - 24h
    volumeMounts:       ## 数据卷挂载
    - name: log         ## 指定挂载的数据卷名称
      mountPath: /data  ## 数据卷挂载到容器中的路径
  volumes:              ##定义数据卷
  - name: log           ##数据卷名称
    emptyDir: {}        ##数据卷类型

在这里插入图片描述
2.导入yaml文件,查看pod。

[root@k8s-master bck]# kubectl  apply  -f nginx2.yaml

在这里插入图片描述
3.进入nginx容器创建123.txt文件,之后退出进入bs容器里可以看到123.txt文件;进入bs容器创建456.txt文件,之后退出进入bs容器里可以看到456.txt文件。

在这里插入图片描述

六、生命周期+重启策略+健康检查

pod状态释义
Pending等待状态。
API Server 已经创建该 Pod,但在 Pod 内还有一个或多个容器的像没有创建,包括正在下载镜像的过程。
RunningPod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态
SucceededPod内所有容器均成功执行后退出,且不会再重启
FailedPod 内所有容器均已退出,但至少有一个容器为退出失败状态
Unknown由于某种原因无法获取该 Pod 的状态,可能由于网络通信不畅导致

重启策略:

  • Always:当容器终止退出后,总是重启容器,默认策略。
  • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
  • Never:当容器终止退出,从不重启容器。

健康检查3种类型:

  1. livenessProbe(存活检查):判断容器是否存活(Running状态)。若检查失败,则将杀死容器,再根据Pod的容器策略来操作。
  2. readinessProbe(就绪检查):判断容器服务是否可用(Ready状态),达到Ready状态的Pod才可以接收请求。如果在运行过程中Ready状态变为False,则系统自动将其从Service的后端Endpoint列表中隔离出去,后续再把恢复到Ready状态的Pod加回后端Endpoint列表,这样就能保证客户端在访问Service时不会被转发到服务不可用的Pod实例上。
  3. startupProbe(启动检查):检查成功才由存活检查接手,用于保护慢启动容器。适用于应用启动较慢的情况,就绪检查就不适用了,需要用启动检查。

健康检查支持的3种检查方法:

  1. httpget:通过容器的IP地址、端口号及路径调用HTTP Get方法,返回200-400范围状态码为成功。
  2. exec:执行Shell命令返回状态码是0为成功。
  3. tcpSocket:通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则表明容器健康。

1.创建deployment时,加入健康检查策略。

[root@k8s-master bck]# cat qingjun.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: qingjun
  name: qingjun
spec:
  replicas: 3
  selector:
    matchLabels:
      app: qingjun
  template:
    metadata:
      labels:
        app: qingjun
    spec:
      containers:
      - image: nginx
        name: nginx
        livenessProbe:    # 存活检查,重启容器
          httpGet:
           path: /index.html     #检查网页文件
           port: 80
          initialDelaySeconds: 10  #启动容器后多少秒后进行第一次健康检查
          periodSeconds: 30        #以后每间隔多少秒检查一次
        readinessProbe:            # 就绪检查,从Service中剔除容器
          httpGet:
           path: /index.html
           port: 80
          initialDelaySeconds: 10
          periodSeconds: 30

2.导入yaml文件,并创建service。

[root@k8s-master bck]# kubectl  apply -f qingjun.yaml 
[root@k8s-master bck]# kubectl  expose deployment qingjun --port=80 --target-port=80 --type=NodePort

3.此时查看svc的地址,集群内的三个副本都能监听到。
在这里插入图片描述
4.删除一个副本容器里的网页文件。
在这里插入图片描述
5.此时再查看service监听状态,被删除网页文件的副本容器IP地址监听消失,该容器日志也显示报错异常。这是就绪检查起作用。
在这里插入图片描述
在这里插入图片描述

6.过一段时间,该容器又重新生成,日志恢复,前端文件恢复。这是存活检查在起作用。
在这里插入图片描述
在这里插入图片描述

七、环境变量

为什么会有环境变量的用法?

  • 创建 Pod 时,可以为其下的容器设置环境变量。官网地址

应用场景:

  • 容器内应用程序获取Pod信息。
  • 容器内应用程序通过用户定义的变量改变默认行为。

变量值几种定义方式:

  • 自定义变量值。
  • 变量值从Pod属性获取。
  • 变量值从Secret、ConfigMap挂载获取。
设置方式可设置的参数释义
fieldRefmetadata.namePod名称
fieldRefmetadata.namespace
fieldRefmetadata.uidPod的UID,从Kubernetes 1.8.0-alpha.2版本开始支持。
fieldRefmetadata.labels[‘< KEY >’]Pod某个Label的值,通过< KEY >进行引用,从Kubernetes 1.9版本开始支持。
fieldRefmetadata.annotations[‘< KEY >’]Pod某个Annotation的值,通过< KEY >进行引用,从Kubernetes 1.9版本开始支持。
resourceFieldRefContainer级别的CPU Limit容器的CPU限制值
resourceFieldRefContainer级别的CPU Request。容器的CPU请求值
resourceFieldRefContainer级别的Memory Limit。容器的内存限制值
resourceFieldRefContainer级别的Memory Request。容器的内存请求值
resourceFieldRefContainer级别的临时存储空间(ephemeral-storage)Limit,从K8s 1.8.0-beta.0版本开始支持。
resourceFieldRefContainer级别的临时存储空间(ephemeral-storage)Request,从K8s 1.8.0-beta.0版本开始支持。
fieldRef字段metadata.labelsPod的Label列表,每个Label都以key为文件名,value为文件内容,每个Label各占一行。
fieldRef字段metadata.namannotationsPod的Annotation列表,每个Annotation都以key为文件名,value为文件内容,每个Annotation各占一行。
Pod元数据信息status.podIPPod的IP地址
Pod元数据信息spec.serviceAccountNamePod使用的ServiceAccount名称。
Pod元数据信息spec.nodeNamePod所在Node的名称,从Kubernetes 1.4.0-alpha.3版本开始支持。
Pod元数据信息status.hostIPPod所在Node的IP地址,从Kubernetes 1.7.0-alpha.1版本开始支持。

1.创建一个deployment,编辑yaml文件添加环境变量。

[root@k8s-master bck]# cat env.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: env
  name: env
spec:
  replicas: 3
  selector:
    matchLabels:
      app: qingjun
  template:
    metadata:
      labels:
        app: qingjun
    spec:
      containers:
      - image: nginx
        name: nginx
        env:
        - name: ABC
          value: "123"
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName     ##pod所在node节点的名称。
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name     ##pod名称。
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace     ##pod所在命名空间的名称。
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP          ##pod的IP地址。
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName       ##pod使用sa的名称。

2.导入yaml文件,进入容器,查看容器内环境变量。
在这里插入图片描述

八、Init Containe初始化容器

定义:

  • Init Container初始化容器用于初始化工作,执行完就结束,可以理解为一次性任务。
  • 初始化容器与应用容器本质上是一样的,但是仅运行一次就结束任务,并且必须在成功运行完成后,系统才能继续执行下一个容器。

特点:

  1. 支持大部分应用容器配置,但不支持健康检查。
  2. 运行方式与应用容器不同,优先应用容器执行。当有多个init container时,会按顺序逐个运行,并且只有前一个init container运行成功后才能运行后一个init container。在所有init container都成功运行后,K8s才会初始化Pod的各种信息,并开始创建和运行应用容器。

应用场景:

  • 环境检查:例如确保应用容器依赖的服务启动后再启动应用容器。
  • 初始化配置:例如给应用容器准备配置文件。

Pod内的容器类型:

  1. Infrastructure Container:基础容器
    • 维护整个Pod网络空间,镜像为pause。某节点上又多少个pause镜像容器,该节点上就有多少个pod。
  2. InitContainers:初始化容器
    • 先于业务容器开始执行
  3. Containers:业务容器
    • 并行启动

注意事项:

  1. Pod重新启动时,init container将会重新运行。
    • 情景一,init container的镜像被更新时,init container将会重新运行,导致Pod重启。仅更新应用容器的镜像只会使得应用容器被重启。
    • 情景二,Pod的infrastructure容器更新时,Pod将会重启。
    • 情景三,若Pod中的所有应用容器都终止了,并且RestartPolicy=Always,则Pod会重启。
  2. 也可以对init container设置资源限制、挂载卷和安全策略等。但资源限制的设置与应用容器略有不同。
    • 若多个init container都定义了资源请求/资源限制,则取最大的值作为所有init container的资源请求值/资源限制值。
    • Pod的有效(effective)资源请求值/资源限制值取以下二者中的较大值:
      • 所有应用容器的资源请求值/资源限制值之和。
      • initcontainer的有效资源请求值/资源限制值。
    • 调度算法将基于Pod的有效资源请求值/资源限制值进行计算,也就是说init container可以为初始化操作预留系统资源,即使后续应用容器无须使用这些资源。
    • Pod的有效QoS等级适用于init container和应用容器。
    • 资源配额和限制将根据Pod的有效资源请求值/资源限制值计算生效。
    • Pod级别的cgroup将基于Pod的有效资源请求/限制,与调度机制一致。
  • 测试初始化容器下载一个前端文件到本地并挂载共享目录,主容器从共享目录里下载前端文件。

1.创建一个Pod,编辑yaml文件。

[root@k8s-master bck]# cat init.yaml 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: init666
spec:
  ## 初始化容器
  initContainers:           ##定义初始化容器
  - image: busybox          ##容器镜像
    name: bs                ##容器名称
    command:                ##执行动作,下载访问aliang官网前端文件到/data/index.html,并共享/data目录。
    - wget
    - "-O"
    - "/data/index.html"
    - "https://www.aliangedu.cn"
    volumeMounts:       ## 数据卷挂载
    - name: log         ## 指定挂载的数据卷名称
      mountPath: /data  ## 数据卷挂载到容器中的路径
  ## 主容器
  containers:
  - image: nginx
    name: nginx
    volumeMounts:       ## 数据卷挂载
    - name: log         ## 指定挂载的数据卷名称
      mountPath: /usr/share/nginx/html/  ## 共享目录,此时该目录下也有下载的aliang官网前端文件。
  volumes: # 定义数据卷
  - name: log # 数据卷名称
    emptyDir: {} # 数据卷类型

2.导入yaml文件,查看Pod状态。先是运行初始化容器,再运行主容器。
在这里插入图片描述
3.进入容器内检查下载文件,验证成功。
在这里插入图片描述

九、静态Pod

为什么会有静态Pod?

  1. 只是一种使用kubeadm方式部署k8S集群的思路,和k8s集群没有直接关系,是分开的。
  2. 正常情况下,K8s集群搭建完成后才能创建Pod,而使用Kubeadm方式搭建集群时组件又需要使用Pod来启动,这时候就需要没有容器化的Kubelet来管理静态Pod,通过静态Pod拉起K8s组件,也就是master节点上/etc/kubernetes/manifests/目录下的yaml文件。
    在这里插入图片描述

静态Pod的特点:

  1. Pod由特定节点上的kubelet管理。
  2. 不能使用控制器,不能通过API Server进行管理,无法与ReplicationController、Deployment、DaemonSet进行关联,也无法对它们进行健康检查。
  3. Pod名称标识当前节点名称

实现方式:

  1. 配置文件方式。在kubelet配置文件/var/lib/kubelet/config.yaml中设置参数staticPodPath,指定需要监控的配置文件所在目录,kubelet会定期扫描该目录,并根据该目录下的.yaml或.json文件进行创建操作。
  2. HTTP方式。在kubelet配置文件中设置参数“–manifest-url”,kubelet将会定期从该URL地址下载Pod的定义文件,并以.yaml或.json文件的格式进行解析,然后创建Pod。

注意事项:

  1. 在kubelet配置文件启用静态Pod的参数:
    vi /var/lib/kubelet/config.yaml

    staticPodPath: /etc/kubernetes/manifests
  2. 将部署的pod yaml放到该目录会由kubelet自动创建。
  3. 业务层面上用不到静态Pod,都是从K8s集群层面上拉取Pod。

1.在master节点上查看这几个Pod名称是带有节点说明的,这些Pod就是静态Pod。

在这里插入图片描述
2.在node1节点上的/etc/kubernetes/manifests目录下添加pod.yaml文件后,会自动创建此pod。
在这里插入图片描述
3.也可以在master节点上查看此pod存在node1节点上。
在这里插入图片描述
4.讲该pod.yaml文件移到别的目录,该pod会自动被删除。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vben Admin 自学记录 —— Table组件的基本使用及练习(持续更新中...)

Table 表格 对 antv 的 table 组件进行封装 table相关使用及概念 练习 —— 画一个简单的包含增删改查的表格静态页面&#xff08;不包含相关逻辑和处理&#xff09; 之前相关记录&#xff1a; Vben Admin 自学记录 —— 介绍及使用 1.在之前添加的新路由模块中添加一个表…

TCP/IP网络编程(三)

TCP/IP网络编程读书笔记 第14章 多播与广播14.1 多播14.1.1 多播的数据传输方式及流量方面的优点14.1.2 路由&#xff08;Routing&#xff09;和 TTL&#xff08;Time to Live&#xff0c;生存时间&#xff09;&#xff0c;以及加入组的办法14.1.3 实现多播 Sender 和 Receiver…

使用mybatisX逆向生成数据表实体类(pojo,dao),mapper,service

先看使用mybatisX后生成的文件。 1.先在idea安装mybatisX插件&#xff0c;在file->setting->plugins&#xff0c;搜索mybatisX插件&#xff0c;重新启动idea即可。 2.在idea编辑器右侧点击Database&#xff0c;点击“”链接你的数据库类型&#xff0c;这里我选mysql。 输…

Vue核心 列表渲染 数据监视

1.13.列表渲染 1.13.1.基本列表 v-for指令 用于展示列表数据语法&#xff1a;&#xff0c;这里key可以是index&#xff0c;更好的是遍历对象的唯一标识可遍历&#xff1a;数组、对象、字符串&#xff08;用的少&#xff09;、指定次数&#xff08;用的少&#xff09; <!…

尚硅谷大数据技术NiFi教程-笔记01【NiFi(基本概念、安装、使用)】

视频地址&#xff1a;尚硅谷大数据NiFi教程&#xff08;从部署到开发&#xff09;_哔哩哔哩_bilibili 尚硅谷大数据技术NiFi教程-笔记01【NiFi&#xff08;基本概念、安装、使用&#xff09;】尚硅谷大数据技术NiFi教程-笔记02【NiFi&#xff08;使用案例&#xff0c;同步文件、…

Kafka 权威指南

Kafka 权威指南 这本书于 2021 年看完&#xff0c;2022 年又看了一遍&#xff0c;感觉书读百遍&#xff0c;其义自现。 这本书侧重于 Kafka 的理论知识&#xff0c;虽然书有点老&#xff0c;但是其中关于 Kafka 的基础知识的章节讲得确实不错&#xff0c;适合学习 Kafka 的新手…

深入篇【C++】类与对象:运算符重载详解 -上

深入篇【C】类与对象&#xff1a;运算符重载详解 -上 ⏰.运算符重载&#x1f553;Ⅰ.<运算符重载&#x1f550;Ⅱ.>运算符重载&#x1f552;Ⅲ.运算符重载&#x1f551;Ⅳ.运算符重载①.格式1.改进12.改进2 ②.默认成员函数1.功能2.不足 ⏰.运算符重载 内置类型(int /do…

二分法相关使用

文章目录 1. 在一个有序数组中,找某个数是否存在2. 在一个有序数组中,找大于等于某个数最左侧的位置3. 在一个有序数组中, 找小于等于某个数最右侧的位置4. 局部最大值问题 1. 在一个有序数组中,找某个数是否存在 在线OJ&#xff1a;704. 二分查找 有序数组下的二分思路如下:…

亚马逊:分布式计算宣言

文章目录 分布式计算宣言背景关键概念基于服务的模型基于工作流的模型和数据域应用概念跟踪状态变化对进行中的工作流程元素进行更改工作流程和 DC 客户订单处理 分布式计算宣言 创建时间&#xff1a; 1998 年 5 月 24 日 修订日期&#xff1a; 1998 年 7 月 10 日 背景 很…

uni-app nvue页面中使用video视频播放组件

我遇到的问题是&#xff0c;在nvue页面引用video组件&#xff0c;然后啥也没显示的&#xff0c;显示了无法控制播放&#xff0c;折腾了好久&#xff0c;在这里记录下来&#xff01;希望可以帮助到需要的人 我的代码是这样的&#xff08;src换成官方的举例&#xff09; <vi…

查看mysql数据库版本的方式(cmd命令和navicat)

目录 一、使用场景 二、查看方式 &#xff08;一&#xff09;cmd命令方式 &#xff08;二&#xff09;navicat16软件里面查看 &#xff08;三&#xff09;navicat试用版本查看的方式 一、使用场景 在有些时候需要调试系统的时候&#xff0c;就要看数据库的版本&#xff…

【致敬未来的攻城狮计划】— 连续打卡第二十三天:RA2E1的存储器基础知识

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

【MySQL】数据库基础操作一:建库与建表

目录 &#x1f31f;前言 &#x1f308;1、常见的关系型数据库 &#x1f31f;数据库的基本操作 &#x1f308;1、常用数据库的操作 &#x1f308;2、常用的数据类型 &#x1f308;3、表的基本操作 &#x1f345;创建表的一个小练习 &#x1f31f;前言 &#x1f…

基于Python的特征工程:数据预处理(一)

一、概述 特征工程是机器学习工作流程中不可或缺的一环&#xff0c;它将原始数据转化为模型可理解的形式。数据和特征的质量决定了机器学习的上限&#xff0c;而模型和算法则是逼近这个上限的手段。因此&#xff0c;特征工程的重要性不言而喻。其主要工作涉及特征的采集、预处…

干货 | 带你用Process完成中介效应检验

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 今天我们给大家介绍下平常常用的也很简单的操作&#xff0c;如何使用spss中process插件进行中介效应检验。 Process的功能很强大&#xff0c;它的下载也是免费开源的&#xff0c;在spss的…

springboot项目:瑞吉外卖 前后端 代码、思路 详细分析 part5

part1 part2 part3 part4 part5 本页 6 移动端短信发送和手机验证码登入 6.1 短信发送 6.2 手机验证码登入 6.1 短信发送 6.1.1整体分析 2. 3. 注册登入阿里云账户。找到短信服务&#xff0c;设置短信签名&#xff08;上面图片的阿里云、菜鸟裹裹、天猫…&#xff09;&…

体验 Dolly V2

体验 Dolly V2 1. 什么是 Dolly V22. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 部署 Dolly V26. 编写测试程序7. 运行测试程序 1. 什么是 Dolly V2 Databricks的dolly-v2-12b&#xff0c;是一个在 Databricks 机器学习平台上训练的指令跟随型大型语言模型&#xff0c;…

【2023/05/06】EDSAC

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第1天。 Share 去成为你本该成为的人&#xff0c;任何时候都不会太晚。 &#xff08;出处&#xff1a;乔治艾略特&#xff09; Day1 EDSAC&#xff1a;存储程序式计算机的开山之作。 part1 EDSAC&…

redis(3)

redis客户端登陆: redis-cli -h host -p port -a password String类型的应用场景: 1)String通常用于保存单个字符串或者JSON格式的字符串数据 2)因为String类型通常是二进制安全的&#xff0c;因此你完全可以把一个图片内容当作字符串来进行存储 3)计数器&#xff0c;是常规的k…

java错题总结(31-33页)

假定Base b new Derived&#xff08;&#xff09;; 调用执行_360笔试题_牛客网 ABDC 只要是被子类重写的方法&#xff0c;不被super调用都是调用子类方法 ------------------------------------------------------------------------------------------- --------…