forked from rook/rook
ceph: Update deployments on rook img update
Use the `UpdateDeploymentAndWait` method used by the osd operator to update the deployments for mgrs, mdses, and rgws when the Rook orchestrator image is updated. Signed-off-by: Blaine Gardner <blaine.gardner@suse.com>
This commit is contained in:
@@ -112,14 +112,17 @@ func (c *Cluster) Start() error {
|
||||
}
|
||||
|
||||
// start the deployment
|
||||
deployment := c.makeDeployment(mgrConfig, dashboardPort)
|
||||
if _, err := c.context.Clientset.ExtensionsV1beta1().Deployments(c.Namespace).Create(deployment); err != nil {
|
||||
d := c.makeDeployment(mgrConfig, dashboardPort)
|
||||
logger.Debugf("starting mgr deployment: %+v", d)
|
||||
_, err := c.context.Clientset.ExtensionsV1beta1().Deployments(c.Namespace).Create(d)
|
||||
if err != nil {
|
||||
if !errors.IsAlreadyExists(err) {
|
||||
return fmt.Errorf("failed to create %s deployment. %+v", resourceName, err)
|
||||
return fmt.Errorf("failed to create mgr deployment %s. %+v", resourceName, err)
|
||||
}
|
||||
logger.Infof("deployment for mgr %s already exists. updating if needed", resourceName)
|
||||
if err := k8sutil.UpdateDeploymentAndWait(c.context, d, c.Namespace); err != nil {
|
||||
return fmt.Errorf("failed to update mgr deployment %s. %+v", resourceName, err)
|
||||
}
|
||||
logger.Infof("%s deployment already exists", resourceName)
|
||||
} else {
|
||||
logger.Infof("%s deployment started", resourceName)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -141,11 +141,15 @@ func (c *cluster) start() error {
|
||||
_, err := c.context.Clientset.ExtensionsV1beta1().Deployments(c.fs.Namespace).Create(d)
|
||||
if err != nil {
|
||||
if !errors.IsAlreadyExists(err) {
|
||||
return fmt.Errorf("failed to create mds deployment: %+v", err)
|
||||
return fmt.Errorf("failed to create mds deployment %s: %+v", mdsConfig.ResourceName, err)
|
||||
}
|
||||
logger.Infof("deployment for mds %s already exists. updating if needed", mdsConfig.ResourceName)
|
||||
// TODO: need to prepare for upgrade here each time. Also, before a given deployment is
|
||||
// terminated, I think we should somehow make sure that it isn't running the single
|
||||
// active daemon. If it is, then we should have another daemon take over as active. @Jan?
|
||||
if err := k8sutil.UpdateDeploymentAndWait(c.context, d, c.fs.Namespace); err != nil {
|
||||
return fmt.Errorf("failed to update mds deployment %s. %+v", mdsConfig.ResourceName, err)
|
||||
}
|
||||
logger.Infof("mds deployment %s already exists", d.Name)
|
||||
} else {
|
||||
logger.Infof("mds deployment %s started", d.Name)
|
||||
}
|
||||
desiredDeployments[d.GetName()] = true // add deployment name to improvised set
|
||||
}
|
||||
|
||||
@@ -116,26 +116,10 @@ func (c *config) startRGWPods(update bool) error {
|
||||
}
|
||||
|
||||
// start the deployment or daemonset
|
||||
var rgwType string
|
||||
var err error
|
||||
if c.store.Spec.Gateway.AllNodes {
|
||||
rgwType = "daemonset"
|
||||
err = c.startDaemonset()
|
||||
} else {
|
||||
rgwType = "deployment"
|
||||
err = c.startDeployment()
|
||||
return c.startDaemonset()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
if !errors.IsAlreadyExists(err) {
|
||||
return fmt.Errorf("failed to create rgw %store. %+v", rgwType, err)
|
||||
}
|
||||
logger.Infof("rgw %s already exists", rgwType)
|
||||
} else {
|
||||
logger.Infof("rgw %s started", rgwType)
|
||||
}
|
||||
|
||||
return nil
|
||||
return c.startDeployment()
|
||||
}
|
||||
|
||||
// Delete the object store.
|
||||
|
||||
@@ -34,21 +34,38 @@ import (
|
||||
|
||||
func (c *config) startDeployment() error {
|
||||
|
||||
deployment := &extensions.Deployment{
|
||||
d := &extensions.Deployment{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: c.instanceName(),
|
||||
Namespace: c.store.Namespace,
|
||||
},
|
||||
Spec: extensions.DeploymentSpec{Template: c.makeRGWPodSpec(), Replicas: &c.store.Spec.Gateway.Instances},
|
||||
}
|
||||
k8sutil.SetOwnerRefs(c.context.Clientset, c.store.Namespace, &deployment.ObjectMeta, c.ownerRefs)
|
||||
_, err := c.context.Clientset.ExtensionsV1beta1().Deployments(c.store.Namespace).Create(deployment)
|
||||
return err
|
||||
k8sutil.SetOwnerRefs(c.context.Clientset, c.store.Namespace, &d.ObjectMeta, c.ownerRefs)
|
||||
|
||||
logger.Debugf("starting mds deployment: %+v", d)
|
||||
_, err := c.context.Clientset.ExtensionsV1beta1().Deployments(c.store.Namespace).Create(d)
|
||||
if err != nil {
|
||||
if !errors.IsAlreadyExists(err) {
|
||||
return fmt.Errorf("failed to create rgw deployment %s: %+v", c.instanceName(), err)
|
||||
}
|
||||
logger.Infof("deployment for rgw %s already exists. updating if needed", c.instanceName())
|
||||
// There may be a *lot* of rgws, and they are stateless, so don't bother waiting until the
|
||||
// entire deployment is updated to move on.
|
||||
// TODO: is the above statement safe to assume?
|
||||
// TODO: Are there any steps for RGW that need to happen before the daemons upgrade?
|
||||
_, err := c.context.Clientset.Extensions().Deployments(c.store.Namespace).Update(d)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update rgw deployment %s. %+v", c.instanceName(), err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *config) startDaemonset() error {
|
||||
|
||||
daemonset := &extensions.DaemonSet{
|
||||
d := &extensions.DaemonSet{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: c.instanceName(),
|
||||
Namespace: c.store.Namespace,
|
||||
@@ -60,10 +77,26 @@ func (c *config) startDaemonset() error {
|
||||
Template: c.makeRGWPodSpec(),
|
||||
},
|
||||
}
|
||||
k8sutil.SetOwnerRefs(c.context.Clientset, c.store.Namespace, &daemonset.ObjectMeta, c.ownerRefs)
|
||||
k8sutil.SetOwnerRefs(c.context.Clientset, c.store.Namespace, &d.ObjectMeta, c.ownerRefs)
|
||||
|
||||
_, err := c.context.Clientset.ExtensionsV1beta1().DaemonSets(c.store.Namespace).Create(daemonset)
|
||||
return err
|
||||
logger.Debugf("starting rgw daemonset: %+v", d)
|
||||
_, err := c.context.Clientset.ExtensionsV1beta1().DaemonSets(c.store.Namespace).Create(d)
|
||||
if err != nil {
|
||||
if !errors.IsAlreadyExists(err) {
|
||||
return fmt.Errorf("failed to create rgw daemonset %s: %+v", c.instanceName(), err)
|
||||
}
|
||||
logger.Infof("daemonset for rgw %s already exists. updating if needed", c.instanceName())
|
||||
// There may be a *lot* of rgws, and they are stateless, so don't bother waiting until the
|
||||
// entire daemonset is updated to move on.
|
||||
// TODO: is the above statement safe to assume?
|
||||
// TODO: Are there any steps for RGW that need to happen before the daemons upgrade?
|
||||
_, err := c.context.Clientset.Extensions().DaemonSets(c.store.Namespace).Update(d)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update rgw daemonset %s. %+v", c.instanceName(), err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *config) makeRGWPodSpec() v1.PodTemplateSpec {
|
||||
|
||||
Reference in New Issue
Block a user