k8s pod配置文件ymal详解

发布时间:2022-02-27 19:16:54 作者:yexindonglai@163.com 阅读(990)

yaml 常用配置模板

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

  1. apiVersion: v1 # 版本号
  2. kind: Pod # 资源类型
  3. metadata:
  4. name: pod-name
  5. namespace: dev
  6. spec:
  7. containers:
  8. - image: nginx:1.17.1
  9. name: nginx-container
  10. imagePullPolicy: Always
  11. command: ["/bin/sh","-c","while true;do echo hello;sleep 1;done"]
  12. args: ["",""]
  13. ports:
  14. - name: "port-name"
  15. containerPort: 8080
  16. hostPort: 80
  17. hostIP: "192.168.1.101"
  18. protocol: TCP
  19. env:
  20. - name: "key-1"
  21. value: "value-1"
  22. - name: "key-2"
  23. value: "value-2"
  24. ports:
  25. - name: nginx-port
  26. containerPort: 80
  27. protocol: TCP
  28. resources:
  29. limits:
  30. cpu: "2"
  31. memory: "10Gi"
  32. requests:
  33. cpu: "1"
  34. memory: "10Mi"
  35. initContainers:
  36. - name: init-mysql
  37. image: busybox:1.3.0
  38. command: ["/bin/sh","-c","while true;do echo hello;sleep 1;done"]

kind

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

  • pod
  • namespace :命名空间
  • deployment:pod控制器(pod controller),也叫工作负载(workload)
  • service :网络访问

spec

spec.containers.image

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

spec.containers.command 和 spec.containers.args

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

  1. command: ["/bin/sh","-c","while true;do echo hello;sleep 1;done"]
  2. # 也可以这样
  3. command: ["/bin/sh"]
  4. 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一致;

关键字Kubernetes