[openstack-dev] [tc] campaign question: How can we make contributing to OpenStack easier?

Zane Bitter zbitter at redhat.com
Tue Apr 24 21:48:56 UTC 2018


On 24/04/18 12:04, Fox, Kevin M wrote:
> Yeah, I agree k8s seems to have hit on a good model where interests are separately grouped from the code bases. This has allowed architecture to not to be too heavily influenced by the logical groups interest.
> 
> I'll go ahead and propose it again since its been a little while. In order to start breaking down the barriers between Projects and start working more towards integration, should the TC come up with an architecture group? Get folks from all the major projects involved in it and sharing common infrastructure.
> 
> One possible pie in the sky goal of that group could be the following:
> 
> k8s has many controllers. But they compile almost all of them into one service. the kube-apiserver. Architecturally they could break them out at any point, but so far they have been able to scale just fine without doing so. Having them combined has allowed much easier upgrade paths for users though. This has spurred adoption and contribution. Adding a new controller isn't a huge lift to an operator. they just upgrade to the newest version which has the new controller built in.
> 
> Could the major components, nova-api, neutron-server, glance-apiserver, etc be built in a way to have 1 process for all of them, and combine the upgrade steps such that there is also, one db-sync for the entire constellation?

In the pre-containers era one of the most common complaints I heard from 
operators was that they were forced to upgrade stuff in lock-step 
(because of library version dependencies) when they really wanted to 
upgrade each service independently. So this definitely wouldn't work for 
everyone.

Another idea that has been floated on occasion is of combining all of 
the bits of services that run on a compute node (which include parts of 
Nova, Cinder, Neutron, Ceilometer, &c.) into a single... thing. I wonder 
if that wouldn't be a more interesting place to start.

> The idea would be to take Constellations idea one step farther. That the Projects would deliver python libraries(and a binary for stand alone operation).

In the sense that we've switched most things with a REST API to running 
in Apache using wsgi, that's _technically_ what's happening already ;)

> Constilations would actually provide a code deliverable, not just reference architecture, combining the libraries together into a single usable entity. Operators most likely would consume the Constilations version rather then the individual Project versions.

If I'm reading right, you're suggesting that users who just want a quick 
way to install a small cloud would use a turn-key controller node 
package, while those who need something more sophisticated could 
continue to install the individual services separately?

It's an interesting idea, but users of the first sort have a tendency to 
turn into users of the second sort, and they want a smooth upgrade path 
when that happens. I suspect that's why there aren't any deployment 
tools that use this model, even though there are probably no technical 
obstacles to it even today.

> What do you think?

With respect to the db_sync specifically, I think the main problem is 
that it exists at all. You want to be able to do a simple rolling update 
where you start containers containing new versions of the code, and then 
shut down containers containing old versions of the code. Right now you 
have to somehow run db_sync with the new code but make sure it happens 
before starting the service with the new code - and in some cases you 
may have to shut down the old code first. (And as non-conducive as that 
is to orchestrated container deployments, it was 10 times worse 
pre-containers when it was virtually impossible to install the two 
versions of the code side-by-side.) But once your deployment tool has 
solved that horrible problem, it's not difficult for it to add a 
for-loop to do it for every service.

What would be a bigger win would be to get rid of db_sync altogether. It 
was born in an era when we did massive data migrations between versions. 
We've now adopted guidelines for rolling updates saying that we should 
only do fast operations like adding/dropping tables/columns during 
db_sync, and that deprecation periods must permit the DB to be upgraded 
while instances of the previous version of the service are still 
running. Once services comply with those guidelines is there any reason 
we can't just always update the DB schema during service start-up and 
ditch the separate `<service>-manage db_sync` commands? Maybe that would 
be a good project-wide goal for an upcoming release.

cheers,
Zane.



More information about the OpenStack-dev mailing list