管理的三种形式

1. 命令式对象管理 kubectl create deployment nginx --image nginx
2. 命令式对象配置 kubectl create -f nginx.yaml
3. 声明式对象配置 kubectl apply -f nginx.yaml

三个概念

  • object configuration file / configuration file:定义 Kubernetes 对象配置的文件,通常存储在源代码控制中,比如 Git。
  • live object configuration / live configuration:对 Kubernetes 集群可见的对象的实时配置值。保存在 Kubernetes 集群存储中,通常是 etcd。
  • declarative configuration writer / declarative writer:对活动对象进行更新的人员或软件组件。本主题中提到的 live writer 会更改对象的配置文件,并运行 kubectl apply 来写入更改

命令式对象管理

优缺点

简单易学,只能操作活动对象,无法跟踪、审计(我的理解就是没有文件目录,没法统一管理)

创建对象

• run:创建 Deployment 对象,用于在 Pod 中运行容器。
• expose:创建 Service 对象,用于在 Pod 之间负载均衡流量。
• autoscale:创建 Autoscaler 对象,用于自动水平伸缩控制器,例如 Deployment。

更新对象

• scale:水平伸缩控制器,通过更新控制器的副本数量来添加或删除 Pod。
• annotate:添加或删除对象的注释。
• label:添加或删除对象的标签。
• set:设置对象的一个方面。不同对象的字段可能不同
• edit:通过在编辑器中打开其配置文件,直接编辑活动对象的原始配置。
• patch:使用 patch 命令指定的字符串直接修改活动对象的特定字段。

查看对象

• get:打印对象基本信息。
• describe:打印对象详细信息。
• logs:打印 Pod 中运行的容器的 STDOUT 和 STDERR 信息。

删除对象

  • delete type>/name>

命令式对象配置

优缺点

配置文件可以使用版本控制,可以审计、跟踪;不支持目录操作,项目大时,配置文件多,操作麻烦。只能通过配置文件更新(整个替换)活动对象。

创建对象

  • kubectl create -f

更新对象

  • kubectl replace -f

查看对象

  • kubectl get -f -o yaml

删除对象

  • kubectl delete -f

声明式对象配置

优缺点

支持目录操作,可以直接更改活动对象并保留信息(例如用init.yaml创建了一个deployment,可以再写一个update.yaml 升级同一个deployment,k8s中的deployment的kubectl.kubernetes.io/last-applied-configuration注释将显示update.yaml修改后的配置结果);意外情况下难以调试。

创建对象

  • kubectl apply -f

这会为每个对象设置 kubectl.kubernetes.io/last-applied-configuration: '{...}' 注释。注释包含用于创建对象的对象配置文件的内容。

可以通过 -R 选项递归处理目录。

更新对象

  • kubectl apply -f

查看对象

  • kubectl get -f -o yaml

删除对象

  • kubectl delete -f (推荐)
  • kubectl apply -f --prune -l your=label (强烈不建议)