On 22/05/17 22:58, Jay Pipes wrote:
On 05/22/2017 12:01 PM, Zane Bitter wrote:
On 19/05/17 17:59, Matt Riedemann wrote:
I'm not really sure what you're referring to here with 'update' and [1].
Can you expand on that? I know it's a bit of a tangent.

If the user does a stack update that changes the network from 'auto'
to 'none', or vice-versa.

Detour here, apologies...

Why would it matter whether a user changes a stack definition for some
resource from auto-created network to none? Why would you want
*anything* to change about instances that had already been created by
Heat with the previous version of the stack definition?

The short answer is that's just how Heat works. A large part of the value is the ability with Heat to make changes to your application over time by describing it declaratively. (In the past I've compared this to the advantage configuration management tools provided over shell scripts - e.g. in https://www.openstack.org/videos/atlanta-2013/introduction-to-openstack-orchestration).

In other words, why shouldn't the change to the stack simply affect
*new* resources that the stack might create?

Our job is to make the world look like the template the user provides. If the user changes something, Heat takes them seriously and does not imagine that it knows better than the user what the user wants. If the user doesn't want to change anything then they're welcome to not change the template.

(We *could* do better on protection against accidental changes... there's an update-preview command and ways of marking resources as immutable such that updates will fail if they try to change it, but I don't know that the workflow/UX is great. There are some technical limitations on how much we can even determine in update-preview.)

After all, get-me-a-network
is intended for instance *creation* and nothing else...

So it may be intended for that, but there's any number of legitimate reasons why a user might want to change things after the server is created:

* Server was created with network: none, but something went horribly wrong and now you need to ssh in to debug it. * Server was created with network: auto, but it was compromised by an attacker and now you want to get it off the network while you conduct a post-mortem through the console. * Server was created with network: auto, but now you need more sophisticated networking and you don't want to delete your server and all its data to change it.

&c.

That's why it's dangerous, as Matt said in another part of the thread, to just do the easy part of the job (create) and forget about how a feature will interact with all of the other things that can happen over time. At the very least you want a way for users to move from the 'easy' way to the 'full control' way without starting over. (Semi-professional cameras and digital oscilloscopes are a couple of examples of where this is routinely done very well.)

(None of this is to suggest that get-me-a-network is a particularly bad offender here - it isn't IMO.)

Why not treat already-provisioned resources of a stack as immutable once
provisioned? That is, after all, one of the primary benefits of a "cloud
native application" -- immutability of application images once deployed
and the clean separation of configuration from data.

I could equally ask why Nova and Neutron allow stuff to be changed after it has been provisioned? Heat is only providing an interface to public APIs that exist. You can bet that if we told our users that they can't use those APIs because we know better than them, we'd have a long list of feature request and many fewer users.

There are some things that cannot be changed through the underlying APIs once a resource is created, and in those cases we mark the property with 'update_allowed=False' in the resource schema. However, if it _does_ change then Heat will create a _new_ resource with the property value you want, and delete the original. So we could have done that with the get-me-a-network thing, but it wouldn't have been the Right Thing for our users.

This is one of the reasons that the (application) container world has it
easy with regards to resource management.

Yes! Everything is much easier if you tell all the users to re-architect their applications from scratch :) Which, I mean, if you can... great! Meanwhile here on planet Earth, it's 2017 and 95% of payment card transactions are still processed using COBOL at some point. (Studies show that 79% of statistics are made up, but I actually legit read this last week.)

That's one reason I don't buy any of the 'OpenStack is dead' commentary. If we respond appropriately to the needs of users who run a *mixture* of legacy, cloud-aware, and cloud-native applications then OpenStack will be relevant for a very long time indeed.

If you need to change the
sizing of a deployment [1], Kubernetes doesn't need to go through all
the hoops we do in resize/migrate/live-migrate. They just blow away one
or more of the application container replicas [2] and start up new ones.
[3] Of course, this doesn't work out so well with stateful applications
(aka the good ol' Nova VM), which is why there's a whole slew of
constraints on the automatic orchestration potential of StatefulSets in
Kubernetes [4], constraints that (surprise!) map pretty much one-to-one
with all the Heat resource dependency management bugs that you
highlighted in a previous ML response (network identifier is static and
must follow a pre-described pattern, storage for all pods in the
StatefulSet must be a PersistentVolume, updating a StatefulSet is
currently a manual process, etc).

This is really interesting, thanks!

cheers,
Zane.

Best,
-jay

[1] A deployment in the Kubernetes sense of the term, ala
https://kubernetes.io/docs/concepts/workloads/controllers/deployment

[2]
https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/replicaset/replica_set.go#L508


[3] In fact, changing the size/scale of a deployment *does not*
automatically trigger any action in Kubernetes. Only changes to the
configuration of the deployment's containers (.spec.template) will
automatically trigger some action being taken.

[4]
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#limitations


__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to