Pod基本认识

  • pod 是 Kubernetes 集群中能够被创建和管理的最小部署单元

  • 每个Pod都有一个特殊的被称为“根容器”Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器

  • Pod的状态描述

    状态值 描述
    Pending API Server已经创建该Pod,但在Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程。
    Runnung Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态。
    Succeeded Pod内所有容器均成功执行后退出,且不会再重启。
    Failed Pod内所有容器均已退出,但至少有一个容器退出为失败状态。
    Unknown 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致。

Pod的Yaml配置文件

  • secrets.yml

    1
    2
    3
    4
    5
    6
    7
    8
    apiVersion: v1
    kind: Secret
    metadata:
    name: mysecret
    type: Opaque
    data:
    password: MWYyZDFlMmU2N2Rm
    username: YWRtaW4=

    Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中

    Opaque 类型的数据是一个 map 类型,要求 value 是 base64 编码格式:

    1
    2
    3
    4
    echo -n "admin" | base64
    YWRtaW4=
    echo -n "1f2d1e2e67df" | base64
    MWYyZDFlMmU2N2Rm
  • configMap.properties

    1
    2
    3
    4
    5
    6
    log-leven=3
    enemies.cheat=true
    enemies.cheat.level=noGoodRotten
    secret.code.passphrase=UUDDLRLRBABAS
    secret.code.allowed=true
    secret.code.lives=30

    ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap 跟 secret 很类似,但它可以更方便地处理不包含敏感信息的字符串。

    1
    2
    3
    4
    # 创建configMap
    kubectl create configmap web-game --from-file configMap.properties
    # 编辑configMap
    kubectl edit configmaps web-game
  • pod.yaml配置

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    apiVersion: v1
    kind: Pod
    metadata: # 元数据
    name: pod-volume #元数据的名称
    spec:
    hostNetwork: true #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
    hostPID: true #共享宿主机PID Namespace 默认为false
    hostAliases: # 添加hosts信息
    - ip: "192.168.43.115" # 指定ip
    hostnames:
    - "web.chc.com" # 设置ip对象的hostname
    containers:
    - name: web # 容器名称
    image: tomcat:8-slim #容器的镜像名称
    ports: #需要暴露的端口号列表
    - containerPort: 8080 #容器需要监听的端口号
    volumeMounts: # 挂载到容器内部的存储卷配置
    - name: shared-volume # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
    mountPath: /shared-web #存储卷在容器内mount的绝对路径,应少于512字符
    - name: frps # 容器名称
    env: #容器环境变量列表
    - name: dashboard_port # 环境变量的名称
    value: "8081" # 环境变量的值
    image: chcgolang/frps:latest #容器的镜像名称
    ports: #需要暴露的端口号列表
    - containerPort: 8081 #容器需要监听的端口号
    hostPort: 8081 #容器所在主机需要监听的端口号,默认与Container相同
    name: dashboard #端口号名称
    protocol: TCP #端口协议,支持TCP和UDP,默认TCP
    volumeMounts: # 挂载到容器内部的存储卷配置
    - name: shared-volume # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
    mountPath: /shared-frps #存储卷在容器内mount的绝对路径,应少于512字符
    - name: secrets # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
    mountPath: /mysecret #存储卷在容器内mount的绝对路径,应少于512字符
    readOnly: true # 是否开启只读模式
    - name: game
    mountPath: /game
    readOnly: true
    lifecycle: #生命周期管理(只能应用所在的容器)
    postStart: #容器运行之前运行的任务(并行运行,容器不会等待命令执行完在启动)
    exec:
    command:
    - "/bin/bash"
    - "-c"
    - "echo frps starting ... >> /var/log/messages"
    preStop: #容器关闭之前运行的任务(串行运行,等待本命令执行完在结束,一般应用于安全退出)
    exec:
    command: ["/bin/bash","-c","echo frps stoping ... >> /var/log/messages"]
    envFrom: # 加载环境变量配置,用于批量设置环境变量
    - configMapRef: # configMap类型的环境变量配置
    name: web-game # configMap的配置名称
    volumes: #在该pod上定义共享存储卷列表
    - name: shared-volume #共享存储卷名称
    hostPath: # 挂载Pod所在宿主机的目录
    path: /shared-volume-data #Pod所在宿主机的目录,将被用于同期中mount的目录
    - name: secrets
    secret: # 类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
    secretName: mysecret # secret存储卷的名称,需要对应名称的secret存储卷
    - name: game
    configMap: # 类型configMap的存储卷
    name: web-game # configMap存储卷的名称