kubectl expose deployment 和 create service 有什么区别?

What are the differences between kubectl expose deployment and create service?

两者有什么区别

kubectl expose deployment myservice --type=NodePort --port=80 --target-port=80

kubectl create service nodeport myservice --tcp=80:80

?

kubectl create service nodeport myservice --tcp=80:80

它只是创建服务名称为 labels/selector 的服务。

kubectl expose deployment myservice --type=NodePort --port=80 --target-port=80

它根据部署中指定的labels/selector创建服务。因此,使用它您可以通过单个 Nodeport.

公开特定部署的所有 PODs

解释:

两者主要在标签选择器方面存在差异。

kubectl create service nodeport myservice --tcp=80:80

如果您将 运行 以上命令,它将创建带有选择器 myservice 的服务。

示例

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myservice
  name: myservice
spec:
  ports:
  - name: 80-80
    nodePort: 30858
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: myservice
  type: NodePort

正如您在 selector : myservicelabelsservicename 中看到的一样。所以 service name 变成 labelsselector。您的服务已在此处创建,但无法与部署对话,因为选择器不同(除非您使用来自部署的匹配选择器的名称创建服务)。

同时使用命令:

kubectl expose deployment nginx-deployment --type=NodePort --port=80 --target-port=80

它将使用部署的标签和选择器。这意味着如果你部署了 Nginx 运行ning 并且它有 selector : nginx 它会在你公开该部署时从那里获取它。

示例部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.2
        imagePullPolicy: IfNotPresent
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP

现在如果你运行命令像

kubectl expose deployment nginx-deployment --type=NodePort --port=80 --target-port=80

服务将 selector: nginx 用于部署。

示例服务 :

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  ports:
  - name: 80-80
    nodePort: 30858
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort

differences between kubectl expose deployment and create service

1: expose 命令创建了一个 Service 资源,它具有与 Deployment 使用的 pod 选择器相同的 pod 选择器,从而通过单个 IP 公开其所有 pods地址和端口。

2: create 命令创建了一个服务资源,提供了更多自定义行为。