>> Hey, friends, did you know that you can use node pools to
create a heterogeneous AKS cluster?
Essentially you can have a node pool with
a VM size that can run your regular workloads
and then another node pool that supports
GPU instances for machine learning workloads.
Saurya is here to show me how to do that today on Azure Friday.
Hey folks I'm Scott Hanselman and it's Azure Friday.
I'm here with Soury Adas and we're going to talk about
multiple node pools support in AKS this is new.
>> Yeah, this is just being previewed.
>> Okay. So it's in preview and
this is something which was impossible before.
All the nodes had to be the same before.
>> Same, one node pool,
same size VMs. You cannot change them.
>> So what I have here is I already have a cluster,
the quality node pools created.
So I'm just going to get the Config File to connect to
the cluster and then I'm going to just create a node pool.
This is just a sample command and this is
how you create a single node pool.
The first node pool,
it is also called the default node pool.
So what I'm going to create is a node pool with one node.
>> Okay.
>> The dash C flag is the node count.
Then once I create that node pool I can add
another node point to it and the command
to do that is az aks node pool.
I add and then you give a cluster name, the resource group,
the name of the node pool,
the node count, the VM size.
Now I've chosen F16.
You can choose GPU which is
standard NC or any other one that you want.
Standard F16 is specifically compute intensive workloads.
I've selected a Kubernetes version of 1.12.8.
So one cool thing about having
different node pools is you can have
them at different Kubernetes merchants.
>> How far off in the versions we go?
>> Yeah. So in AKS we
support n minus three, end-to-end minus three.
So today we support 1.14 which is one of the latest versions.
Then we support 1.13, 12 and 11.
So you could choose any one of them.
>> Okay. So anywhere within the available range which
allows you a little bit of flexibility
when you want to update your node pool.
>> It can also help you like say tomorrow
1.15 came in you could create a node pool and test
1.15 without affecting maybe
your workload that is running on another node pool.
>> So after you do this command here,
could you perhaps to a get nodes
and help me visualize what's happening?
>> Yes, sure. So if I do a node pool list.
So that's a couple of commands.
You can do a node pool list and you
will see all the node pools that you have.
So this shows you that there is F-series pool and a the
default node pool node pool one shows the version.
The OS type size, how many nodes you have,
then you can do kubectl get nodes.
This will give you the raw VMs.
So if there were two VMs in the F series pool
and three VMs in
node pool one, it would have just turned all of them.
>> Okay.
>> So you can see that naming is pretty clear to show
you that it belongs to a specific node pool.
>> Right, it's very regular.
>> Yes. So what I'm trying to do here is show
you that hey there are use cases
where you want to target specific workloads like I say F series is
a compute intensive series of VM
and you want to run say a computer intensive workloads.
You want to target specifically
to the F series pool how do you do that?
So you can use this Kubernetes concept
that is called taint and tolerations.
So when you taint the node like I've done,
I'm trying to do is I taint the node.
This is the name of the node that I have chosen.
This is the same one here in the node pool series.
I'm tainting it with this specific label.
I'm saying sku is F-user no schedule.
What that means is only parts that have this something called as
toleration with a specific label can land on this node.
Otherwise, they cannot. If you
were to run a part without this label,
it would land and other nodes and not on this node.
>> Interesting.
>> So I'm going to apply the taint and then I'm going to show you
a sample deployment that I'm going to do which
has the specific label.
So you can see that here.
This is the simple part which is downloading engine.
This is not compute intensive.
You can deploy your real computer intensive.
>> Yeah, just for the demo.
>> Just for the demo and then you explain
the toleration is that it will look for
this key and the value and the effect
and then once it finds a node with that match, it can tolerate.
As in it can tolerate that specific node which has the taint.
>> That's as a very clever naming.
It's very difficult to name things.
But when you take something,
you tend to kind of dirty it or color it in some negative way.
>> Yes.
>> But then you put a toleration on something else that says,
well, I can tolerate that.
Maybe it's got too much salt but I'm okay with too much salt.
Or when I go to the restaurant,
I always have to eat the spicy food.
>> Yes.
>> All right. So that one is now able to
tolerate the previous one's chain.
>> Yeah. So I'm going to deploy the part,
keep sku, equal, apply.
Once that is done, I'm going to
describe the part to see that it landed on that specific node.
>> Okay.
>> I did that and you can see the event log.
Specifically, the first event log says that
successfully assign the default part to the F-series pool.
So it landed on that specific node.
So you had a GPU machine learning workload.
You could land it specifically on a GPU machine because
you don't want other workloads with
land on GPU machines. They're very expensive.
So yeah, that's it.
Then some cool things that you can do with node pools is
upgrade them at a separate schedule
compared to the other node pools.
They can be upgraded to a different version.
So the one that I have on 1.12.8 can be upgraded to
1.13.5 and then you can individually scale them.
You don't need to scale everything together.
You can scale this node pool to go
from one to three or one to five.
Then you can delete these node pools when you don't need them.
>> It's totally okay to do that.
When you delete the node pools though because
it's AKS you're paying for what?
>> You're paying for what you will have.
Like the default node pools that is there.
Noting else. You don't pay for this node.
>> You don't pay for this one. Now you use the example of
a regular one versus a GPU but
there's other reasons to separate it.
You're using node pools as a way of partitioning.
>> Yes.
>> You can hide the version of the underlying Kubernetes.
You can hide the hardware capabilities
or the underlying virtual machine.
You could hide perf.
You'd have spaceX and premiums,
you can hide, whatever.
>> Then you can do like I
said new Kubernetes versions have new features.
It's great to test new features
with new node pools that have a new Kubernetes.
>> All right and then of course, yeah,
you could keep it in production maybe on
a more stable or more kind of "LTS"
version and then build
your own basically your own staging system using the new stuff.
>> New node pools, yeah.
>> Well, that's fantastic. So this is
in preview or this is available?
>> This is available in preview for you to try out.
>> So, folks, go and try this out and
then where can they learn more about this?
That's up on the AKS website at docs slash Azure slash
AKS and there's a whole documentation
on using multiple node pools.
>> Yes, that's correct.
>> All right. Fantastic. I am learning all about
the new multiple node pools
support on Azure Kubernetes here on Azure Friday.
[MUSIC]