大多数 Kubernetes 对象由 Kubernetes 集群自身根据用户的指令自动创建和管理。然而,Kubernetes 也允许你直接创建和修改对象。
在本页中,我们将讨论如何使用 Kubernetes API 来直接管理对象。
声明式 vs 命令式
你可以通过两种方式使用 Kubernetes API 来管理资源:声明式和命令式。
声明式管理
在声明式管理中,用户(或管理系统)提供他们希望集群达到的状态的描述,然后 Kubernetes 更改集群的当前状态以匹配所提供的描述。Kubernetes 负责确定如何达到用户指定的状态。
例如,你可以使用 kubectl apply
命令以及一个包含资源定义的 YAML 文件来声明你想要的状态。kubectl
会将该描述发送到 Kubernetes API 服务器。然后,Kubernetes 会更改集群的状态以匹配你的描述。
声明式方法的一个关键优势是,如果集群的状态在声明之后被其他操作更改,那么你可以通过重新应用相同的声明来恢复状态。
命令式管理
在命令式管理中,用户(或管理系统)直接告诉 Kubernetes API 服务器他们希望执行的操作。例如,你可以使用 kubectl run
命令来启动一个新的 Pod。这个命令告诉 Kubernetes API 服务器创建一个新的 Pod。
与声明式管理相比,命令式管理通常更简单和直接,但它不提供相同的恢复机制。如果集群的状态在命令执行后被其他操作更改,那么你需要重新执行相同的命令来恢复状态。
选择哪种方法
在许多情况下,声明式管理是更好的选择,因为它提供了更好的状态恢复能力,并允许用户更容易地理解和预测集群的状态。然而,在某些情况下,命令式管理可能更合适,特别是当你需要执行一次性操作或进行调试时。
使用 kubectl 管理对象
kubectl
是 Kubernetes 的命令行工具,它提供了与 Kubernetes API 服务器交互的接口。你可以使用 kubectl
来执行各种操作,如创建、更新、删除和获取对象。
例如,以下是一个使用 kubectl
创建 Pod 的命令:
kubectl run my-nginx --image=nginx
这个命令告诉 Kubernetes 创建一个新的 Pod,该 Pod 运行 nginx
镜像,并将 Pod 命名为 my-nginx
。
你还可以使用 kubectl
来获取对象的当前状态:
kubectl get pods my-nginx
这个命令将返回名为 my-nginx
的 Pod 的当前状态。
你还可以使用 kubectl apply
来声明性地管理对象。例如,假设你有一个名为 pod.yaml
的文件,其中包含 Pod 的定义。你可以使用以下命令来应用该文件中的定义:
kubectl apply -f pod.yaml
kubectl` 将发送 Pod 的定义到 Kubernetes API 服务器,并更新集群的状态以匹配该定义。
总结
Kubernetes 对象管理涉及使用 Kubernetes API 来创建、更新和删除对象。你可以使用声明式或命令式方法来管理对象。kubectl
是一个强大的工具,可以帮助你与 Kubernetes API 服务器交互并管理对象。通过理解这些概念并使用适当的工具,你可以有效地管理 Kubernetes 集群中的对象。