Kubernetes Deployment StatefulSet DaemonSet HPA
Replication Controller 和 ReplicaSet
Replication Controller 和 ReplicaSet 都是用于控制pod数量符合期望,ReplicaSet是支持基于集合的标签选择器的下一代Replication Controller,它主要用作Deployment协调创建、删除和更新Pod,ReplicaSet支持标签选择器。Replication Controller 和 ReplicaSet 一般不会单独使用,多数是通过其它资源进行调用,如deployment。
Deployment
用于部署无状态的服务;
更新:kubectl set image deploy nginx nginx=nginx:1.15.3 –record # –record 将更新记录到历史中,方便后续进行回滚;
查看更新过程:kubectl rollout status deploy nginx
查看更新的历史版本:kubectl rollout history deploy nginx
回滚到上一版本:kubectl rollout undo deploy nginx
查看历史版本的详细信息: kubectl rollout history deploy nginx --revision=5
回滚到指定的历史版本:kubectl rollout undo deploy nginx --to-revision=5
Deployment 暂停和恢复:
Deployment 暂停之后,对Deployment 的修改将不会立即作用到Deployment 上,需要使用恢复的指令将Deployment 恢复,恢复后Deployment 将暂停之后的修改更新到当前的Deployment 上;
应用:需要通过命令多次修改Deployment ,并希望将所有的修改执行之后,再一次性应用到Deployment 上;
暂停:kubectl rollout pause deployment nginx
修改:kubectl set . . . . . .
恢复:kubectl rollout resume deploy nginx
更新策略:
RollingUpdate 滚动更新,可以设置最大不可用数量或者设置更更新过程中可以允许超过期望pod的数量;
Recreate 重建,该更新策略执行后更新后,pod并不会立即更新,而是需要等到pod被删除之后,新建的pod才会使用更新的版本;
StatefulSet
StatefulSet(有状态集,缩写为sts)常用于部署有状态的且需要有序启动的应用程序。
使用 StatefulSet 创建出来的pod,名称规则如下:
StatefulSetName-0、StatefulSetName-1 . . . . . .
StatefulSet创建的Pod一般使用Headless Service进行通信,Headless一般的格式为:
statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local
示例:使用 StatefulSet 管理redis集群,从节点配置:
slaveof redis-ms-0.redis-ms.public-service.svc.cluster.local 6379
注意:
StatefulSet目前使用Headless Service(无头服务)负责Pod的网络身份和通信,需要提前创建此服务。
删除一个StatefulSet时,不保证对Pod的终止,要在StatefulSet中实现Pod的有序和正常终止,可以在删除之前将StatefulSet的副本缩减为0。
更新:
updateStrategy:
rollingUpdate:
partition: 0 # partition 后面的数字,将会和 statefulSetName-{0..N-1} 中的数字比较,只更新 大于等于0的pod
type: RollingUpdate
DaemonSet
DaemonSet 在节点上只能存在一个,一般用于节点信息收集,如日志、节点监控,CNI的网络插件也是 DaemonSet;
也可根据标签选在某些节点进行DaemonSet 部署;
HPA:Horizontal Pod Autoscaler
HPA v1为稳定版自动水平伸缩,只支持CPU指标
V2为beta版本,分为v2beta1(支持CPU、内存和自定义指标)
v2beta2(支持CPU、内存、自定义指标Custom和额外指标ExternalMetrics)
注意:
如果是根据CPU或者内存进行HPA的话,需要为创建的容器指定cpu和内存资源;注意:1颗cpu = 1000m
使用指令创建一个简单的:kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10