第四章 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

 

posted @ 2020-03-04 09:29  minseo  阅读(2693)  评论(0编辑  收藏  举报