如何删除 Kubernetes 服务

70

kubectl get service 命令返回一份曾经创建的服务列表:

NAME                     CLUSTER-IP   EXTERNAL-IP   PORT(S)                         AGE
car-example-service      10.0.0.129   <nodes>       8025:31564/TCP,1025:31764/TCP   10h
circle-example-service   10.0.0.48    <nodes>       9000:30362/TCP                  9h
demo-service             10.0.0.9     <nodes>       8025:30696/TCP,1025:32047/TCP   10h
example-servic           10.0.0.168   <nodes>       8080:30231/TCP                  1d
example-service          10.0.0.68    <nodes>       8080:32308/TCP                  1d
example-service2         10.0.0.184   <nodes>       9000:32727/TCP                  13h
example-webservice       10.0.0.35    <nodes>       9000:32256/TCP                  1d
hello-node               10.0.0.224   <pending>     8080:32393/TCP                  120d
kubernetes               10.0.0.1     <none>        443/TCP                         120d
mouse-example-service    10.0.0.40    <nodes>       9000:30189/TCP                  9h
spring-boot-web          10.0.0.171   <nodes>       8080:32311/TCP                  9h
spring-boot-web-purple   10.0.0.42    <nodes>       8080:31740/TCP                  9h

我不再需要列出的任何这些服务,因为当我列出资源时:

% kubectl get rs

我期望只看到列出了 spring-boot-web 资源。

NAME                         DESIRED   CURRENT   READY     AGE
spring-boot-web-1175758536   1         1         0         18m

请帮忙澄清一下,为什么我看到列出的服务,而资源只显示一个资源。

1
删除部署:kubectl delete deployment <deploymentname>,删除 Pod:kubectl delete pod <podname>,删除服务:kubectl delete service <servicename> - Ozal Zarbaliyev
7个回答

103

只需调用此命令。

  1. 获取所有可用服务:
kubectl get service -o wide
  1. 然后您可以像这样删除任何服务:
kubectl delete svc <YourServiceName>

1
只是为了澄清,<YourServiceName> 是从第一个命令输出的 NAME 列中获取的值。 - Asfand Qazi

45

显示部署

$ kubectl get deployments;

NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
spring-hello      1         1         1            1           22h
spring-world      1         1         1            1           22h
vfe-hello-wrold   1         1         1            1           14m

显示服务

$kubectl get services;

NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP          2d
spring-hello      NodePort    10.103.27.226   <none>        8081:30812/TCP   23h
spring-world      NodePort    10.102.21.165    <none>        8082:31557/TCP   23h
vfe-hello-wrold   NodePort    10.101.23.36     <none>        8083:31532/TCP   14m

删除部署

$ kubectl delete deployments vfe-hello-wrold

deployment.extensions "vfe-hello-wrold" deleted

删除服务

$ kubectl delete service vfe-hello-wrold

service "vfe-hello-wrold" deleted

6

Kubernetes对象,例如Service和Deployment/ReplicaSet/Pod是独立的,它们的删除不会级联到彼此(就像Deployment/RS/Pod之间一样)。您需要独立管理您的服务,并且只需要删除仍然存在的服务。


如何删除残留的服务?kubectl命令是什么? - joe the coder
14
kubectl 删除 svc <名称> - Radek 'Goblin' Pieczonka
你知道如何创建一个可以传递Docker参数的POD吗?https://stackoverflow.com/questions/47684382/kubernetes-pod-arguments-are-not-passing-to-service-however-docker-arguments-ar - joe the coder
https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/ - Radek 'Goblin' Pieczonka
我刚试了一下,看起来更好了,但是参数没有应用到调用程序。https://stackoverflow.com/questions/47700482/kubernetes-pod-arguments-are-not-displayed-in-service-under-args-without-error - joe the coder

6

如果您想同时删除多个相关或不相关的对象

 kubectl delete <objType>/objname <objType>/objname <objType>/objname

示例

 kubectl delete service/myhttpd-clusterip service/myhttpd-nodeport

 kubectl delete service/myhttpd-lb deployment/myhttpd

这也可以工作

kubectl delete deploy/httpenv svc/httpenv-np

5
为了删除所有命名空间中的所有服务,请运行以下命令:
kubectl delete --all services --namespace=*here-you-enter-namespace

另外一种选择是使用以下命令删除部署:

kubectl delete deployment deployment-name

这将同时删除服务!

重要提示:在生产环境中运行此命令时,请小心!

干杯!


请考虑编辑您的答案,添加一些解释和细节。虽然它可能回答了问题,但仅仅添加一些代码并不能帮助OP或未来的社区成员理解问题或解决方案。 - hongsy
3
想象一下,我在这里要删除我的生产环境中的应用程序,并复制了这个命令 - 删除生产环境中的所有应用程序... - wilmol
4
想象一下,如果你的经理发现你在生产环境中复制粘贴了 StackOverflow 上的某些内容,而你并不知道它具体是做什么的。 - likejudo
我有一个经理? :D 他管理什么? :P 哦不,我可能是经理! :S O tempora,o mores!谁来监督这些监督者?代码似乎很明显,但警告很重要。 - ntg

0

首先找到服务:

kubectl get service -A

请注意您想要删除的服务的命名空间。 然后使用以下方法进行删除
kubectl delete service <YourServiceName> --namespace <YourServiceNameSpace>

另外,请仔细检查一下@Dragomir Ivanov的回答是否更符合您的需求


0

如果你遇到了问题,很可能是忘记指定命名空间了:

-n some-namespace

这让我有些困扰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接