“ kubectl apply”的反义词是什么?

Vac*_*ano 2 kubernetes

我在minikube中玩耍,并安装了错误版本的istio。我跑了:

kubectl apply -f install/kubernetes/istio-demo-auth.yaml
Run Code Online (Sandbox Code Playgroud)

代替:

kubectl apply -f install/kubernetes/istio-demo.yaml
Run Code Online (Sandbox Code Playgroud)

我想我只是撤消它并安装正确的它。

但是我似乎找不到unapply命令。

如何撤消 “ kubectl apply”命令?

zer*_*kms 8

一种方法是,kubectl delete -f <filename>但这意味着很少的事情:

  1. 首先创建资源。如果您真的想“恢复到以前的状态”,它只是删除了所有这些内容,我不确定Kubernetes中是否有内置工具可以做到这一点(因此,如果有备份,您真的可以从备份中还原)

  2. 容器没有修改主机:容器可以挂载根文件系统并对其进行更改,或者可以挂载内核子系统(iptables等)。该delete命令也不会还原它,在这种情况下,您确实需要检查产品的文档,以查看它们是否提供任何官方方式来保证正确的清理。

  • 我确实从中学到了有关 Kubernetes 备份的重要教训。它已成为我的项目的“必备”。 (2认同)

小智 7

记住这一点非常重要,从技术上讲,不存在逆向的kubectl apply。这是因为 k8s 的工作方式决定了它会根据当前状态收敛所需状态。通过运行apply,您正在告诉集群“使其看起来像这样”。但集群中的控制器不会从最严格的意义上对您的配置进行版本控制。

在您的情况下,您真正​​的意思是“我如何摆脱因误用清单而创建的资源?” 这不完全是一回事。其他答案是针对您的情况回答这个问题的一个很好的例子。但了解它比这更微妙是有用的。

我这么说是什么意思?

考虑一下如果您应用清单、调整清单内容然后将其重新应用到集群,会发生什么情况?在不删除所有内容并从头开始的情况下,如何从状态 B 转到状态 A?

一旦完成应用,K8s 就不记得清单的先前状态是什么,在此上下文中没有“撤消”按钮,因此您无法仅通过运行某种形式的假设将其恢复到先前状态kubectl undo命令。

如果您想撤消对资源的某种形式的补丁,您确实需要使用 k8s 范围之外的其他工具。这就是为什么版本控制变得非常重要,特别是当您操作更复杂的堆栈时。在我建议的场景中,您可能会签出以前的版本并将其应用为您的“回滚”操作。与往常一样,有一些警告,但对于大多数用例来说,这会很有效。


mre*_*rek 5

如果您创建了新应用程序,请kubectl delete按照 @zerkms 的建议使用。

但是,如果您像我一样并将较新的版本部署到不同的集群 - 因此应用程序会陷入这样的创建模式:

NAME                   READY   STATUS             RESTARTS   AGE
my-application-csbxl   0/1     ContainerCreating  0          5m25s
my-application-5bcvc   1/1     Running            0          2d1h
Run Code Online (Sandbox Code Playgroud)

那么最好的解决方案就是回滚,因为它返回到之前的部署:

kubectl rollout undo deployment my-application
Run Code Online (Sandbox Code Playgroud)