[Kubernetes]yaml文件详解

应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kubernetes中的应用为主.

YAML基础

YAML(Yet Another Markup Language)不是一种标志语言.它的应用很广泛,在这里着重讲一讲,在Kubernetes中的一些内容.
使用YAML用于k8s的定义将给你一些好处,包括:

  • 便捷性:你将不再需要添加大量的参数到命令行中执行命令
  • 可维护性:YAML文件可以通过源头控制,可以跟踪每次的操作
  • 灵活性:通过YAML你将可以创建比命令行更加复杂的结构
  • YAML是一个JSON的超集,意味着任何有效JSON文件也都是一个YAML文件.关于Kubernetes中YAML的使用,只有两种类型你需要知道:
  • Maps
  • Lists
  • YAML Maps

    咱们先来看看YAML Maps这种类型.Maps可以将键值组合,从而可以更加方便的去配置信息.像下面这样,你可能会有这样一个配置信息:

    ---
    apiVersion: v1
    kind: Service
    

    第一行是分隔符,并且是可选的.如果在单个文件中只定义了一个服务,那么这种情况下,第一行的分隔符就可以忽略不计.
    在上面的例子中,可以看出有两个值:v1和Service,对应它们的键是apiVersion和kind

    YAML Lists

    接下来介绍一下YAML Lists.其实它就是一个序列的对象,例如:

    args
      - sleep
      - "1000"
      - message
    

    我们可以看到,可以有任何数量的项在列表中,项的定义以破折号(-)开头,并且和父元素之间存在缩进.但是要注意一点:在YAML文件中绝对不要使用tab键来进行缩进.

    实际中的运用

    基本上,不管我们想要什么样的结构,都可以通过这两个结构去组合实现.接下来我就以我在项目中使用的yaml文件为例来进行讲解一下(#后面内容为注释内容):

    apiVersion: v1
    kind: ReplicationController   #类型是一个RC
    metadata:
      name: nginx-controller      
    spec:
      replicas: 2                 #我想要2个RC
      selector:
        name: mynginx
      template:
        metadata:
          labels:
            name: mynginx
        spec:
          containers:
          - name: mynginx
            image: reg.zll.com/web/nginx:1.12.2    #前端需要部署在nginx上,这里是对应的nginx的镜像。
            volumeMounts:
            - name: httpd-storage
              mountPath: /etc/nginx/nginx.conf          #镜像中nginx的配置文件地址,用下面的path:/home/nginx.conf去代替此路径。
            - name: httpd-storag
              mountPath: /usr/local/dist                       
            ports:
            - containerPort: 80                                
          volumes:
          - name: httpd-storage
            hostPath:
              path: /home/nginx.conf             #自定义的nginx的配置文件,挂载到服务器上的这一路径下,去代替镜像中nginx的配置
          - name: httpd-storag
            hostPath:
              path: /usr/local/dist              #前端打包好的文件,放置的路径,去代替上放的mountPath:/usr/local/dist
     
    ---
    apiVersion: v1 
    kind: Service    #类型是个service
    metadata: 
      name: nginx-service-nodeport 
    spec: 
      ports: 
        - port: 8000   
          targetPort: 80 
          nodePort: 30080    #暴露出来可供访问的IP.
          protocol: TCP  
      type: NodePort
      selector: 
        name: mynginx
    

    就我目前知识,研究到了这种程度,感谢您的阅读~

    posted @ 2019-01-01 14:11  Developer_lulu  阅读(626)  评论(0编辑  收藏  举报