其次讲述一下通过deployment的方式部署应用服务,如何结合对应svc来实现服务发现;)

节点调度选择

方式一:通过nodeselector的方式

在这里插入图片描述
如官网中上述方式直接创建一个nginx的pod被调度到具有disktype:ssd标签的节点上。
注意:若含有多个key-value,则需要同时满足,才能被调度到对应节点上。

方式二:通过nodeAffinity的方式

在这里插入图片描述
通过这种更具表达性的方式去决定调度的节点(有如下operator操作:In, NotIn, Exists, DoesNotExist, Gt, Lt. 其中,NotIn 和 DoesNotExist用于实现反亲和性)
在这里插入图片描述
最后,总结这种方式的调度逻辑为:
matchExpressions下面的条件是与关系,同级matchExpressions是或关系

deployment与对应svc进行绑定;

本文以创建nginx服务为例,通过样例测试deploy与svc之间如何以标签形式绑定关系,并在svc中形成对应EP

deployment的yaml如下:(下列####表示省略了部分配置信息,该文主要描述deployment与对应svc进行绑定)

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
   #####################
  generation: 3
  labels:
    app: nginx  ##关键
    app/name: test.prod-ns1
  name: test-nginx-1
  namespace: prod-ns1
  ####
  spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx ## 关键
      project.cpaas.io/name: prod
      service.cpaas.io/name: deployment-test-nginx
##### 
  template:
    metadata:
      annotations:
        cpaas.io/creator: admin
      creationTimestamp: null
      labels:
        app: nginx ## 关键
        app.cpaas.io/name: test.prod-ns1
        project/name: prod
        service/name: deployment-test-nginx
#####

####注意:这里的三处,metadata的labels定义了deploy的标签,spec.selector定义了该匹配什么样标签的pod,template里面则定义了pod的标签类型!!####

SVC的yaml文件如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: prod-ns1
  labels:
    app: nginx
spec:
  selector:
    app: nginx
  clusterIP: None
  ###注意这里定义了一个headless类型的SVC,而通过标签选择器则使对应pod有了相应的svc;
  ports:
  - port: 80

最后:kubectl describe svc -n prod-ns1 nginx

在这里插入图片描述
显示出对应EP信息;

Logo

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

更多推荐