为了账号安全,请及时绑定邮箱和手机立即绑定

k8s滚动更新算法

k8s滚动更新算法

Go
拉莫斯之舞 2022-11-23 19:18:51

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

我在这里很难找到这个。


查看完整描述

1 回答

?
慕莱坞森

TA贡献1550条经验 获得超4个赞

发布社区 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)

}


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信