k8s支持yaml和JSON格式创建资源对象,json用于接口之间消息传递,适用于开发;yaml格式用于配置和管理,适用于云平台管理,yaml简洁非标记性语言
1.yaml相关基础概念
yaml语法规则:
大小写敏感;缩进表示层级关系;缩进不允许使用tab键,只允许使用空格;#表示注释 ---为可选分隔符,当需要再一个文件定义多个结构时使用
k8s两种结构类型
maps:字典,Key:Value的键值对信息 如:apiVersion: v1
lists:列表,即数组。
例如:
args
-beijing
-shanghai
-shenzhen
-guangzhou
2.yaml常见语法
apiVersion:当前所有可用API版本,kubectl api-versions 查看。常用6个apiverion:
v1:
apps/v1: Kubernetes API的稳定版本,包含很多核心对象:pod、service等
batch/v1: 包含一些通用的应用层的api组合,如:Deployments, RollingUpdates, and ReplicaSets
autoscaling/v1: 包含与批处理和类似作业的任务相关的对象,如:job、cronjob
networking.k8s.io/v1: 允许根据不同的资源使用指标自动调整容器
networking.k8s.io/v1: 用于Ingress
rbac.authorization.k8s.io/v1: 用于RBAC
kind:资源对象类型,如 pod、deployment、statefulset、job、cronjob
metadata:常用的配置项有 name,namespace,即配置其显示的名字与归属的命名空间
spec:个嵌套字典与列表的配置项,也是主要的配置项,支持的子项非常多,根据资源对象的不同,子项会有不同的配置
3.yaml文件运行
例1:创建 deployment 资源
#kubectl create -f nginx.yaml
apiVersion: apps/v1 # 1.9.0 之前的版本使用 apps/v1beta2,可通过命令 kubectl api-versions 查看
kind: Deployment #指定创建资源的角色/类型
metadata: #资源的元数据/属性
name: nginx-deployment #资源的名字,在同一个namespace中必须唯一
spec:
replicas: 2 #副本数量2
selector: #定义标签选择器
matchLabels:
app: web-server
template: #这里Pod的定义
metadata:
labels: #Pod的label
app: web-server
spec: # 指定该资源的内容
containers:
- name: nginx #容器的名字
image: nginx:1.12.1 #容器的镜像地址
ports:
- containerPort: 80 #容器对外的端口
例2:创建pod资源
#kubectl create -f pod-redis.yaml //创建 pod 资源
apiVersion: v1
kind: Pod
metadata:
name: pod-redis
labels:
name: redis
spec:
containers:
- name: pod-redis
image: docker.io/redis
ports:
- containerPort: 80 #容器对外的端口
例3:创建service
$ kubectl create -f httpd-svc.yaml //创建 service 资源
apiVersion: v1
kind: Service # 指明资源类型是 service
metadata:
name: httpd-svc # service 的名字是 httpd-svc
labels:
name: httpd-svc
spec:
ports: # 将 service 8080 端口映射到 pod 的 80 端口,使用 TCP 协议
- port: 8080
targetPort: 80
protocol: TCP
selector:
run: httpd # 指明哪些 label 的 pod 作为 service 的后端