前言


上一部分编写了一个yaml配置文件来部署应用,这节内容将补充介绍下该yaml中用到且之前没提过的字段。


一、Deployment部分

Deployment是k8s用来对pod进行自动管理的逻辑意义上的资源类型。对与pod一般不会直接进行创建使用,而是通过和Deployment类似的ReplicationController(RC)进行管理,包括创建、更新、维护等。很常用。
yaml如下:

 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: bootcamp-deploy
   labels: 
     app: my-bootcamp
 spec:
   selector:
     matchLabels:
       app: my-bootcamp
   replicas: 2
   template:
     metadata:
       labels:
         app: my-bootcamp
     spec:
       containers:
         - name: test-bootcamp
           image: jocatalin/kubernetes-bootcamp:v1
           ports:
             - containerPort: 8080
  1. spec.selector.matchLabels
    该字段必须写上,否则会报错,提示missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec;
    该字段的作用是将此Deployment与后面的spec.template.metadata.lables相互匹配。labels字段的作用就是打上键值对类型的标签,用于与其他部分关联。

  2. spec.replicas
    该字段表示副本数,即要创建的pod数量。通过改变该字段的值,可以很方便的提现服务伸缩的特性。

  3. spec.template
    该字段是要创建pod的模板。

  4. spec.template.spec.containers
    该字段用于配置pod需要的容器信息。

二、Service部分

Service主要是提供服务自动发现和负载均衡。服务自动发现是为一组具有相同功能的容器应用提供一个统一的入口地址,如上面的Deployment创建的容器。负载均衡是将请求进行负载分发到后端的各个容器应用上。

yaml如下:

 apiVersion: v1
 kind: Service
 metadata: 
   name: hello-bootcamp
 spec:
   type: NodePort
   selector:
     app: my-bootcamp
   ports:
   - protocol: TCP
     port: 80
     targetPort: 8080
     nodePort: 30008
  1. spec.type
    该字段是指服务类型,类型有4种:ClusterIP, NodePort, LoadBalancer和ExternalName, 。最常用的是ClusterIP和NodePort。
    ClusterIP是默认模式,提供一个集群内部的虚拟IP以供Pod访问,仅用于集群内通信,在集群外是无法访问应用的。通过ClusterIP就可以访问到pod.
    NodePort:在每个Node上打开一个端口以供外部访问,会将外部访问的流量转发到集群内部。流程大概如下:
    客户端 ->NodeIP:NodePort ->ClusterIP:ServicePort-> PodIP:containerPort
    (另外两个没用过,不了解…)
    LoadBalancer:需要通过外部的负载均衡器来访问,在NodePort的基础上,借助Cloud Provider创建一个外部负载均衡器,并将请求转发到NodePort。
    ExternalName:将服务映射到 DNS 名称
    建议看看这篇文章,了解更具体说明。

  2. spec.selector
    该字段用于将service和pod关联起来,会用到pod和podIP信息组合生成一个endpoint。

  3. spec.ports
    该字段指明service的端口信息:

    • port:service的端口,和ClusterIP联合使用的端口。
    • targetPort:容器暴露的端口,和PodIP联合使用的端口。
    • nodePort:Node对外暴露的端口,和NodeIP联合使用的端口。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