Kubernetes支持YAML或者JSON格式的配置文件,最常用还是YAML,它使用通用的数据串行化格式专门用来写配置文件,比JSON更方便。
YAML语法规则
- 须严格区分字符大小写
- 使用缩进表示层级关系
- 缩进只允许使用空格符
- 缩进的空格数目不重要
- 同层级的元素须左对齐
- 用“#” 符号表示注释
在Kubernetes的配置文件中,只需要知道Maps和Lists两种结构类型,Map即“Key:Value”,List即数组,Lists的子项也可以是Maps,Maps的子项也可以是List,例如:
apiVersion: v1 kind: Pod metadata: name: website labels: app: web spec: containers: - name: nginx image: nginx ports: - containerPort: 80 - name: nginx-demo image: depository/nginx-demo:v1.15.0 ports: 8080
Kubernetes配置文件详细说明
通过“kubectl api-versions”命令查看Kubernetes支持的apiVersion,对应关系如下:
k8s版本 | api版本 |
v1.5-v1.15 | extensions/v1beta1 |
v1.7-v1.15 | apps/v1beta1 |
v1.8-v1.15 | apps/v1beta2 |
v1.9+ | apps/v1 |
Deployment配置:
apiVersion: apps/v1 # 指定api版本,请参照版本对应表 kind: Deployment # 指定资源角色和类型 metadata: # 设置资源元数据和属性 name: POD_NAME # 资源名字,同一个namespace中必须唯一 namespace: default # 指定资源所在的namespace labels: # 设置资源标签 app: POD_NAME version: stable spec: # 资源规范字段 replicas: 1 # 指定副本数量 revisionHistoryLimit: 3 # 保留历史版本 selector: # 选择器 matchLabels: # 匹配标签 app: POD_NAME version: stable strategy: # 策略 rollingUpdate: # 滚动更新 maxSurge: 30% # 最大额外可以存在的副本数,百分比或整数 maxUnavailable: 30% # 在更新过程中能够进入不可用状态的Pod的最大值,百分比或整数 type: RollingUpdate # 滚动更新策略 template: # 模版 metadata: # 资源元数据和属性 annotations: # 自定义注解列表 sidecar.istio.io/inject: "false" # 自定义注解名字 labels: # 设置资源标签 app: POD_NAME version: stable spec: # 资源规范字段 containers: - name: CONTNER_NAME # 容器名字 image: CONTNER_NAME:POD_VERSION # 容器使用的镜像地址 imagePullPolicy: IfNotPresent # 每次Pod启动拉取镜像策略 # Always(默认):每次都检查,然后会进行拉取新镜像 # Never:从不检查 # IfNotPresent:若本地有则不检查,若没有就拉取 resources: # 资源管理 limits: # 最大资源限制 cpu: 500m # CPU,1核心 = 1000m memory: 512Mi # 内存,1G = 1000Mi requests: # 最低资源需求 cpu: 100m memory: 128Mi livenessProbe: # Pod内部健康检查的设置 httpGet: # 健康检查,返回200-399之间为正常 path: /healthCheck # URI地址 port: 8080 # 端口 scheme: HTTP # 协议,常见如HTTP/TCP host: 127.0.0.1 # 主机地址 initialDelaySeconds: 30 # 容器启动多长时间后开始检测 timeoutSeconds: 5 # 检测超时时间 periodSeconds: 30 # 检查间隔时间 successThreshold: 1 # 成功阀值 failureThreshold: 5 # 失败阀值,达到该值后会重启新的pod readinessProbe: # Pod准备服务健康检查设置 httpGet: path: /healthCheck port: 8080 scheme: HTTP initialDelaySeconds: 30 timeoutSeconds: 5 periodSeconds: 10 successThreshold: 1 failureThreshold: 5 ports: - name: http # 名称 containerPort: 8080 # 容器对外的端口 protocol: TCP # 协议 imagePullSecrets: # 镜像仓库拉取密钥 - name: harbor-certification affinity: # 亲和性调试 nodeAffinity: # 节点亲和力 requiredDuringSchedulingIgnoredDuringExecution: # Pod必须部署到满足条件的节点上 nodeSelectorTerms: # 节点满足任何一个条件就可以 - matchExpressions: # 可有多个选项,只有同时满足这些逻辑选项的节点才能运行pod - key: beta.kubernetes.io/arch operator: In values: - amd64
Service配置(可以和Deployment写在同一个配置文件中):
apiVersion: v1 # 指定api版本,请参照版本对应表 kind: Service # 指定资源的角色和类型 metadata: # 资源的元数据和属性 name: POD_NAME # 资源名字,同一个namespace中必须唯一 namespace: default # 指定资源所在的namespace labels: # 设置资源标签 app: POD_NAME spec: # 资源规范字段 type: ClusterIP # ClusterIP类型 ports: - port: 8080 # Service端口 targetPort: http # 容器暴露的端口 protocol: TCP # 协议 name: http # 端口名称 selector: # 选择器 app: POD_NAME
原创文章禁止转载:技术学堂 » Kubernetes使用教程·配置文件