K8S基础-Pod

K8S基础-基本概念

一,Pod
1.1 创建一个pod
  • 什么是pod

    pod可简单地理解为是一组,一个或多个容器构成,每个Pod还包含一个pause容器。

    Pause容器是Pod的父容器,它主要通过负责僵尸进程的回收管理,同时通过Pause容器可以使同一个Pod里面的不同容器共享存储,网络,PID,IPC等,容器之间可以使用localhost:port相互访问,可以使用volume等实现数据共享。

    根据Docker的构造,Pod可被建模为一组有共享命令空间,卷,IP地址和Port端口的容器

  • 为什么要引入Pod

    强依赖的服务器要部署在一起,

    多个服务需要协同工作,

    兼容其他CRI标准的运行时

定义一个pod

[root@k8s-master01 pra]# cat pod.yml 
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  creationTimestamp: null
  labels:       # 标签
    run: nginx   #key=value
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: nginx:1.15.12   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

创建pod:

[root@k8s-master01 pra]# kubectl create -f pod.yml

查看pod状态:

[root@k8s-master01 pra]# kubectl get po nginx
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          3h19m

使用kubectl run 创建一个Pod:

也可以使用kubectl run 创建一个pod,不用配置文件也可以创建,但不推荐使用。

 kubectl run nginx-run --image=nginx:1.15.12
1.2更改Pod的启动命令和参数。
[root@k8s-master01 pra]# cat pod.yml 
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  creationTimestamp: null
  labels:       # 标签
    run: nginx   #key=value
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: nginx:1.15.12   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称
    command: [ "sleep", "10" ] # entrypoint   让这个容器sleep 10s
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

#command 相当于docker中的entrypoint 覆盖原本的启动命令。
# args相当于覆盖掉cmd,

​ 删掉之前的pod,重新指定新的pod.yml来创建pod

[root@k8s-master01 pra]# kubectl delete -f pod.yml 
pod "nginx" deleted
[root@k8s-master01 pra]# kubectl create -f pod.yml 
pod/nginx created
[root@k8s-master01 pra]# kubectl get po
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          7s
[root@k8s-master01 pra]# kubectl get po
NAME    READY   STATUS      RESTARTS   AGE
nginx   0/1     Completed   0          12s
[root@k8s-master01 pra]# kubectl get po -owide
NAME    READY   STATUS      RESTARTS      AGE   IP              NODE         NOMINATED NODE   READINESS GATES
nginx   0/1     Completed   1 (24s ago)   35s   172.16.85.200   k8s-node01   <none>           <none>
[root@k8s-master01 pra]# curl 172.16.85.220
^C
# 再次查看已经不能访问pod的80端口了,因为我们覆盖了启动命令只执行了sleep命令。没有前台进程。所以目前pod状态是Completed状态。
1.3 Pod状态及Pod故障排查命令
状态说明
Pending(挂起)Pod已被Kubernetes系统接收,但仍有一个或多个容器未被创建,可以通过kubectl describe查看处于Pending状态的原因
Running (运行中)Pod已经被绑定到一个节点上,并且所有的容器都已经被创建,而且至少有一个是运行状态,或者是正在启动或者重启,可以通过kubectl logs 查看Pod日志
Succeeded(成功)所有容器执行成功并种植,并且不会再次重启,可以通过kubectl logs查看Pod日志
Failed(失败)所有容器都已终止,并且至少有一个容器以失败的方式终止,也就说这个容器要么以非零状态推出,要么被系统终止,可以通过logs和describe查看Pod日志和状态
Unkknown(未知)通常是由于通信问题造成的无法获得Pod的状态
ImagePullBackOff ErrImagePull拉取镜像失败,一半是由于镜像不存在,网络不通,或者需要登录认证引起的,可以使用describe命令查看具体原因
CrashLoopBackOff容器启动失败,可以通过logs命令查看具体原因,一般为启动命令不正确,健康检查不通过等
OOMKilled容器内存溢出,一般是容器的内存Limit设置的过小,或者程序本身有内存溢出,可以通过logs查看程序的启动日志
TerminatingPod正在被删除,可以通过describe查看状态
状态说明
SystlForbiddenPod自定义了内核配置,但Kubelet没有添加内核配置或配置内核的参数不支持,可以通过describe查看具体原因。
Completed容器内部主进程推出,一般计划任务执行结束会显示该状态,此时可以通过log查看容器日志
ContainerCreatingPod正在创建,一般为正在下载镜像,或者有配置不当的地方,可以通过describe查看具体原因

