k8s in action实践笔记

3.8 停止和移除pod

2021-07-13  本文已影响0人  众神开挂

到目前为止,我们已经创建了一些应该仍在运行的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-manualkubia-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,但它应该会在几分钟后自动重新创建。

上一篇下一篇

猜你喜欢

热点阅读