1.在命令式API中,你可以直接发出服务器要执行的命令,例如: “运行容器”、“停止容器”等。
在声明性API中,你声明系统要执行的操作,系统将不断向该状态驱动。
可以想象成手动驾驶和自动驾驶系统。(多了会删除,少了会自动增加)
因此,在Kubernetes中,你创建一个API对象(使用CLI或REST API)来表示你希望系统执行的操作。系统中的所有组件都会向该状态发展,直到删除该对象。
例如,如果要调度容器化工作负载,不是发出“运行容器”命令,而是创建描述所需状态的API对象、pod:
创建后,此对象在API服务器上保留:
Deployment管理Pods和ReplicaSets,提供声明式更新。和老的ReplicationController(命令式管理)对应
2. 1rc vs rs
rc用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;
ReplicaSet跟ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector。
虽然ReplicaSet可以独立使用,但一般还是建议使用 Deployment 来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)。
2.2Deployment拥有更加灵活强大的升级、回滚功能