k8s滚动更新算法

我们已经创建了自己的自定义资源,也就是 CRD,我们需要添加对滚动更新的支持,因为 K8s 支持它用于部署等我们想重用这样的逻辑,是否有任何我们可以使用(可能部分)的库支持吗?或者也许学习并遵循逻辑,因为我们不想重新发明轮子?任何参考/lib 都会有所帮助。

我在这里很难找到这个。


拉莫斯之舞
浏览 92回答 1
1回答

慕莱坞森

发布社区 wiki 答案以总结问题。Clark McCauley很好地建议:您可能正在寻找此处包含的逻辑。这是对 k8s 源代码的引用,因此您可能找不到更好的想法来源:)// rolloutRolling implements the logic for rolling a new replica set.func (dc *DeploymentController) rolloutRolling(ctx context.Context, d *apps.Deployment, rsList []*apps.ReplicaSet) error {    newRS, oldRSs, err := dc.getAllReplicaSetsAndSyncRevision(ctx, d, rsList, true)    if err != nil {        return err    }    allRSs := append(oldRSs, newRS)    // Scale up, if we can.    scaledUp, err := dc.reconcileNewReplicaSet(ctx, allRSs, newRS, d)    if err != nil {        return err    }    if scaledUp {        // Update DeploymentStatus        return dc.syncRolloutStatus(ctx, allRSs, newRS, d)    }    // Scale down, if we can.    scaledDown, err := dc.reconcileOldReplicaSets(ctx, allRSs, controller.FilterActiveReplicaSets(oldRSs), newRS, d)    if err != nil {        return err    }    if scaledDown {        // Update DeploymentStatus        return dc.syncRolloutStatus(ctx, allRSs, newRS, d)    }    if deploymentutil.DeploymentComplete(d, &d.Status) {        if err := dc.cleanupDeployment(ctx, oldRSs, d); err != nil {            return err        }    }    // Sync deployment status    return dc.syncRolloutStatus(ctx, allRSs, newRS, d)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go