[chef] Re: Re: Re: Re: Re: Installing large numbers of packages


Chronological Thread 
  • From: Brad Knowles < >
  • To:
  • Cc: Brad Knowles < >
  • Subject: [chef] Re: Re: Re: Re: Re: Installing large numbers of packages
  • Date: Wed, 31 Aug 2011 20:15:52 -0500

On Aug 31, 2011, at 7:47 PM, Matt Palmer wrote:

> Configuration management doesn't imply reliability on a giant central
> server infrastructure that's going to have to be scaled and managed
> itself.

You don't necessarily need a giant central server infrastructure to support a 
good Infrastructure CM, whether that's Puppet, Chef, or any other such tool.  
If these tools are doing their job, and if they are being used appropriately, 
they should be able to be used to manage large numbers of servers without 
themselves needing a great deal of horsepower to accomplish that job.

Of course, a lot depends on what you're asking them to do and how you're 
asking them to do that.  But Chef is using RabbitMQ in Erlang to handle some 
of the most timing-critical message passing and work queue handling, and that 
is extremely efficient and very low-latency, in addition to being very high 
reliability.  That kind of stuff can scale up about as big as anything on the 
Internet, and without a great deal of its own internal overhead.

> My system configuration is *all* data... "this is what I want to
> happen".  A list of packages is no more code or data than the fact
> that I want those packages installed, and not removed.  I want to
> revision control it all.

You're installing a large list of packages, each of which has it's own major 
and minor number that also need to be tracked.  You want to update a big 
hairy long list of code every single time one of those packages has been 
updated and you want to push that out to all your machines?  And do you 
maintain different versions of this code for different platforms that might 
need slightly different sets of versions of the packages that are installed?

If you want to do it that way, I guess that's possible.

Personally, I would consider that to be quite painful as compared to updating 
the information in a databag and have the remote chef clients figure out 
which systems are impacted by a major or minor version update for one of the 
packages it might or might not be using.  And I'd have different lists of 
packages in the databag for each set of production, development, QA/test 
systems, etc....  So, my production list of packages would not change very 
often at all, but my development or QA/test sets of packages might change 
more often -- and I'd have the same recipe running on all these sets of 
machines, with each type of machine knowing that it needs to pull different 
data out of the databag based on the role that particular machine was filling.

But maybe that's just me.

> The installation script *is* simple and easy to read, if the syntax is
> appropriate.

If you've got a long hairy list of packages to install that is included 
inside the code that is supposed to install those packages, I wouldn't call 
that simple or easy to read.  But again, maybe that's just me.

> nd this is where I feel like I should stop listening to you, because
> you assume I've never managed large scale systems.  I've done 500+
> nodes with Puppet, and 2,500+ systems under management in bodgy
> semi-manual ways.

My large scale experience goes back to AOL in the mid-90s.  At that time, 
tools like Chef and Puppet didn't exist.  The only thing we had was a very 
early version of cfengine, and that was seriously painful.  Fortunately for 
me, I didn't have to maintain it, and I was only personally responsible for 
maintaining 100+ systems that made minimal use of the CM system, versus the 
many thousands of other servers that we had throughout the service.

My more recent experience with Infrastructure CM systems comes from using 
cobbled together Kickstart/Jumpstart scripts front-ended with m4 
pre-processing, when I was working at UT Austin a couple of years ago.  We 
were replacing all that stuff with bcfg2, and again I was one of the early 
adopters for the projects I was working on, but again they were just going to 
be CM clients, and only a couple dozen at that.  I was a few levels removed 
from having to support the 50K+ students, the 20K+ faculty & staff, and I 
didn't have much in the way of responsibilities for helping to do management 
on the other few hundred servers that we had based on those cobbled-together 
Jumpstart/Kickstart scripts.

My experience here is even smaller, at least to date.  We're starting with a 
couple of small VMs for the next-generation back-end server infrastructure, 
but we want to be able to easily scale our systems up to supporting one or 
more hardware appliance (or software equivalent) in every single household 
throughout the country and ultimately the world, so I think that puts us on 
the scale of at least hundreds of millions of appliance installs.  Chef would 
not be used to manage the appliance installs directly, at least not 
initially.  We want to get experience with using it to support our back-end 
server infrastructure before we start looking at the really big fish.

> If there are better ways to do it with Chef, I'm open to them, but I
> *do* have plenty of experience in this field, and so far my
> experiences are telling me that the way Chef does it is a monumental
> pain in the arse at scale.  However, I'm willing to learn that I'm
> wrong, so point me at the documentation that explains clearly and
> simply why the Chef way works better.

And this is where I have to step back myself, because I do not yet know 
enough about Chef in this particular respect to be able to provide any 
further guidance.  I will be very interested to see/hear what you find out.

-- 
Brad Knowles 
< >




Archive powered by MHonArc 2.6.16.

§