yml建立一个Pod#

  • 选定一个位置并创建文件

    1
    2
    3
    cd /home/echin
    mkdir pods/
    touch nginx-demo.yaml
  • 撰写yml文件

    1
    vim nginx-demo.yaml
  • yaml文件

    不用背,直接让GPT生成吧,感觉自己写的总是有问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    当然可以。以下是一个简单的 Kubernetes Pod YAML 配置示例,它定义了一个运行 Nginx Web 服务器的 Pod:

    apiVersion: v1 # 使用的 Kubernetes API 版本
    kind: Pod # 资源类型为 Pod
    metadata:
    name: nginx-pod # Pod 的名称
    namespace: default # Pod 所在的命名空间,默认为 default
    labels: # 为 Pod 设置标签,可以用于选择器
    app: nginx
    spec: # Pod 的详细规格定义
    containers: # 容器列表,Pod 中至少有一个容器
    - name: nginx-container # 容器的名称
    image: nginx:latest # 容器使用的镜像,这里使用 Nginx 的最新版本
    ports: # 容器暴露的端口列表
    - containerPort: 80 # 容器内部监听的端口,Nginx 默认为 80
    protocol: TCP # 端口协议,可以是 TCP 或 UDP
    # 如果需要设置资源限制和请求,可以添加如下:
    resources:
    requests:
    cpu: 100m # CPU 请求,表示该容器至少需要 100 毫核
    memory: 100Mi # 内存请求,表示该容器至少需要 100MiB 内存
    limits:
    cpu: 500m # CPU 限制,表示该容器最多使用 500 毫核
    memory: 200Mi # 内存限制,表示该容器最多使用 200MiB 内存
    # 如果需要设置环境变量,可以添加如下:
    env:
    - name: "ENV_VAR_NAME" # 环境变量名称
    value: "ENV_VAR_VALUE" # 环境变量值
    # 如果 Pod 需要重启策略,可以添加如下:
    restartPolicy: Always # Pod 重启策略,Always 表示始终重启 Pod
    # 如果需要设置节点选择器,可以添加 nodeSelector 字段:
    # nodeSelector:
    # disktype: ssd
  • 依据yml生成pod

    1
    Kubectl create -f nginx-demo.yaml
  • 查看是否建立成功

    1
    kubectl get pods
  • 查看pod的具体信息

    1
    kubectl describe po nginx-pod
  • 删除pod

    1
    kubectl delete po nginx-pod

探针#

是用来监控Pod中的状态,从而执行各种事情,有三种探针:

  • LivenessProbe

    如果容器挂掉了,探针监听到我们的容器挂掉了,他会帮助我们容器重新启动,即故障自动恢复

  • ReadinessProbe

    当容器部署到Pod中时,有时候并不是初始化成功的,比如说要数据的导入等事情

    而这个探针就是会检测到容器初始化成功后,才允许外部来发流量请求接口

  • StartupProbe

    启动探针,优先执行这个探针,判断是否容器启动

有三种探针执行方式

  • ExecAction

    在容器内部执行一个命令,如果返回值时0,着任务容器正常健康

  • TCPSocketAction

    通过 tcp 连接检测容器内端口是否开放,如果开放则健康

  • HTTPGetAction

    发送HTTP请求到容器内的应用进程,如果状态码正常,则应用健康

如何使用 <— 点击这里

生命周期#

image-20240709141342480

主要是通过

  • postStart 钩子函数

    这个函数基本上不用,因为在容器开始运行的时候会运行一堆command会初始化

  • preStop 钩子函数

    在容器结束运行后,可以做一些数据清理,数据销毁,注册中心下的事情

删除流程

  1. Endpoint 删除 podip地址
  2. Pod 变成 Terminating 状态 (相当于有一段时间内可以干自己未干完的事情)
  3. 执行 preStop 的指令

但是#

其实针对于原生的pod来操作是不方便的

一般来说创建和控制是用其他东西实现的