On Mon, May 01, 2017 at 05:00:17AM -0700, Flavio Percoco wrote:
> On 28/04/17 11:19 -0500, Eric Fried wrote:
> > If it's *just* glance we're making an exception for, I prefer #1 (don't
> > deprecate/remove [glance]api_servers).  It's way less code &
> > infrastructure, and it discourages others from jumping on the
> > multiple-endpoints bandwagon.  If we provide endpoint_override_list
> > (handwave), people will think it's okay to use it.
> > 
> > Anyone aware of any other services that use multiple endpoints?
> 
> Probably a bit late but yeah, I think this makes sense. I'm not aware of other
> projects that have list of api_servers.

I thought it was just nova too, but it turns out cinder has the same exact
option as nova: (I hit this in my devstack patch trying to get glance deployed
as a wsgi app)

https://github.com/openstack/cinder/blob/d47eda3a3ba9971330b27beeeb471e2bc94575ca/cinder/common/config.py#L51-L55

Although from what I can tell you don't have to set it and it will fallback to
using the catalog, assuming you configured the catalog info for cinder:

https://github.com/openstack/cinder/blob/19d07a1f394c905c23f109c1888c019da830b49e/cinder/image/glance.py#L117-L129


-Matt Treinish


> 
> > On 04/28/2017 10:46 AM, Mike Dorman wrote:
> > > Maybe we are talking about two different things here?  I’m a bit confused.
> > > 
> > > Our Glance config in nova.conf on HV’s looks like this:
> > > 
> > > [glance]
> > > api_servers=http://glance1:9292,http://glance2:9292,http://glance3:9292,http://glance4:9292
> > > glance_api_insecure=True
> > > glance_num_retries=4
> > > glance_protocol=http
> 
> 
> FWIW, this feature is being used as intended. I'm sure there are ways to 
> achieve
> this using external tools like haproxy/nginx but that adds an extra burden to
> OPs that is probably not necessary since this functionality is already there.
> 
> Flavio
> 
> > > So we do provide the full URLs, and there is SSL support.  Right?  I am 
> > > fairly certain we tested this to ensure that if one URL fails, nova goes 
> > > on to retry the next one.  That failure does not get bubbled up to the 
> > > user (which is ultimately the goal.)
> > > 
> > > I don’t disagree with you that the client side choose-a-server-at-random 
> > > is not a great load balancer.  (But isn’t this roughly the same thing 
> > > that oslo-messaging does when we give it a list of RMQ servers?)  For us 
> > > it’s more about the failure handling if one is down than it is about 
> > > actually equally distributing the load.
> > > 
> > > In my mind options One and Two are the same, since today we are already 
> > > providing full URLs and not only server names.  At the end of the day, I 
> > > don’t feel like there is a compelling argument here to remove this 
> > > functionality (that people are actively making use of.)
> > > 
> > > To be clear, I, and I think others, are fine with nova by default getting 
> > > the Glance endpoint from Keystone.  And that in Keystone there should 
> > > exist only one Glance endpoint.  What I’d like to see remain is the 
> > > ability to override that for nova-compute and to target more than one 
> > > Glance URL for purposes of fail over.
> > > 
> > > Thanks,
> > > Mike
> > > 
> > > 
> > > 
> > > 
> > > On 4/28/17, 8:20 AM, "Monty Taylor" <mord...@inaugust.com> wrote:
> > > 
> > >     Thank you both for your feedback - that's really helpful.
> > > 
> > >     Let me say a few more words about what we're trying to accomplish here
> > >     overall so that maybe we can figure out what the right way forward is.
> > >     (it may be keeping the glance api servers setting, but let me at least
> > >     make the case real quick)
> > > 
> > >      From a 10,000 foot view, the thing we're trying to do is to get 
> > > nova's
> > >     consumption of all of the OpenStack services it uses to be less 
> > > special.
> > > 
> > >     The clouds have catalogs which list information about the services -
> > >     public, admin and internal endpoints and whatnot - and then we're 
> > > asking
> > >     admins to not only register that information with the catalog, but to
> > >     also put it into the nova.conf. That means that any updating of that
> > >     info needs to be an API call to keystone and also a change to 
> > > nova.conf.
> > >     If we, on the other hand, use the catalog, then nova can pick up 
> > > changes
> > >     in real time as they're rolled out to the cloud - and there is 
> > > hopefully
> > >     a sane set of defaults we could choose (based on operator feedback 
> > > like
> > >     what you've given) so that in most cases you don't have to tell nova
> > >     where to find glance _at_all_ becuase the cloud already knows where it
> > >     is. (nova would know to look in the catalog for the interal interface 
> > > of
> > >     the image service - for instance - there's no need to ask an operator 
> > > to
> > >     add to the config "what is the service_type of the image service we
> > >     should talk to" :) )
> > > 
> > >     Now - glance, and the thing you like that we don't - is especially 
> > > hairy
> > >     because of the api_servers list. The list, as you know, is just a list
> > >     of servers, not even of URLs. This  means it's not possible to 
> > > configure
> > >     nova to talk to glance over SSL (which I know you said works for you,
> > >     but we'd like for people to be able to choose to SSL all their things)
> > >     We could add that, but it would be an additional pile of special 
> > > config.
> > >     Because of all of that, we also have to attempt to make working URLs
> > >     from what is usually a list of IP addresses. This is also clunky and
> > >     prone to failure.
> > > 
> > >     The implementation on the underside of the api_servers code is the
> > >     world's dumbest load balancer. It picks a server from the  list at
> > >     random and uses it. There is no facility for dealing with a server in
> > >     the list that stops working or for allowing rolling upgrades like 
> > > there
> > >     would with a real load-balancer across the set. If one of the API
> > >     servers goes away, we have no context to know that, so just some of 
> > > your
> > >     internal calls to glance fail.
> > > 
> > >     Those are the issues - basically:
> > >     - current config is special and fragile
> > >     - impossible to SSL
> > >     - unflexible/unpowerful de-facto software loadbalancer
> > > 
> > >     Now - as is often the case - it turns out the combo of those things is
> > >     working very well for you -so we need to adjust our thinking on the
> > >     topic a bit. Let me toss out some alternatives and see what you think:
> > > 
> > >     Alternative One - Do Both things
> > > 
> > >     We add the new "consume from catalog" and make it default. (and make 
> > > it
> > >     default to consuming the internal interface by default) We have to do
> > >     that in parallel with the current glance api_servers setting anyway,
> > >     because of deprecation periods, so the code to support both approaches
> > >     will exist. Instead of then deprecating the api_servers list, we keep
> > >     it- but add a big doc warning listing the gotchas and limitations - 
> > > but
> > >     for those folks for whom they are not an issue, you've got an out.
> > > 
> > >     Alternative Two - Hybrid Approach - optional list of URLs
> > > 
> > >     We go ahead and move to service config being the standard way one 
> > > lists
> > >     how to consume a service from the catalog. One of the standard options
> > >     for consuming services is "endpoint_override" - which is a way an API
> > >     user can say "hi, please to ignore the catalog and use this endpoint
> > >     I've given you instead". The endpoint in question is a full URL, so
> > >     https/http and ports and whatnot are all handled properly.
> > > 
> > >     We add, in addition, an additional option "endpoint_override_list" 
> > > which
> > >     allows you to provide a list of URLs (not API servers) and if you
> > >     provide that option, we'll keep the logic of choosing one at random at
> > >     API call time. It's still a poor load balancer, and we'll still put
> > >     warnings in the docs about it not being a featureful load balancing
> > >     solution, but again would be available if needed.
> > > 
> > >     Alternative Three - We ignore you and give you docs
> > > 
> > >     I'm only including this because in the name of completeness. But we
> > >     could write a bunch of docs about a recommended way of putting your
> > >     internal endpoints in a load balancer and registering that with the
> > >     internal endpoint in keystone. (I would prefer to make the operators
> > >     happy, so let's say whatever vote I have is not for this option)
> > > 
> > >     Alternative Four - We update client libs to understand multiple values
> > >     from keystone for endpoints
> > > 
> > >     I _really_ don't like this one - as I think us doing dumb software
> > >     loadbalancing client side is prone to a ton of failures. BUT - right 
> > > now
> > >     the assumption when consuming endpoints from the catalog is that one 
> > > and
> > >     only one endpoint will be returned for a given
> > >     service_type/service_name/interface. Rather than special-casing the
> > >     url roundrobin in nova, we could move that round-robin to be in the 
> > > base
> > >     client library, update api consumption docs with round-robin
> > >     recommendations and then have you register the list of endpoints with
> > >     keystone.
> > > 
> > >     I know the keystone team has long been _very_ against using keystone 
> > > as
> > >     a list of all the endpoints, and I agree with them. Putting it here 
> > > for
> > >     sake of argument.
> > > 
> > >     Alternative Five - We update keystone to round-robin lists of 
> > > endpoints
> > > 
> > >     Potentially even worse than four and even more unlikely given the
> > >     keystone team's feelings, but we could have keystone continue to only
> > >     return one endpoint, but have it do the round-robin selection at 
> > > catalog
> > >     generation time.
> > > 
> > > 
> > >     Sorry - you caught me in early morning brainstorm mode.
> > > 
> > >     I am neither nova core nor keystone core. BUT:
> > > 
> > >     I think honestly if adding a load balancer in front of your internal
> > >     endpoints is an undue burden and/or the usefulness of the lists
> > >     outweighs the limitations they have, we should go with One or Two. (I
> > >     think three through five are all terrible)
> > > 
> > >     My personal preference would be for Two - the round-robin code winds 
> > > up
> > >     being the same logic in both cases, but at least in Two folks who want
> > >     to SSL all the way _can_, and it shouldn't be an undue extra burden on
> > >     those of you using the api_servers now. We also don't have to do the
> > >     funky things we currently have to do to turn the api_severs list into
> > >     workable URLs.
> > > 
> > > 
> > >     On 04/27/2017 11:50 PM, Blair Bethwaite wrote:
> > >     > We at Nectar are in the same boat as Mike. Our use-case is a little
> > >     > bit more about geo-distributed operations though - our Cells are in
> > >     > different States around the country, so the local glance-apis are
> > >     > particularly important for caching popular images close to the
> > >     > nova-computes. We consider these glance-apis as part of the 
> > > underlying
> > >     > cloud infra rather than user-facing, so I think we'd prefer not to 
> > > see
> > >     > them in the service-catalog returned to users either... is there 
> > > going
> > >     > to be a (standard) way to hide them?
> > >     >
> > >     > On 28 April 2017 at 09:15, Mike Dorman <mdor...@godaddy.com> wrote:
> > >     >> We make extensive use of the [glance]/api_servers list.  We 
> > > configure that on hypervisors to direct them to Glance servers which are 
> > > more “local” network-wise (in order to reduce network traffic across 
> > > security zones/firewalls/etc.)  This way nova-compute can fail over in 
> > > case one of the Glance servers in the list is down, without putting them 
> > > behind a load balancer.  We also don’t run https for these “internal” 
> > > Glance calls, to save the overhead when transferring images.
> > >     >>
> > >     >> End-user calls to Glance DO go through a real load balancer and 
> > > then are distributed out to the Glance servers on the backend.  From the 
> > > end-user’s perspective, I totally agree there should be one, and only one 
> > > URL.
> > >     >>
> > >     >> However, we would be disappointed to see the change you’re 
> > > suggesting implemented.  We would lose the redundancy we get now by 
> > > providing a list.  Or we would have to shunt all the calls through the 
> > > user-facing endpoint, which would generate a lot of extra traffic (in 
> > > places where we don’t want it) for image transfers.
> > >     >>
> > >     >> Thanks,
> > >     >> Mike
> > >     >>
> > >     >>
> > >     >>
> > >     >> On 4/27/17, 4:02 PM, "Matt Riedemann" <mriede...@gmail.com> wrote:
> > >     >>
> > >     >>     On 4/27/2017 4:52 PM, Eric Fried wrote:
> > >     >>     > Y'all-
> > >     >>     >
> > >     >>     >   TL;DR: Does glance ever really need/use multiple endpoint 
> > > URLs?
> > >     >>     >
> > >     >>     >   I'm working on bp use-service-catalog-for-endpoints[1], 
> > > which intends
> > >     >>     > to deprecate disparate conf options in various groups, and 
> > > centralize
> > >     >>     > acquisition of service endpoint URLs.  The idea is to 
> > > introduce
> > >     >>     > nova.utils.get_service_url(group) -- note singular 'url'.
> > >     >>     >
> > >     >>     >   One affected conf option is [glance]api_servers[2], which 
> > > currently
> > >     >>     > accepts a *list* of endpoint URLs.  The new API will only 
> > > ever return *one*.
> > >     >>     >
> > >     >>     >   Thus, as planned, this blueprint will have the side effect 
> > > of
> > >     >>     > deprecating support for multiple glance endpoint URLs in 
> > > Pike, and
> > >     >>     > removing said support in Queens.
> > >     >>     >
> > >     >>     >   Some have asserted that there should only ever be one 
> > > endpoint URL for
> > >     >>     > a given service_type/interface combo[3].  I'm fine with that 
> > > - it
> > >     >>     > simplifies things quite a bit for the bp impl - but wanted 
> > > to make sure
> > >     >>     > there were no loudly-dissenting opinions before we get too 
> > > far down this
> > >     >>     > path.
> > >     >>     >
> > >     >>     > [1]
> > >     >>     > 
> > > https://blueprints.launchpad.net/nova/+spec/use-service-catalog-for-endpoints
> > >     >>     > [2]
> > >     >>     > 
> > > https://github.com/openstack/nova/blob/7e7bdb198ed6412273e22dea72e37a6371fce8bd/nova/conf/glance.py#L27-L37
> > >     >>     > [3]
> > >     >>     > 
> > > http://eavesdrop.openstack.org/irclogs/%23openstack-keystone/%23openstack-keystone.2017-04-27.log.html#t2017-04-27T20:38:29
> > >     >>     >
> > >     >>     > Thanks,
> > >     >>     > Eric Fried (efried)
> > >     >>     > .
> > >     >>     >
> > >     >>     > 
> > > __________________________________________________________________________
> > >     >>     > 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-operators
> > >     >>
> > >     >>     --
> > >     >>
> > >     >>     Thanks,
> > >     >>
> > >     >>     Matt
> > >     >>
> > >     >>     
> > > __________________________________________________________________________
> > >     >>     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-operators mailing list
> > >     >> OpenStack-operators@lists.openstack.org
> > >     >> 
> > > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators
> > >     >
> > >     >
> > >     >
> > > 
> > > 
> > >     
> > > __________________________________________________________________________
> > >     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
> > > 
> > 
> > _______________________________________________
> > OpenStack-operators mailing list
> > OpenStack-operators@lists.openstack.org
> > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators
> 
> -- 
> @flaper87
> Flavio Percoco



> _______________________________________________
> OpenStack-operators mailing list
> OpenStack-operators@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators

Attachment: signature.asc
Description: PGP signature

_______________________________________________
OpenStack-operators mailing list
OpenStack-operators@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators

Reply via email to