Service示例

apiVersion: v1
Kind: Service
metadata:
  name: hello-service
spec:
  type:NodePort
  selector:
    app: hello-k8s-demo
  port:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30008

apiVersion: 当前yaml使用的api版本。
kind:声明对象类型。
metadata中的name定义了service的名称。

spec:service的规则声明。

其中的type声明了service的类型。
NodePort类型表示在每个节点上暴露一个tcp port,将服务暴露在k8s的集群之外,集群外部也可以访问该服务。

selector:通过label匹配后端的pod的选项。pods是一组pod。

port是一个虚拟的service端口,并不是真实存在的。
targetport是后端容器监听的端口。
nodeport是每个节点监听的端口。

在describe查看service详情时,可以查看endpoint。如果endpoint对应的值是none,说明没有一个pod是为他服务的。这种情况发生在创建了service,但没有创建后端pod。

通过Deployment控制器进行后端pod的部署。

Deployment示例

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: hello-deployment
  labels:
    app: hello-k8s-demo
  spec:
    replicas: 2
    template: 
      metadata:
        labels:
          app: hello-k8s-demo
      spec:
        containers:
        - name: hello-k8s
          image:###
          imagePullPolicy: Always
          ports:
          - containerPort:8080

replicas:副本个数。Deployment部署后k8s集群里有两个pod在运行。

template:pod的模板配置。
每一个pod都会基于该模板进行创建。这里的labels很重要。因为service中的selector就是通过这个label来匹配pod 的。
spec:pod的规格信息,主要定义了容器的信息。定义了容器的名字,容器的镜像和镜像的拉取策略。containerPort是pod暴露在集群网络的端口。

服务请求的自动负载均衡:k8s会自动将服务的请求负载均衡到后端的pod上。
服务伸缩:业务有波峰波谷。在波谷的时候降低pod的数量以节省资源的消耗。在波峰的时候新增副本的数量,提交的服务请求也会被负载均衡到新的pod中。

Logo

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

更多推荐