一、概述

1. 简述pod

pod是k8s应用最小纸箱单元,pod表示在集群上运行的进程,docker是k8s pod中最常用的容器,但pods也支持其他容器运行。单个pod下可以有一个运行的容器也可以同时有多个运行的容器。

2. pods管理多个容器

当一个pods中有运行多个容器时,多个容器彼此之间可以共享资源和彼此通信。其中有以下两种共享资源:

  • 网络
  • 存储

3. pod模板

[root@redis-cluser-01 tmp]# cat nginx.yml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

二、Pod生命周期

1. pod的6种模式

  • Pending

    该Pod已被k8s接受,但是尚未创建一个或多个Container映像

  • Running

    Pod已绑定到节点,并且所有容器都已创建。至少一个容器仍在运行

  • Succeesed

    Pod中的所有容器已成功终止,并且不会重新启动

  • Failed

    Pod中的所有容器均已终止,并且至少一个容器因故障而终止

  • Unkonwn

    由于某种原因,通常由于与Pod主机通信时出错而无法获得Pod状态

2. 容器探针

探针可以周期性的执行诊断容器状态,有以下三种类型的处理程序方式:

  • ExecAction

    在Container中执行指定的命令,如果命令以状态码0退出则认为诊断成功

  • TCPSocketAction

    对指定端口上的容器IP地址执行TCP检查,如果端口成功则任务诊断成功

  • HTTPGetAction

    对指定端口和路径上的容器的IP执行HTTP Get请求。如果响应的状态码大于或等于200,小于400则任务诊断成功

每个探针具有以下三个结果

  • 成功 容器通过了诊断
  • 失败 容器无法通过诊断
  • 位置 诊断失败

kubelet可以选择对正在运行的Container进行三种探测并对其做出反应

  • livenessProbe 指示容器是否正在运行。如果获得探针失败,则kubelet将杀死Container,并且Container将接受其重新启动策略。
  • readinessProbe 指示容器是否准备好服务请求。如果就绪探针失败,则端点控制器从与Pod匹配的所有服务的端点中删除Pod的IP地址。如果容器未提供就绪探测器,则默认状态为Success。
  • startupProbe 指示容器是否准备好服务器请求

3. 示例

[root@redis-cluser-01 tmp]# cat liveness.yml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - args:
    - /server
    image: xiangys0134/liveness:v1.0.2
    livenessProbe:
      httpGet:
        # when "host" is not defined, "PodIP" will be used
        # host: my-host
        # when "scheme" is not defined, "HTTP" scheme will be used. Only "HTTP" and "HTTPS" are allowed
        # scheme: HTTPS
        path: /healthz
        port: 8080
        httpHeaders:
        - name: X-Custom-Header
          value: Awesome
      initialDelaySeconds: 15
      timeoutSeconds: 1
    name: liveness

最后修改日期: 2019年11月7日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。