注意: Pod的Phase字段只有 Pending,Running,Succeeded,Failed,Unknown,其余的未处于上述状态的原因,可以通过kubectl gett po xxx -o yaml查看

#查看pod日志
[root@k8s-master01 pra]# kubectl get po -n kube-system
NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-6d48795585-8dx7k   1/1     Running   1 (18h ago)   6d4h
calico-node-2bg2r                          1/1     Running   1 (18h ago)   6d4h
calico-node-gkfgv                          1/1     Running   1 (18h ago)   6d4h
calico-node-hdprr                          1/1     Running   1 (18h ago)   6d4h
calico-node-rzfls                          1/1     Running   1 (18h ago)   6d4h
calico-node-z9n9q                          1/1     Running   1 (18h ago)   6d4h
coredns-6554b8b87f-rnj8l                   1/1     Running   1 (18h ago)   6d4h
coredns-6554b8b87f-rrln2                   1/1     Running   1 (18h ago)   6d4h
etcd-k8s-master01                          1/1     Running   1 (18h ago)   6d4h
etcd-k8s-master02                          1/1     Running   1 (18h ago)   6d4h
etcd-k8s-master03                          1/1     Running   1 (18h ago)   6d4h
kube-apiserver-k8s-master01                1/1     Running   1 (18h ago)   6d4h
kube-apiserver-k8s-master02                1/1     Running   1 (18h ago)   6d4h
kube-apiserver-k8s-master03                1/1     Running   2 (18h ago)   6d4h
kube-controller-manager-k8s-master01       1/1     Running   2 (18h ago)   6d4h
kube-controller-manager-k8s-master02       1/1     Running   1 (18h ago)   6d4h
kube-controller-manager-k8s-master03       1/1     Running   1 (18h ago)   6d4h
kube-proxy-5wfgh                           1/1     Running   1 (18h ago)   6d4h
kube-proxy-79lcz                           1/1     Running   1 (18h ago)   6d4h
kube-proxy-7l54d                           1/1     Running   1 (18h ago)   6d4h
kube-proxy-jg45n                           1/1     Running   1 (18h ago)   6d4h
kube-proxy-jqchh                           1/1     Running   1 (18h ago)   6d4h
kube-scheduler-k8s-master01                1/1     Running   2 (18h ago)   6d4h
kube-scheduler-k8s-master02                1/1     Running   1 (18h ago)   6d4h
kube-scheduler-k8s-master03                1/1     Running   1 (18h ago)   6d4h
metrics-server-8df99c47f-xjs2p             1/1     Running   2 (18h ago)   6d4h
[root@k8s-master01 pra]# kubectl logs -f calico-node-2bg2r -n kube-system

# -n 指定命名空间  
#RESTART 重启数量,数字有没有增加。
1.4 Pod镜像拉取策略

​ 通过spec.containers[].imagePullPolicy参数可以指定镜像的拉取策略,目前支持的策略如下:

操作方式说明
Lways总是拉取,当镜像tag为latest时,且imagePullPolicy未配置,默认为Always
Never不管是否存在都不会拉取
IfNotPresent镜像不存在时拉取镜像,如果tag为非latest,且imagePullPolicy未配置,默认为IfNotPresent
[root@k8s-master01 pra]# cat pod.yml 
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  creationTimestamp: null
  labels:       # 标签
    run: nginx   #key=value
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: nginx:1.15.12   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称
    command: [ "sleep", "10" ] # entrypoint   让这个容器sleep 10s
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

以这个pod.yml创建pod,查看镜像拉取策略。

[root@k8s-master01 pra]# kubectl create -f pod.yml 
pod/nginx created
[root@k8s-master01 pra]# kubectl get po
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          6s
[root@k8s-master01 pra]# kubectl describe po nginx
Name:             nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node01/192.168.1.74
Start Time:       Wed, 08 May 2024 11:02:14 +0800
Labels:           run=nginx
Annotations:      cni.projectcalico.org/containerID: 9138dd3df982450b31fb5362bf7da0b0abe631101fb2a5d8139886535c25f065
                  cni.projectcalico.org/podIP: 172.16.85.201/32
                  cni.projectcalico.org/podIPs: 172.16.85.201/32
