如何从控制器运行时触发部署资源的推出重启
How to trigger a rollout restart on deployment resource from controller-runtime
我一直在使用 kubebuilder 编写自定义控制器,并知道它提供的 Get()、Update()、Delete() 方法。但是现在我正在寻找一种模仿 kubectl rollout restart deployment
行为的方法。如果没有这样的直接方法,那么我正在寻找正确的方法来模仿它。
type CustomReconciler struct {
client.Client
Log logr.Logger
Scheme *runtime.Scheme
}
func (r *CustomReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
configMap := &v1.ConfigMap{}
err = r.Get(ctx, req.namespacedName, configMap)
if err != nil {
logger.Error(err, "Failed to GET configMap")
return ctrl.Result{}, err
}
在上面的代码中说我从 configmap 中读取部署名称并重新启动,如下所示:
val := configMap.Data["config.yml"]
config := Config{}
if err := yaml.Unmarshal([]byte(val), &config); err != nil {
logger.Error(err, "failed to unmarshal config data")
return ctrl.Result{}, err
}
// Need equivalent of following
// r.RolloutRestart(config.DeploymentName)
在您希望复制 kubectl
行为的所有情况下,答案始终是增加其冗长程度,并且它会准确地向您展示——有时甚至是连线有效载荷——它在做什么。
对于 rollout 重启,人们会发现它只是 bumps an annotation 在 Deployment/StatefulSet/whatever 上,这导致外部对象“不同”,并触发协调 运行
你可以借鉴他们的注释,或者你可以自己编,或者你可以使用标签更改——几乎任何“无意义”的更改都可以
我一直在使用 kubebuilder 编写自定义控制器,并知道它提供的 Get()、Update()、Delete() 方法。但是现在我正在寻找一种模仿 kubectl rollout restart deployment
行为的方法。如果没有这样的直接方法,那么我正在寻找正确的方法来模仿它。
type CustomReconciler struct {
client.Client
Log logr.Logger
Scheme *runtime.Scheme
}
func (r *CustomReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
configMap := &v1.ConfigMap{}
err = r.Get(ctx, req.namespacedName, configMap)
if err != nil {
logger.Error(err, "Failed to GET configMap")
return ctrl.Result{}, err
}
在上面的代码中说我从 configmap 中读取部署名称并重新启动,如下所示:
val := configMap.Data["config.yml"]
config := Config{}
if err := yaml.Unmarshal([]byte(val), &config); err != nil {
logger.Error(err, "failed to unmarshal config data")
return ctrl.Result{}, err
}
// Need equivalent of following
// r.RolloutRestart(config.DeploymentName)
在您希望复制 kubectl
行为的所有情况下,答案始终是增加其冗长程度,并且它会准确地向您展示——有时甚至是连线有效载荷——它在做什么。
对于 rollout 重启,人们会发现它只是 bumps an annotation 在 Deployment/StatefulSet/whatever 上,这导致外部对象“不同”,并触发协调 运行
你可以借鉴他们的注释,或者你可以自己编,或者你可以使用标签更改——几乎任何“无意义”的更改都可以