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

2023-11-18

一、基本了解

概念:

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

特点:

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

主要用法:

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

应用场景:

  • 日志收集
  • 应用监控

二、管理命令

注意事项:

  1. 和kubectl create deployment 命令相比,kubectl run 【Pod名称】命令更加单一,就相当于只运行了一个容器,前者可以生成多个副本等多项功能,后者没有,一般用于测试,正式环境还是用的前者。
功能 命令
创建Pod kubectl apply -f pod.yaml 或者 kubectl run nginx --image=nginx
查看Pod kubectl get pods 或者 kubectl describe pod <Pod名称>
查看日志 kubectl logs <Pod名称> [-c CONTAINER] 或者 kubectl logs <Pod名称> [-c CONTAINER] -f
进入容器终端 kubectl exec -it <Pod名称> [-c CONTAINER] – bash
删除Pod kubectl 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 自定义注解列表
Spec Pod 中容器的详细定义 必选
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.cpu CPU 限制,可以写m也可以写浮点数,例如0.5=500m,1=1000m
spec.containers.resources.limits.memory 内存限制,单位可以为 MiB、GiB 等
spec.containers.resources.requests 容器资源请求值。
告诉k8s最小分配的资源,分配的节点必须能够满足requests指定的值。
spec.containers .resources.requests.cpu CPU请求,可以写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.path Pod 容器挂载的宿主机目录
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.command exec 方式需要指定的命令或者脚本
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.imagePullSecrets pull 镜像时使用的 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 内还有一个或多个容器的像没有创建,包括正在下载镜像的过程。
Running Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态
Succeeded Pod内所有容器均成功执行后退出,且不会再重启
Failed Pod 内所有容器均已退出,但至少有一个容器为退出失败状态
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挂载获取。
设置方式 可设置的参数 释义
fieldRef metadata.name Pod名称
fieldRef metadata.namespace
fieldRef metadata.uid Pod的UID,从Kubernetes 1.8.0-alpha.2版本开始支持。
fieldRef metadata.labels[‘< KEY >’] Pod某个Label的值,通过< KEY >进行引用,从Kubernetes 1.9版本开始支持。
fieldRef metadata.annotations[‘< KEY >’] Pod某个Annotation的值,通过< KEY >进行引用,从Kubernetes 1.9版本开始支持。
resourceFieldRef Container级别的CPU Limit 容器的CPU限制值
resourceFieldRef Container级别的CPU Request。 容器的CPU请求值
resourceFieldRef Container级别的Memory Limit。 容器的内存限制值
resourceFieldRef Container级别的Memory Request。 容器的内存请求值
resourceFieldRef Container级别的临时存储空间(ephemeral-storage)Limit,从K8s 1.8.0-beta.0版本开始支持。
resourceFieldRef Container级别的临时存储空间(ephemeral-storage)Request,从K8s 1.8.0-beta.0版本开始支持。
fieldRef字段 metadata.labels Pod的Label列表,每个Label都以key为文件名,value为文件内容,每个Label各占一行。
fieldRef字段 metadata.namannotations Pod的Annotation列表,每个Annotation都以key为文件名,value为文件内容,每个Annotation各占一行。
Pod元数据信息 status.podIP Pod的IP地址
Pod元数据信息 spec.serviceAccountName Pod使用的ServiceAccount名称。
Pod元数据信息 spec.nodeName Pod所在Node的名称,从Kubernetes 1.4.0-alpha.3版本开始支持。
Pod元数据信息 status.hostIP Pod所在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会自动被删除。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • 如何解决 https://kubernetes-charts.storage.googleapis.com”不是有效的图表存储库

    我正在开发 helm 2 并尝试将 Tiller 部署为 pod gt helm init service account tiller 但我遇到以下错误 错误 初始化错误 看起来像 https kubernetes charts stor
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • 如何从容器内运行 podman?

    我想跑podman https podman io作为运行 CI CD 管道的容器 但是 我不断从 podman 容器中收到此错误 podman info ERRO 0000 overlay is not supported over ov
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad

