【kubernetes笔记】k8s_Pod简介(03)

Page content

这一篇整理了Pod基本概念。

1.Pod 概述

  1. k8s系统中可以创建和管理的最小单元,
  2. 包含多个容器(一组容器的集合)
  3. 一个Pod中容器共享网络命名空间(共享网络和存储)
  4. Pod的生命周期短暂

2.Pod 的机制

  1. 共享网络是通过Pause(根容器),把其他业务容器加入到Pause(根容器),
    让所有业务员容器在同一个命名空间中,实现网络共享。

  2. 使用数据卷(volume)持久化数据。

apiVersion: v1  
kind: Pod  
metadata:  
  name: my-pod  
spec: 
  containers:
  - name: test1 
    image: centos 
    command: []
    volumeMounts: 
    - name: data
      mountPath: /data

  - name: test2 
    image: centos 
    command: []
    volumeMounts: 
    - name: data
      mountPath: /data

  volumes:
  - name: data
    emptyDir: {}

3.Pod的声明周期和重启策略

3.1 Pod声明周期

Pod 的 status 字段是一个 PodStatus 对象,其中包含一个 phase 字段。

  • Pending(悬决) Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。
  • Running(运行中) Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
  • Succeeded(成功) Pod 中的所有容器都已成功终止,并且不会再重启。
  • Failed(失败) Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。
  • Unknown(未知) 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

图片备用地址
pod_01

3.2 重启策略

  • Always: 当容器失效时,由kubelet自动重启容器。
  • Never: 当容器终止运行且退出码部位0时,由kubelet自动重启容器。
  • OnFailure: 不论容器运行状态如何,kubelet都不会重启容器。
apiVersion: v1 
kind: Pod  
metadata:  
  name: test
spec: 
  containers:
  - name: test1 
    image: test1:latest
    args:
    - /bin/sh
  restartPolicy: Always

4.Pod 镜像拉取和资源配置

4.1 镜像拉取

  • IfNotPresent: 默认值,镜像不存在时拉取
  • Always: 每次创建Pod都会重新拉取
  • Never: Pod永远不会主动拉取镜像
apiVersion: v1 
kind: Pod  
metadata:  
  name: my-pod  
spec: 
  containers:
  - name: nginx 
    image: nginx:latest
    imagePullPolicy: Always

4.2 资源配置

  • spec.containers[].resources.requests.cpu
  • spec.containers[].resources.requests.memory
  • spec.containers[].resources.limits.cpu
  • spec.containers[].resources.limits.memory
apiVersion: v1 
kind: Pod  
metadata:  
  name: my-pod  
spec: 
  containers:
  - name: db 
    image: mysql:latest
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "123456"

    resources:
      requests:
        cpu: "250m"
        memory: "64Mi"

      limits:
        cpu: "500m"
        memory: "128Mi"

5.健康检测

  1. livenessProbe(存活检查)
    如果检查失败,将kill容器,根据Pod的restartPolicy来操作。
  2. readinessProbe(就绪检查)
    如果检查失败,Kubernetes会把Pod从Service endpoints中剔除。

Probe支持的三种检测方式

  • httpGet: 发送HTTP请求,返回200-400范围状态码为成功
  • exec: 执行Shell命令返回状态码是0为成功
  • tcpSocket: 发起TCP Socket建立成功
apiVersion: v1 
kind: Pod  
metadata:  
  name: test
spec: 
  containers:
  - name: test1 
    image: test1:latest
    args:
    - /bin/sh
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

欢迎大家的意见和交流

email: li_mingxie@163.com