管理的三种形式
- 命令式对象管理 kubectl create deployment nginx --image nginx
- 命令式对象配置 kubectl create -f nginx.yaml
- 声明式对象配置 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 (强烈不建议)