随机推荐

  • 关于shiro doGetAuthorizationInfo授权方法和doGetAuthenticationInfo登陆认证方法的执行时机

    1 默认情况下不关闭shiro session 登陆时生成JESSIONID 执行doGetAuthorizationInfo的时机 1 subject hasRole admin 或 subject isPermitted admin 自
  • error: ‘FixedArray’ {aka ‘class ceres::internal::FixedArray<double, 3>’} has no member named ‘data’

    在使用g2o或者Ceres遇到以下问题 error FixedArray aka class ceres internal FixedArray
  • private static final Long serialVersionUID= 1L详解

    我们知道在对数据进行传输时 需要将其进行序列化 在Java中实现序列化的方式也很简单 可以直接通过实现Serializable接口 但是我们经常也会看到下面接这一行代码 private static final Long serialVer
  • R语言基础图形元素——坐标轴和网格线

    R语言基础图形元素 坐标轴和网格线 简介 1 坐标轴 2 网格线 参考书籍 简介 坐标轴为图中元素数值大小提供了参照 绘图时 时常需要实现坐标轴的个性化绘制 可以通过axis 函数实现 网格线是图形的一种辅助线 可以实现图中元素更加精确把控
  • R语言作图:坐标轴设置

    R语言作图 坐标轴设置 偷闲阁 2018 02 04 20 51 24 209654 收藏 359 分类专栏 R语言 可视化 文章标签 R 坐标轴 刻度 可视化 版权声明 本文为博主原创文章 遵循 C
  • 小白用Python抓取豆瓣高评分喜剧电影

    目的 抓取豆瓣高评分喜剧电影 导入所需的库 import requests 进行模拟浏览器进行发送请求 import json 导入JSON类型的库 不会导入库的话 请参考我的上一篇文章 上面有提及 小白如何抓取网页 进行确定URL和浏览器
  • 开发gitlab-reporting周报项目的总结

    一 方案设计 二 数据库设计 三 代码设计 从gitlab项目中输出每个成员的周报 事件触发webhook 接收webhook的server server解析webhook事件 做一个周报生成器 用gitlab的issues生成周报 功能
  • WebGL 视图矩阵、模型视图矩阵

    目录 立方体由三角形构成 视点和视线 视点 观察目标点和上方向 视点 观察目标点 上方向 在WebGL中 观察者的默认状态应该是这样的 视图矩阵程序 LookAtTriangles js 实际上 根据自定义的观察者状态 绘制观察者看到的景象
  • 【插件】谷歌浏览器插件visio在线打开vsdx文件

    下载地址
  • 【牛客C++入门】CPP10 判断成绩等级

    描述 键盘录入一个成绩 整数 判断并输出成绩的等级 如果用户输入成绩不合法 小于0或者大于100 则输出成绩不合法 90 100 优秀 80 89 良 70 79 中 60 69 及格 0 59 差 输入描述 输入学生的成绩 整数 输出描述
  • 最美应用API接口分析

    最美应用API接口分析 最美应用API接口分析一 请求版本列表1 1 API二 请求应用配置2 1 API2 2参数列表2 3 返回三 友盟更新3 1 API3 2参数列表3 3 返回四 appleStore应用信息4 1API4 2 返回
  • 发布npm包-简要记录

    1注册账号 注册npm账号 需要邮箱 激活npm账号 npm账号注册成功以后会收到邮件 邮件中有个链接 点进去进行激活 2创建项目 npm init 创建项目 name 命名规则 不能包含大写字母 空格及下滑线 version 创建时候默认
  • Shiro源码分析-初始化-SecurityManager

    源码分析的第一篇以SecurityManager的初始化为题 根据ini配置文件初始化shiro的代码主要为两段 解析ini文件为Ini对象 Factory
  • 电商行业常用指标

    首先要构建电商数据分析的基本指标体系 主要分为8个类指标 即 1 总体运营指标 从流量 订单 总体销售业绩 整体指标进行把控 起码对运营的电商平台有个大致了解 到底运营的怎么样 是亏是赚 2 网站流量指标 即对访问你网站的访客进行分析 基于
  • 【Python】pip安装源、pip config命令 及 pip安装包位置 等相关问题

    永久性添加pip安装源 查看pip文件的存储位置有 查看pip config 的配置方法 删除配置信息 查看pip下载的安装包的默认路径 查看如何修改安装位置 永久性添加pip安装源 pip config set global index
  • F5 BIG-IP LTM基础资料

    F5 BIG IP网络概述 TMOS是一个全代理的体系结构 流量必须穿越BIG IP设备以获得TMOS的优化效果 部署方式 路由模式 也被称作串联模式 真实服务器放在BIG IP之后的一个内部网络 真实服务器的网关需要指向 或者最终通过 B
  • qsort的基本用法

    qsort的基本用法 在我们日常的刷题中 我们经常遇见一些需要排序的问题 有的时候我们会直接运用循环以及选择结构来暴力排序 或者使用比较简单的冒泡排序等排序方法 这些都是直接运用我们C语言或者C 里的底层代码来实现 今天我将介绍一种较为简单
  • Unity3D中通过代码修改子物体层级的顺序

    今天有个同事问我如何在程序中修改子物体的层级关系来改变遮挡关系 我给他敲出来一句代码 UI的层级关系是通过渲染表现出来的 在canvas下的物体 排序越靠前的越先被渲染 这样一来就会 被后来渲染的遮挡 总结一下有三句代码是修改子物体的层级的
  • 用java实现输入成绩,判断等级

    用java里的Scanner类实现输入成绩 用if判断成绩等级 代码如下 用java实现输入成绩 判断等级 导包 import java util Scanner public class Exercise public static vo
  • k8s基础5——Pod常用命令、资源共享机制、重启策略和健康检查、环境变量、初始化容器、静态pod

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