k8s pod配置文件ymal详解

Posted java叶新东老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s pod配置文件ymal详解相关的知识,希望对你有一定的参考价值。

yaml 常用配置模板

一般来说,常用的配置也不算多,如果是涉及到其他一些高级特性,这里倒是没有体现出来,博主举例了一些常用的配置,如下

apiVersion: v1  # 版本号
kind: Pod  # 资源类型
metadata: 
  name: pod-name
  namespace: dev
spec: 
  containers: 
    - image: nginx:1.17.1
      name: nginx-container
      imagePullPolicy: Always
      command: ["/bin/sh","-c","while true;do echo hello;sleep 1;done"]
      args: ["",""]
      ports: 
      - name: "port-name"
        containerPort: 8080
        hostPort: 80
        hostIP: "192.168.1.101"
        protocol: TCP
      env: 
      - name: "key-1"
        value: "value-1"
      - name: "key-2"
        value: "value-2"
      ports: 
      - name: nginx-port
        containerPort: 80
        protocol: TCP
      resources: 
        limits: 
          cpu: "2"
          memory: "10Gi"
        requests: 
          cpu: "1"
          memory: "10Mi"
  initContainers:
  - name: init-mysql
    image: busybox:1.3.0
    command: ["/bin/sh","-c","while true;do echo hello;sleep 1;done"]
    

kind

资源类型,一种有以下几种类型

  • pod
  • namespace :命名空间
  • deployment:pod控制器
  • service :网络访问

spec

spec.containers.image

指定容器镜像,包含镜像名称:版本号

spec.containers.command 和 spec.containers.args

启动命令,在启动容器时会执行command的命令,也可以配合args一起使用

command: ["/bin/sh","-c","while true;do echo hello;sleep 1;done"]
 
# 也可以这样
command: ["/bin/sh"]
args: ["-c","while true;do echo hello;sleep 1;done"]

特别说明

要知道,linux的指令是分为命令 和参数的,比如ls -lls 是命令,-l是参数,command是命令,args是参数,k8s的command和args其实是为了覆盖Fockerfile的ENTERPOINT功能

  • 如果command和args都没写,使用Dockerfile配置
  • 如果command写了, 那么Dockerfile的默认ENTRYPOINT配置会被忽略,执行command
  • 如果command没写,args写了, 那么Dockerfile的默认ENTRYPOINT配置会执行,使用k8s的args参数
  • 如果command和args都写了, 那么Dockerfile的默认ENTRYPOINT配置会被忽略,执行command并追加上args参数

spec.containers.imagePullPolicy

镜像拉取策略

  • Always:总是去远程仓库拉取镜像
  • Never :不去远程 仓库拉取镜像, 只用本地镜像,本地镜像不存在则报错
  • IfNotPresent:(默认值)如果本地存在则使用本地镜像,不存在则去远程仓库拉取,

注意点

  • 如果镜像的tag为具体的版本号,就像这样nginx:1.17.1,则使用IfNotPresent作为默认策略
  • 如果镜像tag为latest(最新版本),就像这样nginx:latest,则使用Always作为默认策略

spec.containers.env

配置容器的环境变量列表,每一个环境变量其实就是一对键值对,name是key,值为value

spec.containers.ports

端口配置,支持多个端口,访问时的IP和端口是:podIp:containerPort,每个端口以下几个属性

  • name: 端口名称,必须保证唯一
  • containerPort: 容器内要监听的端口
  • hostPort: 容器要在宿主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略)
  • hostIP: 要将外部端口绑定到的主机IP(一般省略)
  • protocol: 端口协议,有以下几个种类
    • TCP(默认)
    • UDP
    • SCTP

spec.containers.resources

resources是资源配额配置,容器中的程序要运行,肯定是要占用资源的,比如cpu和内存,如果不做资源限制,就可能会吃掉大量资源,导致其他 容器无法运行;资源配额有2个子选项“

  • limits: 用于限制运行时容器的最大占用资源,当容器占用资源超过limits时会被终止,并且进行重启;
  • requests:用于设置容器需要的最小资源,如果环境资源不够,容器将无法启动;

每个子选项也有2个属性,,他们分别是

  • cpu: cpu核心数,单位(core)
  • memory: 内存限制

spec.initContainers

initContainers是初始化容器,因为一个pod中可以有多个容器运行,只不过初始化容器和主容器不同,初始化容器必须先启动成功之后才能运行主容器;spec.initContainers下的属性和spec.containers一致;

以上是关于k8s pod配置文件ymal详解的主要内容,如果未能解决你的问题,请参考以下文章

k8s pod配置文件ymal详解

k8s 实践经验pod 详解

k8s的yaml文件配置详解(转))

K8s Deployment ymal文件详解

K8s pod详解

kubernetes搭建dashboard