Status:           Running
IP:               172.16.85.201
IPs:
  IP:  172.16.85.201
Containers:
  nginx:
    Container ID:  containerd://4af21fada1fdc4872ad7ae2efb728937f679af1f069584acf8f30cf5e546b9e2
    Image:         nginx:1.15.12
    Image ID:      docker.io/library/nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
    Port:          <none>
    Host Port:     <none>
    Command:
      sleep
      10
    State:          Running
      Started:      Wed, 08 May 2024 11:02:26 +0800
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 08 May 2024 11:02:15 +0800
      Finished:     Wed, 08 May 2024 11:02:25 +0800
    Ready:          True
    Restart Count:  1
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-c6pqc (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-c6pqc:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age               From               Message
  ----    ------     ----              ----               -------
  Normal  Scheduled  20s               default-scheduler  Successfully assigned default/nginx to k8s-node01
  Normal  Pulled     8s (x2 over 19s)  kubelet            Container image "nginx:1.15.12" already present on machine
  Normal  Created    8s (x2 over 19s)  kubelet            Created container nginx
  Normal  Started    8s (x2 over 19s)  kubelet            Started container nginx

# cotainer image nginx:xx.xx already present on machine 这个镜像一直存在于这个机器上。
# 所以没有再去拉取一遍。

如果我们改掉镜像。改成总是拉取

以下面这个pod.yml创建pod

[root@k8s-master01 pra]# cat pod.yml 
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  creationTimestamp: null
  labels:       # 标签
    run: nginx   #key=value
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: nginx:1.15.12   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称
    command: [ "sleep", "10" ] # entrypoint   让这个容器sleep 10s
    imagePullPolicy: Always   # always总是拉取
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

[root@k8s-master01 pra]# kubectl create pod -f pod.yml 
error: Unexpected args: [pod]
See 'kubectl create -h' for help and examples
[root@k8s-master01 pra]# kubectl create -f pod.yml 
pod/nginx created
[root@k8s-master01 pra]# kubectl get po
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          5s
[root@k8s-master01 pra]# kubectl describe po nginx
Name:             nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node01/192.168.1.74
Start Time:       Wed, 08 May 2024 11:09:17 +0800
Labels:           run=nginx
Annotations:      cni.projectcalico.org/containerID: b39226e0407d1dec56bb0c840162dd405b447762919c002361aca191f7f8848b
                  cni.projectcalico.org/podIP: 172.16.85.202/32
                  cni.projectcalico.org/podIPs: 172.16.85.202/32
Status:           Running
IP:               172.16.85.202
IPs:
  IP:  172.16.85.202
Containers:
  nginx:
    Container ID:  containerd://7d25bff4be2bb63a38a9e46811f692ba2fde05821ef1ba87a2fe36b43dc31908
    Image:         nginx:1.15.12
    Image ID:      docker.io/library/nginx@sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68
    Port:          <none>
    Host Port:     <none>
    Command:
      sleep
      10
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 08 May 2024 11:09:32 +0800
      Finished:     Wed, 08 May 2024 11:09:42 +0800
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 08 May 2024 11:09:20 +0800
      Finished:     Wed, 08 May 2024 11:09:30 +0800
    Ready:          False
    Restart Count:  1
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ndjm6 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-ndjm6:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  28s                default-scheduler  Successfully assigned default/nginx to k8s-node01
  Normal   Pulled     25s                kubelet            Successfully pulled image "nginx:1.15.12" in 1.877s (1.877s including waiting)
  Normal   Pulling    15s (x2 over 27s)  kubelet            Pulling image "nginx:1.15.12"
  Normal   Created    13s (x2 over 25s)  kubelet            Created container nginx
  Normal   Started    13s (x2 over 25s)  kubelet            Started container nginx
  Normal   Pulled     13s                kubelet            Successfully pulled image "nginx:1.15.12" in 1.86s (1.86s including waiting)
  Warning  BackOff    2s                 kubelet            Back-off restarting failed container nginx in pod nginx_default(7c830800-057a-48ea-aed2-38ab92c407f3)
[root@k8s-master01 pra]# 

# Pulling image ngingx:xx.xx 无论有没有都会再次拉取一遍镜像。

1.5 Pod 重启策略

​ 可以使用spec.restartPolicy 指定容器的重启策略

操作方式说明
Always默认策略。容器失效时,自动重启该容器
OnFailure容器以不为0的状态码终止,自动重启该容器
Nerver无论何种状态,都不会重启

指定重启策略为OnFailure

[root@k8s-master01 pra]# kubectl delete -f pod.yml 
pod "nginx" deleted
[root@k8s-master01 pra]# kubectl get po
No resources found in default namespace.
[root@k8s-master01 pra]# vim pod.yml 
[root@k8s-master01 pra]# cat pod.yml 
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  creationTimestamp: null
  labels:       # 标签
    run: nginx   #key=value
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: nginx:1.15.12   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称
    command: [ "sleep", "10" ] # entrypoint   让这个容器sleep 10s
    imagePullPolicy: Always
  restartPolicy: OnFailure
[root@k8s-master01 pra]# kubectl create -f pod.yml 
pod/nginx created
[root@k8s-master01 pra]# kubectl get po
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          5s
[root@k8s-master01 pra]# kubectl get po
NAME    READY   STATUS      RESTARTS   AGE
nginx   0/1     Completed   0          2m39s

# 等待一会发现不会再重启容器,OnFailure,容器以不为0的状态码终止,才会自动重启该容器。
# 举例说明如何才是
1.6 Pod的三种探针
种类说明
startupProbeKubeternets1.16新加的探测方式,用于判断容器内的应用程序是否已经启动。如果配置了startupProbe,就会先禁用其他探测,直到它成功位置。如果探测失败,Kubelet会杀死容器,之后根据重启策略进行处理,如果探测成功,或没有配置startupprobe,则状态为成功,之后就不在探测。
livenessProbe用于探测容器是否在运行,如果探测失败,kubelet会’杀死’容器并根据重启策略进行相应的处理。如果未指定该探针,将默认未Success
readinessProbe一般用于探测容器内的程序是否健康,及判断容器是否为就绪(Ready)状态。如果是,则可以处理请求,反之Endpoints Controller将从所有的Service的Endpoints中删除此容器所在的Pod的IP地址。如果未指定,将默认Success
1.7 Pod探针的实现方式
实现方式说明
ExecAction在容器内执行一个指定的命令,如果命令返回值为0,则认为容器健康
TCPSocketAction通过TCP连接检查容器指定的端口,如果端口开放,则认为容器健康
HTTPGetAction对指定的URL进行Get请求,如果状态码在200-400之间,则认为容器健康
1.8 livenessProbe和readinessProbe

创建一个没有探针的Pod

未添加健康检查的pod

[root@k8s-master01 pra]# cat pod.yml 
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  creationTimestamp: null
  labels:       # 标签
    run: nginx   #key=value
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: nginx:1.15.12   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称
    command:  # [ "1", "2", "3"]
    - sh
    - -c
    - sleep 10; nginx -g "daemon off;"
  restartPolicy: OnFailure
[root@k8s-master01 pra]# kubectl delete -f pod.yml 
pod "nginx" deleted
[root@k8s-master01 pra]# kubectl get pod
No resources found in default namespace.
[root@k8s-master01 pra]# kubectl create -f pod.yml 
[root@k8s-master01 pra]# kubectl get po -owide
NAME    READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          39s   172.16.85.204   k8s-node01   <none>           <none>
[root@k8s-master01 pra]# curl 172.16.85.204
curl:(7) Failed connect to 172.16.85.204:80; Connection refused

#上面这个pod,没有添加健康检查,刚启动status状态就已经是running状态了。这个状态属于成功,已经开始分配流量,但实际未启动成功。curl是不通的。就会有报错产生。这个操作非常危险。所以健康检查非常有必要。

配置健康检查

[root@k8s-master01 pra]# cat pod.yml
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器列表
  - image: nginx   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称 #符合RFC 1035规范的容器名称
    command: # 可选,容器启动执行的命令
    - sh
    - -c
    - sleep 10, nginx-g "daemon off;"
    readinessProbe: # 可选,健康检查。注意三种检查方式只能使用一种。 #就绪探针,如果失败会切断流量
      httpGet: # 接口检查方式
        path: /index.html #检查路径
        port: 80
        scheme: HTTP # HTTP or HTTPS
        #httpHeaders # 可选,检查请求头
        #- name: end-user
        #value: Jason
      initialDelaySeconds: 2 # 初始化时间,健康检查延迟时间
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 检查间隔
      successThreshold: 1 # 检查成功为1次表示就绪
      failureThreshold: 2 # 检查失败2次表示未就绪
    livenessProbe: # 可选,健康检查  #存活探针,如果失败会重启pod
      tcpSocket: # 端口检查方式
        port: 80
      initialDelaySeconds: 2 #初始化时间
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 检测间隔
      successThreshold: 1 # 检查成功为1次表示就绪
      failureThreshold: 2 # 检测失败2次表示未就绪
    ports: # 可选,容器需要暴漏的端口号列表
    - containerPort: 80
    restartPolicy: Never

1.9 配置StartupProbe
[root@k8s-master01 pra]# vim pod.yml_1 
[root@k8s-master01 pra]# cat pod.yml_1 
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  name: nginx    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: nginx   # 必选,指定容器的镜像
    name: nginx  #指定容器的名称
    startupProbe: 
      tcpSocket: # 端口检查方式
        port: 80
      initialDelaySeconds: 20 #初始化时间
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 检测间隔
      successThreshold: 1 # 检查成功为1次表示就绪
      failureThreshold: 20 #
    readinessProbe: # 可选,健康检查。注意三种检查方式只能使用一种。 #就绪探针,如果失败会切断流量
      httpGet: # 接口检查方式
        path: /index.html #检查路径
        port: 80
        scheme: HTTP # HTTP or HTTPS
        #httpHeaders # 可选,检查请求头
        #- name: end-user
        #value: Jason
      initialDelaySeconds: 2 # 初始化时间,健康检查延迟时间
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 检查间隔
      successThreshold: 1 # 检查成功为1次表示就绪
      failureThreshold: 2 # 检查失败2次表示未就绪
    livenessProbe: # 可选,健康检查  #存活探针,如果失败会重启pod
      tcpSocket: # 端口检查方式
        port: 80
      initialDelaySeconds: 2 #初始化时间
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 检测间隔
      successThreshold: 1 # 检查成功为1次表示就绪
      failureThreshold: 2 # 检测失败2次表示未就绪
    command:  # [ "1", "2", "3"]
    - sh
    - -c
    - sleep 30; nginx -g "daemon off;"
1.10 gRPC 探针
gRPC是属于第四种探针。从1.24版本后默认开启
[root@k8s-master01 pra]# cat pod.yml
apiVersion: v1 # apiVersion 版本号
kind: Pod  # 资源的类型,Deployment,StatefulSet Service
metadata:  # 元数据信息
  name: etcd    # Pod的名称
spec:   # 必选,用于定义pod的详细信息
  containers: # 必选,配置容器的地方。
  - image: registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0  # 必选,指定容器的镜像
    name: etcd  #指定容器的名称
    command: [ "/usr/local/bin/etcd", "--data-dir", "/var/lib/etcd", "--listen-client-urls", "http://0.0.0.0:2379", "--advertise-client-urls", "http://127.0.0.1:2379", "--log-level", "debug" ]
    readinessProbe: # 可选,健康检查。注意三种检查方式只能使用一种。 #就绪探针,如果失败会切断流量
      grpc:
        port: 2379
      initialDelaySeconds: 2 # 初始化时间,健康检查延迟时间
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 检查间隔
      successThreshold: 1 # 检查成功为1次表示就绪
      failureThreshold: 2 # 检查失败2次表示未就绪
    livenessProbe: # 可选,健康检查  #存活探针,如果失败会重启pod
      grpc:
        port: 2379
      initialDelaySeconds: 2 #初始化时间
      timeoutSeconds: 2 # 超时时间
      periodSeconds: 5 # 检测间隔
      successThreshold: 1 # 检查成功为1次表示就绪
      failureThreshold: 2 # 检测失败2次表示未就绪
[root@k8s-master01 pra]# 


  • 51
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值