k8s-yml文件详解

Nginx 业务 yaml 文件详解:

cat /opt/linux-yml/nginx.yml

kind: Deployment #对象类型,是deployment控制器,kubectl explain Deployment
apiVersion: extensions/v1beta1  #指定这个对象属于哪个api分组,它的API版本是多少,
								# kubectl explain Deployment.apiVersion
metadata:     #pod的元数据信息,kubectl explain Deployment.metadata
  labels:     #自定义pod的标签,kubectl explain Deployment.metadata.labels
    app: linux-nginx-deployment-label #标签名称为app值为linux-nginx-deployment-label, 后面会用到此标签
  name: linux-nginx-deployment        #pod的名称 
  namespace: linux-ns                 #把pod的创建到指定的namespace,默认是default
spec:            #定义deployment中容器的详细信息,kubectl explain Deployment.spec
  replicas: 1    #创建出的pod的副本数,即多少个pod,默认值为1 
  selector:      #定义标签选择器
    matchLabels: #定义匹配的标签,必须要设置
      app: linux-nginx-selector   #匹配的目标标签
  template:      #定义模板,必须定义,模板是起到描述要创建的pod的作用
    metadata:    #定义模板元数据
      labels:    #定义模板label,Deployment.spec.template.metadata.labels
        app: linux-nginx-selector   #定义标签,必须等于 matchLabels 定义的标签
    spec:          #定义pod信息
      containers:  #定义pod中容器列表,可以多个至少一个,pod不能动态增减容器(想新添加容器,需要把原有pod删除,重新创建pod)
      - name: linux-nginx-container                      #容器名称
        image: harbor.linux.com/web-images/nginx:1.14.2  #镜像地址
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]     #容器启动执行的命令或脚本           
        #imagePullPolicy: IfNotPresent                   #本地有指定的镜像,就不去harbor中拉取
        imagePullPolicy: Always    #拉取镜像策略;不管本地有没有所指定的镜像,都去harbor拉取
        ports:                #定义容器端口列表
        - containerPort: 80   #定义一个端口
          protocol: TCP       #端口协议,TCP或者UDP
          name: http          #端口名称
        - containerPort: 443  #定义一个端口
          protocol: TCP       #端口协议 
          name: https         #端口名称
        env:                  #给容器传递配置的环境变量
        - name: "password"    #变量名称。必须要用引号引起来
          value: "123456"     #当前变量的值
        - name: "age"         #另一个变量名称 
          value: "18"         #另一个变量的值
        resources:            #对容器资源的请求设置和限制设置
          limits:             #硬限制;限制容器使用宿主机资源上限
            cpu: 2            #cpu的限制,单位为core数,可以写0.5或者500m(毫核)等CPU压缩值,1000毫核
            memory: 2Gi       #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
          requests:  #资源请求的设置;当构建pod时,过滤出哪些node节点的剩余资源符合下面所指定的值,则创建pod时,才有可能把pod往该node节点调度;如果不够下面所指定的值,则创建pod时不会把pod往不符合要求的node上调度
            cpu: 1        #cpu请求数,容器启动的初始可用数量,可以写0.5或者500m等CPU压缩值
            memory: 512Mi #内存请求大小,容器启动的初始可用数量,用于调度pod时候使用

---
kind: Service    #对象类型为service;pod要想被外部访问,就必须指定一个service,service会在宿主机打开一个nodeport;service不指定nodeport,则该service仅限于k8s内部调用	     
apiVersion: v1   #service API版本,service.apiVersion 
metadata:        #定义service元数据,service.metadata
  labels:        #自定义service的标签,service.metadata.labels
    app: linux-nginx     #定义service标签的内容
  name: linux-nginx-spec #定义service的名称,此名称会被DNS解析
  namespace: linux-ns    #该service隶属于的namespaces名称,即把service创建到哪个namespace里面,并且service必须与pod在同一个namespace中,否则在调用时,service找不到所调用的pod 
spec:               #定义service的详细信息,service.spec
  type: NodePort    #NodePort表示在宿主机打开一个监听端口;service的类型,定义服务的访问方式,默认为ClusterIP(不会再宿主机打开一个监听端口,只为k8s内部提供服务),service.spec.type
  ports:            #定义访问端口, service.spec.ports
  - name: http      #定义一个端口名称
    port: 80        #service的端口 
    protocol: TCP   #协议类型;service是k8s内部的一个传输层的负载均衡 
    targetPort: 80  #目标pod的端口 
    nodePort: 30001 #node节点暴露的端口
  - name: https     #SSL 端口
    port: 443       #service 443端口 
    protocol: TCP   #端口协议 
    targetPort: 443 #目标pod端口 
    nodePort: 30043 #node节点暴露的SSL端口
  selector:   #service的标签选择器,定义把用户请求转发给指定label标签的pod;service会把符合label标签的pod添加到后端可被调度的endpoint列表中
    app: linux-nginx-selector #将流量转发到指定的pod上,须等于Deployment.spec.selector.matchLabels

注意事项

提前创建好yml文件,并创建好pod运行所需要的namespace的yml文件等资源,一般创建namespace的操作,会单独存放在一个yml文件中

cat /opt/linux-yml/linux-ns.yml

apiVersion: v1     #API版本 
kind: Namespace    #类型为namespac 
metadata:          #定义元数据 
  name: linux-ns   #namespace名称
原文地址:https://www.cnblogs.com/dongzhanyi123/p/13330313.html