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 : myservice
和 labels
和 servicename
中看到的一样。所以 service name 变成 labels 和 selector。您的服务已在此处创建,但无法与部署对话,因为选择器不同(除非您使用来自部署的匹配选择器的名称创建服务)。
同时使用命令:
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 命令创建了一个服务资源,提供了更多自定义行为。
两者有什么区别
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.
解释:
两者主要在标签或选择器方面存在差异。
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 : myservice
和 labels
和 servicename
中看到的一样。所以 service name 变成 labels 和 selector。您的服务已在此处创建,但无法与部署对话,因为选择器不同(除非您使用来自部署的匹配选择器的名称创建服务)。
同时使用命令:
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 命令创建了一个服务资源,提供了更多自定义行为。