定期删除是最常见的直接根据pod名称删除的方式。删除后,如果pod是使用deployment创建的,会自动创建一个新的容器。kubectldeletepodsdeployment-ngx-8ff559dc9-nkube-systempod"deployment-ngx-8ff559dc9"deleted也可以使用以下命令删除pod通过pod.json文件中指定的资源类型和名称删除pod$kubectldelete-f./pod.json删除所有名为""baz"和"foo"的pod和service$kubectldeletepod,servicebazfoo删除所有带有lablename=myLabel和service$kubectldeletepods,services-lname=的podmyLabel删除UID为1234-56-7890-234234-456456的pod$kubectldeletepod1234-56-7890-234234-456456删除所有pod以便机器异常时快速恢复$kubectldeletepods--all方法直接删除pod,由于deployment资源定义了pod的副本数,会维持pod在期望的状态,如果想彻底删除,需要删除对应的deploymentkubectldeletedeploymentname-n[namespace]#添加-n以指定命令Space通过以下方式查看pod中的标签标签删除。kubectlgetpod--show-labelsNAMEREADYSTATUSRESTARTSAGELABELSnginx11/1运行04h59mnodejs-11/1运行05h7menv=Basic_version,versions=testnodejs-21/1运行03h48menv=development_adeupversion,versions=Minor对于标签为versions=test的pod,这个方法其实是直接删除pod,但是移动标签的功能是快速删除,前提是你使用了标签。kubectldeletepod-lversions=testpod"nodejs-1"deletedreplica在生产环境中,经常会根据业务量的变化调整podreplicas的数量。这个方法也可以用来删除pod,或者作为升级过程关闭业务入口。kubectlscaledeploy/nginx-1--replicas=0-n[namespace]#将replicas数量减少到0kubectlscale可以操作deploymentreplicas的扩容,通过修改--replicas的数量实现缩容和扩容。强制删除Teminating是一种比较常见的pod状态。在这种状态下,pod一般处于destroyed状态,但还没有被正常删除。[root@k8s-master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEdeployment-ngx-8ff559dc90/1Terminating06m10sdeployment-ngx-8ff559dc90/1Terminating016m如果节点宕机或失去连接太久,它可能导致pod一直处于Terminating状态。这个时候kubectldelete可能无法删除。在此状态下,pod已被确定为无法提供服务。kubectldeletepod[podname]--force--grace-period=0-n[namespace]Kubernetes提供了grace-period参数。该选项会在删除Pod时生效,一定时间后会被删除。如果不设置,则等待30s再删除。这里我们指定grace-period为0,表示pod会被立即删除。为什么延迟删除?判断的标准是DeletionGracePeriodSeconds的值是否为0,如果不为0则表示优雅删除。apiserver不会立即从etcd中删除object,否则会直接删除。对于Pod,默认的DeletionGracePeriodSeconds是30秒,所以不会立即删除,DeletionGracePeriodSeconds设置为默认值30秒。在删除之前,很多容器化的应用往往会有一些操作需要处理,这些都会需要一些时间。etcd中删除首先找到etcd的三个证书相关文件,查看目录/etc/kubernetes/pki/etcd/中的证书位置,查看systemctlstatusetcd执行命令找到podETCDCTL_API=3etcdctl--endpoints=https://ip:2379--cacert=/etc/kubernetes/pki/etcd/ca.pem--cert=/etc/kubernetes/pki/etcd/etcd-client.pem--key=/etc/kubernetes/pki/etcd/etcd-client-key.pem获取/registry/pod--prefix--keys-only|grep{pod-name}执行命令删除podETCDCTL_API=3etcdctl--endpoints=https://ip:2379--cacert=/etc/kubernetes/pki/etcd/ca.pem--cert=/etc/kubernetes/pki/etcd/etcd-client.pem--key=/etc/kubernetes/pki/etcd/etcd-client-key.pemdel/registry/pods/default/{pod-name}
