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控制器(pod controller),也叫工作负载(workload)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 -l
,ls
是命令,-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一致;