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

文章目录

  • 一、基本了解
  • 二、管理命令
  • 三、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会自动被删除。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode4. 寻找两个正序数组的中位数

写在前面&#xff1a; 题目链接&#xff1a;LeetCode4. 寻找两个正序数组的中位数 编程语言&#xff1a;C 题目难度&#xff1a;困难 一、题目描述 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中…

PMP课堂模拟题目及解析(第6期)

51. 管理层将一个国际项目分配给一位新项目经理。这是该项目经理第一次与团队合作&#xff0c;团队成员位于两个国家&#xff0c;数量平均分布&#xff0c;一个团队由最合适作为个人工作的成员组成&#xff0c;另一个团队由最适合作为团队工作的成员组成。项目经理该怎么做&am…

面试题——selenium原理解析、appium原理解析

这里写目录标题 一、selenium原理解析1、目的2、技术点3、Selenium 介绍4、Selenium 自动化测试5、为什么能够支持这么多种浏览器&#xff1f;6、Selenium 工作原理 二、appium原理解析1、目的2、技术点3、Appium 介绍4、Appium 工作原理 一、selenium原理解析 1、目的 了解是…

配置JDK环境变量

文章目录 查看电脑系统下载及安装JavaSE配置系统环境变量测试环境变量配置是否成功。 查看电脑系统 运行输入框中输入&#xff1a;control 下载及安装JavaSE 这个从网上下载就行&#xff0c;jdk-8u141-windows-x64.exe&#xff0c;不提供下载方式了。 主要讲解安装过程&a…

洗稿用什么软件-洗稿软件免费

洗稿文章的主要优势 洗稿文章的主要优势在于提高文章的质量和效率。以下是洗稿文章的几个主要优势&#xff1a; 优化结构和语言 洗稿可以删除冗余、无用和重复的内容&#xff0c;同时对文章的结构和语言进行优化&#xff0c;提高文章的可读性和吸引力。这可以使文章更加专业…

操作系统内存管理笔记

计算机的硬件设备 计算机的硬件设备中&#xff0c;有三个部件最为关键&#xff0c;它们分别是中央处理器CPU、内存和I/O控制芯片。 系统软件 系统软件可以分成两块&#xff0c;一块是平台性的&#xff0c;比如操作系统内核、驱动程序、运行库和数以千计的系统工具&#xff1…

单片机的电子秤方案设计

电子秤是一种利用电子技术实现重量计量的设备&#xff0c;广泛应用于商业、工业、医疗、科学研究等领域。电子秤是一种高精度的计重装置&#xff0c;不仅精度高&#xff0c;而且使用方便、稳定可靠。下面&#xff0c;我们从结构设计、工作原理、功能参数、产品种类四个方面来介…

cout源码浅析

目录 cout源码浅析 那么对于没有定义在这之中的要怎么办呢&#xff1f; 实际使用 结语 首先来看我从cplusplus中截取的这张图&#xff1a; 注意最下面这一行字。cout其实是ostream的一个标准对象object。而上面则演示了一些继承关系。 好的&#xff0c;理解了之后&#xf…

造轮子系列】面试官问:你能手写Vuex吗(一)?

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 Vuex 是 Vue.js 的状态管理模式&#xff0c;它主要解决了组件之间共享状态时的问题。在本文…

【markdown工具配合图床】PicGo图床配置教程,一秒读懂配置

前言 看到这篇文章的大佬&#xff0c;我默认大家都会配置git&#xff0c;已经配置好ssh公钥。 此时你看到的这篇文章就是基于markdown工具&#xff08;VSCode&#xff0c;Typora&#xff09;编写的。 PicGo作为图床转换工具&#xff0c;并配合gitee作为图片服务器&#xff0…

搭建Serv-U FTP服务器共享文件并外网远程访问「无公网IP」

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自内网穿透工具的文章&#xff1a;使用Serv-U搭建FTP服务器并公网访问【内网穿透】 1. 前言…

【Vue面试题】Vue2.x生命周期?

文章目录 1.有哪些生命周期&#xff08;系统自带&#xff09;?beforeCreate( 创建前 )created ( 创建后&#xff09;beforeMount (挂载前)mount (挂载后)beforeUpdate (更新前)updated (更新后)beforeDestroy&#xff08;销毁前&#xff09;destroy&#xff08;销毁后&#xf…

vue3:自定义指令

一、理解vue指令 1.1、指令 在 vue 中提供了一些对于页面和数据更为方便的输出&#xff0c;这些操作就叫做指令&#xff0c;以 v-xxx 表示&#xff0c;比如 html 页面中的属性 <div v-xxx ></div>。自定义指令很大程度提高了开发效率&#xff0c;提高了工程化水平…

git简介和使用、基础命令

文章目录 一、git的安装与配置二、Git工作区原理三、Git的使用和仓库的创建四、Git的常用操作五、配置公钥六、IDEA中配置Git 一、git的安装与配置 https://tortoisegit.org/ 下载对应版本安装即可 注意&#xff1a;配置中输入邮箱和密码一定要和自己的git账户一致 git的配置…

面试华为测试岗,收到offer后我却毫不犹豫拒绝了....

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是2年。我想说的是&#xff0c;但凡有点机会&#xff0c;千万别去外包&#xff01; 在深思熟虑过后&am…

【模拟IC学习笔记】 反馈

反馈的作用&#xff1a;增益灵敏度降低 采用开环的方式实现一个精确的增益比较困难&#xff0c;但是可以实现高增益。 增益灵敏度衍生出来的另外两个特点 1、增加系统带宽。 2、改变输出阻抗&#xff0c;提高驱动能力。 反馈的作用&#xff1a;增加带宽 带宽的增加来源于…

ChatGPT实现markdown 格式与 emoji 表情

markdown 格式与 emoji 表情 书写文章时&#xff0c;巧妙的使用一些小图标&#xff0c;可以给文章增加不少的灵动感&#xff0c;读者也会感觉更加轻松。恰当的图标也能增进读者对内容的理解。ChatGPT 目前不能直接联网&#xff0c;但可以使用 emoji 表情文字来达到类似的效果。…

C++之数据对齐

目录 关于对齐数据对齐结构体对齐原则原理分析 关于对齐 对齐方式&#xff1a;表示的是一个类型的对象存放的内存地址应满足的条件好处&#xff1a;对齐的数据在读写上有性能优势对于不对齐的结构体&#xff0c;编译器会自动补齐以提高CPU的寻址效率 数据对齐 四个函数/描述…

机器学习实战:带你进入AI世界!

机器学习是人工智能领域的一个重要分支&#xff0c;可以帮助我们从大量数据中发现规律&#xff0c;进行预测和分类等任务。然而&#xff0c;想要真正掌握机器学习算法&#xff0c;并将其应用到实际问题中&#xff0c;还需要进行大量的实战练习。 本文将介绍几个常见的机器学习实…

6、Flutterr聊天界面网络请求

一、准备网络数据 1.1 数据准备工作 来到网络数据制造的网址,注册登录后,新建仓库,名为WeChat_flutter;点击进入该仓库,删掉左侧的示例接口,新建接口. 3. 接着点击右上角‘编辑’按钮,新建响应内容,类型为Array,一次生成50条 4. 点击chat_list左侧添加按钮,新建chat_list中的…