第四章 Kubernetes进阶之yaml配置文件
YAML是一种简洁的非标记语言
百度百科:https://baike.baidu.com/item/YAML/1067697?fr=aladdin
语法格式
- 缩进表示层级关系
- 不支持制表符tab缩进,使用空格缩进
- 通常开头缩进2个空格
- 字符后缩进1个空格,如冒号,逗号等
- "--"表示YAML格式,一个文件的开始
- "#"注释
yaml文件示例nginx-deployment.yaml
apiVersion: apps/v1 #apiVersion是当前配置格式的版本 kind: Deployment #kind是要创建的资源类型,这里是Deploymnet metadata: name: nginx-deployment labels: app: nginx spec: #spec部分是该Deployment的规则说明 replicas: 3 #relicas指定副本数量,默认为1 selector: matchLabels: app: nginx template: #template定义Pod的模板,这是配置的重要部分 metadata: #metadata定义Pod的元数据,至少要顶一个label,label的key和value可以任意指定 labels: app: nginx spec: #spec描述的是Pod的规则,此部分定义pod中每一个容器的属性,name和image是必需的 containers: - name: nginx image: nginx:1.15.4 ports: - containerPort: 80
PS:注释#需要间隔一个空格不能间隔多个空格或者tab 否则启动会出现以下报错
# kubectl create -f nginx-deployment.yaml error: error parsing nginx-deployment.yaml: error converting YAML to JSON: yaml: line 8: could not find expected ':'
通过yaml文件创建deployment
kubectl create -f nginx-deployment.yaml
通过yaml文件创建service
# cat nginx-service.yaml apiVersion: v1 kind: Service #创建类型是service metadata: creationTimestamp: null labels: app: nginx name: nginx-service spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort
创建
kubectl create -f nginx-service.yaml
查看,对外暴露43208端口
# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.10.10.1 <none> 443/TCP 4d23h nginx-service NodePort 10.10.10.168 <none> 80:43208/TCP 17s
访问
可以通过以下命令不运行而生成yaml文件
kubectl expose deployment nginx-deployment --port=80 --type=NodePort --target-port=80 --name=nginx-service --dry-run -o yaml
使用yaml文件创建应用与kucectl直接创建应用的不同之处是便于留存,而且可以把刚刚两个配置文件放在一起进行配置
使用命令生成yaml配置文件
kubectl run nginx --image=nginx:latest --port=80 --replicas=3 --dry-run -o yaml # --dry-run 测试不运行 #-o yaml 输出为yaml格式
生成的yaml文件重定向输出至文件
kubectl run nginx --image=nginx:latest --port=80 --replicas=3 --dry-run -o yaml >my-deploy.yaml
# cat my-deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: run: nginx name: nginx spec: replicas: 3 selector: matchLabels: run: nginx strategy: {} template: metadata: creationTimestamp: null labels: run: nginx spec: containers: - image: nginx:latest name: nginx ports: - containerPort: 80 resources: {} status: {}
对于已经在运行的的可以使用get命令导出
kubectl get deploy/nginx --export -o yaml > my-deploy2.yaml
Pod容器字段忘记拼写了可以通过以下命令查看
kubectl explain pods.spec.containers