3.8 停止和移除pod
到目前为止,我们已经创建了一些应该仍在运行的pod。其中有四个pod在default命名空间中运行,一个pod在custom-namespace中运行。由于我们已经不需要这些pod了,所以此时考虑停止它们。
3.8.1 按名称删除pod
首先,我们将按名称删除kubia-gpu pod:
$ kubectl delete po kubia-gpu
在删除pod的过程中,实际上我们在指示Kubernetes终止该pod中的所有容器。Kubernetes向进程发送一个SIGTERM信号并等待一定的秒数(默认为30),使其正常关闭。如果它没有及时关闭,则通过SIGKILL终止该进程。因此,为了确保你的进程总是正常关闭,进程需要正确处理SIGTERM信号。
提示 还可以通过指定多个空格分隔的名称来删除多个pod(例如:kubectl delete po pod1 pod2
)。
3.8.2 使用标签选择器删除pod
与根据名称指定pod进行删除不同,此时将使用我们了解的关于标签选择器的知识来停止 kubia-manual
和 kubia-manual-v2 pod
。这两个pod都包含标签 creation_method=manual
,因此可以通过使用一个标签选择器来删除它们:
$ kubectl delete po -l creation_method=manual
在之前的微服务示例中,我们有几十个(或可能有几百个)pod。例如,通过指定 rel=canary
标签选择器(如图3.10所示),可以一次删除所有金丝雀pod:
$ kubectl delete po -l rel=canary
图3.10 通过rel=canary标签选择器选择并删除所有金丝雀pod
3.8.3 通过删除整个命名空间来删除pod
再回过头看看custom-namespace中的pod。此时不再需要该命名空间中的pod,也不需要命名空间本身。这意味着,可以简单地删除整个命名空间(pod将会伴随命名空间自动删除)。现在使用以下命令删除custom-namespace:
$ kubectl delete ns custom-namespace
3.8.4 删除命名空间中的所有pod,但保留命名空间
此时我们已经清理了几乎所有的东西,但在第2章中用kubectl run命令创建的pod怎么样了呢?该pod目前仍然在运行:
$ kubectl get pods
这一次我们不再删除一个特定pod,而是通过使用--all选项告诉Kubernetes删除当前命名空间中的所有pod:
$ kubectl delete po --all
3.8.5 删除命名空间中的(几乎)所有资源
通过使用单个命令删除当前命名空间中的所有资源,可以删除ReplicationCcontroller和pod,以及我们创建的所有service:
$ kubectl delete all --all
命令中的第一个all指定正在删除所有资源类型,而--all选项指定将删除所有资源实例,而不是按名称指定它们(我们在运行前一个删除命令时已经使用过此选项)。
注意 使用all关键字删除所有内容并不是真的完全删除所有内容。一些资源(比如我们将在第7章中介绍的Secret)会被保留下来,并且需要被明确指定删除。
删除资源时,kubectl将打印它删除的每个资源的名称。在列表中,可以看到在第2章中创建的名为kubia的ReplicationController和名为kubia-http的Service。
注意 kubectl delete all --all
命令也会删除名为kubernetes的Service,但它应该会在几分钟后自动重新创建。