021 云原生之 Kubernetes 部署
Kubernetes 中的部署是指如何控制一组 Pod 的运行状态使其满足生产需要。部署分为无状态部署和有状态部署。无论哪种部署,其内部都有副本集控制功能。
ReplicaSet 的目的是维护一组状态稳定的 Pod 副本,从而保证指定数量的相同 Pod 的可用性。它主要通过以下声明来控制副本数量。
在 Kubernetes 中,自动分配副本数量的算法如下:期望的副本数量=ceil[当前副本数量*(当前度量值/期望度量值)]。
部署(Deployment)是一个拥有 ReplicaSet 并通过声明来控制 Pod 滚动、更新的对象。虽然 ReplicaSet 可以独立使用,但是它主要被用作协调 Pod 创建、删除和更新的机制。使用部署时,用户不必担心副本集,因为部署通过 ReplicaSet 进行管理,建议使用部署而不是 ReplicaSet。
Recreate 是指重建所有 Pod,其过程为先终止 Pod 所有的副本,然后重新创建指定数量的 Pod 副本。而 RollingUpdate 则采取一定的控制策略来逐步更新 Pod 副本。
如果在版本升级过程中又触发了更新的版本升级,则 Kubernetes 会暂停之前版本的替换过程,用最新的版本替换之前刚刚升级的版本,然后再用最新的版本替换还未升级的版本。
有状态部署(StatefulSets)是用于管理有状态应用程序工作负载的一种部署方法。区别于无状态部署(Deployment),StatefulSets 可以对 Pod 副本进行排序并保证每个 Pod 的唯一性。在无状态部署中,删除一个 Pod,新建一个 Pod,对于所有 Pod 来讲都是一致的。但是在 StatefulSets 中,每个 Pod 都有唯一的持久标识符,即使在重建后也会继续保留该标识符。有状态部署适合以下场景:
● 需要独特的网络标识符。● 需要独立持久的存储。● 需要有序的部署和扩展。● 需要有序的升级。
一个 DaemonSet 确保每个节点上只运行一个副本。若有节点添加到集群中,将在新增的节点上运行唯一一个 Pod,若节点删除,则从该节点上终止 Pod。DaemonSet 适合以下场景:
● 每个节点上运行集群存储后台驻留程序,例如 glusterd、ceph。
● 每个节点上运行日志守护程序,例如 fuentd、logstash。
● 每个节点上运行 Prometheus node exporter、sisdig、collectd 等代理。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/3d1ff5dad9c0aaddf8666e09e】。文章转载请联系作者。
评论