►
Description
There is a "Chicken or Egg'' challenge in GitOps. To deploy your application/workflow in a GitOps way, you need to tell your cluster to deploy it. So how do you tell your cluster to deploy your application in a GitOps fashion in a GitOps way? In this episode, we'll explore the concept of "App of Apps'' and how this can mitigate that challenge. We'll also introduce ApplicationSets, a new CRD from the Argo Project that improves upon this design.
A
B
I'm
doing
well
I'm
doing
good,
I'm
excited
because
I'm
wearing
a
tekton
shirt.
I
just.
B
So
doing
good
doing
good!
Oh
we're
back!
We
took
a
little
break
from
from
streaming
to
do
kubecon
to
do
the
get
ops
con
right
and
so
for
those
for
those
of
you
who
grab
that
playlist
yeah
yeah.
If
you
grab
that
playlist
drop
it
in
the
in
the
chat,
we
did
get
ops
con,
we
did
a
day,
zero
event
for
kubecon.
B
That
went
absolutely
amazing.
Far
beyond
what
I
expected
and
hoped
for
all
of
you
out
there
you
guys
are
awesome
even
with
the
digital
fatigue,
even
with
the
right
meeting
fatigue,
you
guys
stayed
on
the
average
three
hours.
So
that's
that's.
B
Someone
right
that
was
a
long
time
for
you
guys
to
be
to
be
sitting
at
a
computer
and
and
watching
talks,
even
after
all,
the
digital
fatigue
that
we've
been
feeling
so,
which
is
part
of
the
reason
why
we
took
a
break.
You
know
during
kubecon
and
just
that
way,
you're
not
just
inundated
with
stuff.
So
so
we're
back
right
and
thank
you.
Everyone
who,
who
attended,
get
ops
and
chris
is
gonna,
drop
a
link
in
the
chat.
B
Too
many
tabs
right
too
many
times
exactly
this
week,
so
this
week,
I'll
be
talking
about
application,
sets
and
app
of
apps
design.
So
first
I'm
gonna
do
let
me
show
my
screen
right.
So
let
me
get
this
up
and
running
it's
never
where
you
think
it
is
okay
of.
B
Helpful
yeah,
so
let
me
know
when
you
see
my
screen
is
that
yeah,
it
sounds
good
cool,
so
I
can't
talk
about
application
sets
without
first
talking
about
app
of
apps.
So
in
so
let's
talk
a
little
bit
more
about
app
of
apps.
If
you,
if
you
google,
app
of
apps,
it's
the
first
hit,
so
this
is
this
was
a
for.
B
Well,
it's
kind
of
weird
not
seeing
an
ad
first
right.
So
that's
that's
how
you
know
this
is
very
specific,
so
what's
app
of
apps
right,
so
in
the
show
description,
it
starts
off
with
a
chicken
egg
problem
so
that
the
chicken
egg
thing
is
okay.
Well,
I
have
all
these
applications
I
want
to
deploy.
You
know,
get
ops
fashion
right
so,
like
I'm,
I'm
I'm
using
argo
cd,
I'm
doing
get
ups.
I
have
all
these
applications.
How
do
I?
B
How
do
I
bootstrap
in
a
git
ops
way
right?
How
do
I
get
my
applications?
Bootstrap
deployed
and
managed
in
a
git
ops
fashion
right-
and
this
is
what
let
me
make
this
a
little
bigger.
B
But,
as
you
don't
see
it's-
and
let
me
drop
this
link
here
as
well,
because
it's
a
good
read,
it's
the
it's.
What
we
call
app
of
apps
pattern,
so
since
argo
cd
deploys
only
just
it
all,
essentially
is
it's
doing
it.
It's
applying
yaml
right
or
it's
applying
manifest
right.
It
could
be.
We
we
always
assume
yaml.
I
guess
most
people
use
yaml,
but
I
mean
I
guess
you
could
also
do
json
right.
B
That's
a
valid
manifest
right
that
kubernetes
takes
so
you
have
that
all
since
all
it's
doing
is
applying
yaml,
then
the
the
manifest
for
the
application
is
also
yaml
right.
So
the
the
the
the
idea
was
basically
saying
well,
I
want
to
create
an
application
that
does
nothing
more
than
just
deploy
applications
right,
so
it's
an
application
of
applications
right
or
app
of
apps
right
and
here
in
this.
In
this
little
diagram,
you
can
see
how
that
works.
B
Basically
right,
so
you
have
an
application
that
says:
hey
deploy
this
application,
this
application,
this
application,
that
application
and
then
and
then
it
will
go
ahead
and
deploy
those
manifests
right.
So
then
this
does
two
things
right:
it's
really
dead,
simple
to
bootstrap,
meaning
that
I
can
apply
one
manifest
and
get
my
entire.
B
You
know
infrastructure
cluster
up
and
running
with
one
manifest,
and
then
you
kind
of
also
kind
of
by
by
extension,
you
get
this
convenient
watcher
app
for
all
your
applications.
So
so,
let's
say
here
in
this
example
like
someone
accidentally
deletes
the
guestbook
application.
B
Well,
the
application
that
deployed
that
application
says:
hey,
that's
missing,
argo
cd,
then
redeploys.
It
so
you
get
this
convenient
watcher
application
and
then
you
kind
of
get
a
way
to
roll
these
out.
B
So,
like
you
get
the
things
like
sink
waves
and
resource
hooks
right,
so
it
for
those
of
you
who
don't
know
what
that
is,
there's
another.
I
did
a
stream
about
resource
hook
and
sync
waves,
and
things
like
that.
So
let's
drop
that
playlist
red
dot,
ht
yeah
get
off
right.
So.
A
I
think
have
that
as
a
short
command.
A
B
B
It
yeah
yeah
yeah
yeah,
exactly
it's
like
those
those
instagram
people
he's
like
this
is
my
backup
account
right
in
case.
B
Except
this
is
for
bitly
right.
I
guess
this
is
the
the
tech,
the
the
marketing
equivalent
of
that
so
yeah.
So
sync
ways
if
you
haven't,
if
you
haven't
seen
that
I
did
a
stream
about
that,
you
get
that
as
well,
since
it's
it's
nothing
other
than
just
an
application
that
plays
other
applications.
B
Another
way
the
people
tried
to
solve.
This
problem
was
with
helm
right,
so
they
actually
did
a
helm.
B
They
created
a
helm
chart
of
of
a
of
an
argo
cd
application
right,
so
they
they
kind
of
laid
it
out
there
right
as
a
standard,
helm,
help
template
helm,
chart
right
and
they
they
parameterized
it
right.
So
they
basically
made
it
parameters,
saying
hey,
and
this
was
kind
of
a
convenient
way
to
quickly
stamp
these
out
right
kind
of
stamp.
The
saying
hey!
B
Well,
if
I
have
one
application
too
many
clusters-
and
I
have
many
clusters
defined
like
how
do
I
do
that-
you
can
do
that
with
app
of
apps,
or
you
can
do
that
in
this
helm
fashion,
where
you
just
kind
of
say,
you
provide
your
values.yaml
file
and
then
you
can
just
quickly
stamp
them
out
like
one
two,
three
four
classes
right,
so
so
that
was
another
way
of
doing
this
right,
and
this
is
kind
of
it
was
a.
B
B
Well,
I'm
doing
this
very.
What
do
you
call
it
andrew
style
right,
like
I'm,
just
going
to
show
you
how
I
look?
Look
things
up
yeah.
So
this
brings
you
here,
but
actually
there's
an
actual
documentation
site
here
so
I'll
I'll,
bring
that
over
here
to
the
chat,
and
so
the
application
sets
is
meant
to
make
this
a
little
bigger,
oops
wrong.
One
I
was
like
my
discord
screen
got
a
lot
bigger,
I'm
like
that's
the
wrong
one,
okay,
and
so
I
got
application
set.
B
So
the
idea
with
the
application
set
is
essentially
a
a
graduation
or
a
a
a
the
next
iteration
of
what
application
sets
were
they
just
like
all
right,
let's,
since
everyone's
doing
application
sets
and
these
helm
charts,
let's
kind
of
mix
these
things
together
right,
let's
actually
just
make
this
a
thing,
so
they
call
it
an
application
set.
So
an
application
set
is
nothing
more
than
I
would
like
to
say
an
application
factory
right.
So
you
give
it.
B
You
know.
One
of
the
engineers
I
was
talking
to
one
of
the
engineers
are
going
to
see
engineers
I
said
yeah
application
set
is
nothing
more
than
you
give
it.
This
application
set
resource,
it
goes
burr
and
then
a
bunch
of
applications
come
out
right.
So
it's
kind
of
like,
like
a
you
notice,
like
the
sound.
B
And
it
and
it
spits
out
applications
right.
So
it's
it's
it's
a
simple:
it's
essentially
a
templating
agent
to
create
applications
right
and
so
before
I
go
into
like
how
to
like
how
to
define
it,
and
you
know
how
to
use
it.
Let's
go
to
there's
this
use
cases
there
we
go
so
there's
a
few
use
cases
right
that
it
solves
here.
So
this
it
gives
you
the
zoom.
B
B
There
we
go
there,
we
go
okay,
so
yeah
you've
got
the
little
argonaut
rights
here.
So
essentially
you
got
a
team
working
on
a
git
repo.
B
They
can
you
have
argo
and
then
you
can
stamp
out
your
applications
in
you
know
kind
of
like
a
hub
and
spoke,
and
this
is
kind
of
the
example
I'm
going
to
go
through
in
a
little
bit
is
I
got
a
central
argo
and
then
many
kubernetes
clusters
and
one
application
set
one
application
set,
can
manage
all
of
this
for
you,
and
so
that's
the
that
was
the
one
of
the
one
of
the
use
cases
right.
That
it
solves.
Is
that
if
you
you
know
here,
it
says
it.
B
I
think
perfectly
if
you
need
to
scale
across
large
number
of
clusters
and
automatically
respond
to
the
lifecycle
of
new
clusters.
So
it's
essentially
hub
and
spoke
management
model,
so
another
one
let's
go
over
here
is
if
you
have
different
teams
right.
So
if
you
have
like
an
infra
team
working
and
like
a
no
another
team
working
on,
let's
say
an
application
team,
two
is
working
on
another
application.
B
You
can
use
application
sets
to
manage
all
that
for
you
right.
So
it's
supposed
to
be
flexible
to
be
kind
of
a
hub
and
spoke
kind
of
design
or
a
what
you
call
a
application
scope
right
where
it's
like
argo
cd
can
handle.
You
know
what
do
you
call
that?
Oh
man,
it's
been
a
long
week.
B
Is
it's
a
multi-tenancy
right,
so
it's
meant
to
handle
that
as
well
and
then
you
know
it's
also
supposed
to
be
handling
things
like
self-service
of
applications
right,
so
I
can
drop.
Let's
say
a
bunch
of
yaml
and
argo
cd
will
automatically
bring
that
up
so
and
so
with
application
sets.
B
There
are
things
called
generators
right
and
so
here
in
this,
if
you
go
to
the
generators
it'll
list
them
there's
different
types
of
generators,
there's
one
up
up
and
coming
that
I'll
explain
at
the
end.
There's
one
that's
list
generator
and
then
I'm
going
to
go
through
this
really
quick,
because
I
actually
have
examples
to
go
through
here
and
I
have
a
cluster.
A
B
Cluster
generator
and
then
hold
on
the
get
generator
the
git
generator
actually
has
two
sub
generator
categories
is
one
called
the
directory
and
one
called
a
file
right.
So
there's
three
main:
there's
three
main
generators
list
cluster
and
get
and
git
has
you
know
us
sub
sub
generators
right.
So
let's
go
over
some
examples
here
that
I
have,
if
you
guys
wanna
here,
I
can
hard
link
that
in
the
chat
as
well.
So,
let's,
let's
go
over
to
visual
studio
right,
visual
studio
code.
A
B
Noreen
noreen's,
let
us
know
yeah,
is
that
yeah.
Let
us
know
if
I,
if
I
go
one
up
or
down
here
so
miranda.
A
I
have
a
question:
oh
yeah,
what
what
is
the
difference
between
multi-tenant
and
multi-cluster.
B
Yeah
so,
which
is
a
very
valid
point,
yeah,
it's
a
value
rather
question
here.
So
multi-tenant
means
it
usually
means
that
you
have
one
cluster,
but
many
users
in
that
cluster
and
they
don't
necessarily
know
about
each
other
right.
So
you
have
like
this
is
the
idea
of
like
a
centralized
cluster.
Where
you
know
team
one
is
working
on
an
application
and
team
two
is
working
on
another
application
and
they
don't
actually
necessarily
know
about
each
other.
I
mean
I
guess
they
can
right.
B
It's
essential
cluster
in
your
team,
but
plus
up
on
size.
Please
just
one
plus,
okay,
they
don't
necessarily
know
about
each
other.
That's
that's
multi-tenant
right!
So
you
have
many
tenants
in
in
one
cluster,
whereas
multi-cluster
is
exactly
what
it
sounds
like.
You
have
many
clusters
so
and
it's
not
like
or
right.
You
can
have
multiple
clusters
and
all
of
them
be
multi-tenant
right.
So
it's
it's
not
one
or
the
other,
so
application
set.
So
I
have
this
application
set.
B
This
one
is
the
list
generator
list
generator
takes
it's
a
simple
kind
of
like
you're,
just
listing
elements
right,
you're
doing
essentially
key
value
pairs
right.
So
cluster,
I'm
gonna
call
it
cluster
one
url.
This
is
the
url
of
that
cluster
right
and
then
I
just
go
through
the
list
cluster
one
close
to
plus
three
and
that's
the
the
generator
section
and
in
the
template
section,
I'm
just
taking
what
I
listed
up
there
and
just
plugging
them
in
kind
of
like
the
helm,
template
idea
right.
B
So
this
is
this
looks
very
the
helm,
charty
thing
that
I
showed
you
earlier.
This
is
kind
of
essentially
that
same
idea,
they're
taking
those
key
values
and
just
using
those
to
populate
these
things.
Also,
in
this
case,
my
name
of
my
cluster
is
going
to
my
name
of
my
application
is
going
to
be
each
iteration
of
cluster
and
then,
when
I'm
building
the
the
source,
repo
right,
I'm
taking
things
like
cluster
right,
I'm
dropping
it
in
here
for
my
overlay
and
then
my
server
url.
B
I
obviously
get
it
from
that
url,
and
so
what
this
looks
like.
So,
let's
go
back
here.
Should
I
make
this
bigger?
Let
us
know
so.
A
Yes,
so
if
I
do
tell
you
yes
right
now,
yeah
it's
just
just
right
now.
B
Let's
do
I
have
I've
already.
I
have
a
management
cluster
and
three
clusters
right
so
like
here,
cluster
one
plus
two
plus
three
is
right.
So
I
have
three
kubernetes
clusters
and
then
I
have
a
central
management
cluster
that
I
installed
argo
cd
on.
So
I
can
you
can
see
this
with
config.
B
What
does
it
get
yeah
get
context.
This
will
be
hard
to
see
so
I'll
just
do
name.
I
have
three
clusters
that
I'm
connected
to.
I
have
you
know
one
integer
and
and
three
of
them
on
aws
cluster,
one
plus
two
plus
three.
Let's
see
how
this
looks
like
this
is
yeah,
that's
ugly,
but
that's
essentially.
B
Right
and
so
so
then
I
have,
if
I
do,
did
you
get
cluster
right
so
then
I
have
argo
cd.
This
clusters,
I
think
cluster
list.
Is
it
yeah?
Okay
right?
I'm
already.
Let
me
let
me
clear
this
I've
already.
You
know
I
have
I
already
attached
it
right
in
cluster
means
the
cluster
that
I'm
running
on,
so
that
okay
and.
B
You're
there
yeah,
because
I'm
there
yeah
yeah
cause
you
like
I'm
already
running
here.
So
I
don't
need
to
add
myself
it's
kind
of
weird
that
does
say
status
unknown.
But
let
me
go
back
here
to
the
argo
city
and
since
I
can
see
that
here
as
well
clusters
right,
I
have
cluster
one
closely
make
this
bigger.
How
about
that?
Oh
yeah!
There!
You
go
cluster
one
cluster,
two
and
cluster,
even
more
go
bigger!
One!
More
go
big
or
global
home
right.
B
Yeah,
that's
bad
okay!
I
gotcha
just
get
rid
of
all
the
great
space,
so
I
have
this
here.
Three
clusters-
cluster,
one
plus
two
plus
three
right
and
this
in
cluster.
This
is
the
the
one
running
on
azure.
B
So
what
ends
up
happening
is
that
when
I
go
back
to
my
application
set
is
that
essentially,
this
is
going
to
build
three
applications,
one
in
cluster,
one
one
cluster,
two
one
and
cluster
three,
so
I'm
gonna
have.
I
have
one
app
called
bgd
deployed
across
these
clusters.
Cluster
one
cluster,
two
cluster,
three
and
depending
on
where
it
is
it's
gonna
show
different
colors.
So
how
do
I?
What
can
I
control
click
here?
Yeah,
yes,
open!
I
trust
I.
B
B
Yeah
this
okay,
so
here
I
have
overlays
right.
So
this
it's
kind
of
it's
kind
of
hard
to
visualize.
This
so
bear
with
me.
You
may
have
to
watch
this
video
a
few
times.
It
took
me
a
while
to
kind
of
like
piece
everything
together
so
here
so
when
this
runs
the
first
time,
it'll
pick
up
cluster
one
right
and
it'll
drop
it
in
here
right.
So
here
application
sets
this
generator
overlays
cluster
one.
B
So
application
sets
this
generator
overlays
cluster
one
and
the
change
here
is
there
might
not
be
a
change.
It
is
blue
right,
so
I'm
gonna
have
to
show
a
blue
square.
This,
for
those
of
you,
who've
been
watching
a
while.
This
is
my
application
that
shows
the
blue
squares
right
when
it
runs
the
second
time
right,
it'll
go
over
overlay's
cluster,
so
the
second
time
is
cluster
two.
B
So
let's
visit
that
cluster
two
oops
wrong
file,
I'm
gonna
make
it
green
and
then
the
third
one
when
it
runs
the
third
time,
do
yellow
I've
added
support
for
yellow.
So
it's
not
just
blue
green.
It's
blue,
green
and
yellow
so
fancy
stuff
going
on.
B
So
yeah,
so
this
is
essentially
it'll
create
three
applications,
so
it'll
it'll
load,
this
it'll
run
three
times
and
I'll
end
up
with
three
applications.
So
let's,
let's
do
that?
Let's,
let's
have
a
little
fun
here,
see
apply,
get
you
know
examples.
Application
sets
a
list
right,
so
we're
doing
the
list
generator
and
then.
B
So
yeah,
so
it's
doing
that!
Let's
go
to
argo!
So
now
here
you
see
it
created
three
applications
boom
nice
right
created
here
cluster
one
right
here
in
cluster
two
and
here
in
cluster
three.
So
if
I
go
to
this
guy
here
and
let's
go
to
this
guy's
route,
I
can't
wait
there.
So
there's
an
update
on
argo
cd.
I
was
actually
talking
to
engineers
today
about
it
that
anytime
it
detects
like
a
route
or
an
ingress.
B
It
gives
you
that
little
external
link,
it
gives
you
a
little
icon
that
you
could
click
that
takes
you
to
that
route
or
ingress
point.
Instead
of
now,
I
have
to
actually
click
on
it,
wait
until
it
loads
scroll
for
infinity.
Until
I
find
it
copy
it
open
a
new
tab
paste
it
hit,
enter
like
it.
It
makes
my
life
easier,
but
anyways,
so
here
it
has
the
blue
square
right.
So
let's
go
back
here.
Let's
look
at.
A
B
Or
no
there's
actually
a
an
actual
I'll
answer
that
question.
B
Really
good
question
I'll
show
you
what's
going
on
and
then
cluster
three
we
should
expect
the
yellow.
So
let's
look
at
the
yellow.
B
B
So
there's
it
goes,
yellow
right,
that's
how
you
get
rfes
in
right,
so
that's
yellow
right,
so
blue
green,
yellow
in
different
clusters
right.
So
I
have
so
there's
a
few
things
going
on
here
with
one
manifest,
I
was
able
to
create
three
applications
spread
across
three
different
clusters
so
now
to
narrate
the
rev's
question
right
so
here
here
the
application
set
actual
manifest
lives
in
a
name
space
called
openshift
get
ops.
B
Here
I
am
deploying
the
application
to
a
to
a
namespace
called
bgd
right.
So
if
I
go
to
say
here
cluster
one,
let's
make
this
a
little
bigger,
oops
control
shift,
there's,
maybe
one
too
many,
oh
well.
So
if
I
do
k
get
up
name
space
well,
I
can
actually
do
here.
Bgd
right,
it'll
show
up
like
bgd,
so
it
actually
I'm
actually
deploying
the
application
in
bgd
here
when
you
see
default
here.
B
This
is
a
project,
but
in
in
the
context
of
argo
cd,
so
argo
city
has
its
own
concept
of
a
project.
B
If
I
go
over
here
yeah
one
of
the
filters
here
project,
it
has
a
project
here
I
haven't.
I
haven't
created
other
projects
inside
of
argo
cd.
So
the
reason
that's
the
multi-tenancy
aspect
of
it
right.
You
can
create
different
name
spaces
inside
of
argo
and
give
permissions
to
those
namespaces
to
different
developers,
so
so
yeah
so
there
it
is.
So
that's
the
answer
to
that,
so
that
default
project
has
nothing
to
do
with
the
kubernetes
default
project.
It's
kind
of
confusing
a
little
bit
but
yeah
just.
B
It's
called
project
right,
yeah
and
also
they
don't
behave
the
same
either.
B
Yeah
they're
different
paradigms,
even
so
it's
it's
kind
of.
Maybe
I
should
do
a
show
about
that
like
how
maybe.
A
B
Exactly
and
so
cool,
so
so
that's
that's
what
that
is
there,
so
I
deployed
an
application
there.
If
I
go
and
delete
this
right
cluster,
one.
B
For
shame
cluster
one
bgd
I
do
a
foreground
delete
it'll,
actually
delete
the
the
application,
but
the
application
set
since
it's
watching
it
automatically
recreates
it.
So
it's
saying:
oh
hey,
you
wanted.
You
know
this
application
to
be
created.
Now
it's
gone.
Well,
I'm
gonna
recreate
it,
and
so
that's
the
that's
that
you
know
overarching
watcher
so
kind
of
recap:
it's
kind
of
a
keep
value
pair
to
in
order
to
build
the
the
application,
the
actual
application
manifest
right,
and
maybe
I
should
show
that
actual
application
manifest.
B
So
if
I
do
k
get
applications,
open
shift
get
out
right.
It
should
show
three
right,
oh
and
if
I,
if
I
want
to
show
oops
application,
sets,
you
just
add
x
to
it
right
and
it
shows
the
bg
application
set.
So
if
I
do
applications-
and
I
do
you-
know-
cluster
one
bgd
actually
edit
this-
so
we
can.
B
See,
as
you
see
it,
just
built
the
application
manifest
based
on
the
template,
so.
A
So
this
is
a
fair
question,
so
I'm
going
to
ask
it:
are
you
using
like
what
shell
are
you
using?
What
enhancements
that
kind
of
thing
shell
in
in
your
terminal
window,
here
yeah.
A
B
B
Is
which
is
kind
of
like
power
line?
So
if
you
look
up
power
line,
get
familiar
with
that
and
then
there's
the
the
only
problem
with
power
line
is
that
it
launches
a
python
sub
shell.
So
all
so
anyways
hillary
called
yeah
yeah.
By
the
way,
hillary
cover
your
ears.
I
don't
want
the
overhead
of
python
running
so
there's
this
there's
this
other
thing
called
pureline
that
does
everything
powerline
does,
except
in
bash.
So.
B
So
there
you
go
so
look
up
pure
line
and
so
and
also
I'm
just
using
k
instead
of
cube
ctl,
because
I
just
created
an
alias,
so
oh
yeah.
One
thing
I
did
wanted
to
note
about
the
list.
Generator
is
that
this
has
to
be
cluster,
and
this
has
to
be
url
they're,
not
just
dumb
key
value
pairs.
You
actually
have
to
name
it
cluster
and
you
actually
have
to
name
it
url.
B
So
that's
out
there
they're
actively
being
worked
on
and
then
a
way
around
that
today
is
there's
this
unknown
field
called
values,
and
that
could
be
any
key
value
pair
right,
like
foo,
equals
a
bar
right
and
then
down
here
instead
of
cluster.
You
can
do
things
like
you
know,
values
foo
right,
so
you
can
kind
of
get
around
the
fact
that
it
isn't
just
a
key
value
pair.
B
So
so
that's
the
list
generator.
So
the
next
one,
one
of
my
favorites.
Let's,
let's
delete
that,
let's
delete
these
applications
delete
all
right
cool
one
manifest
it
should
all
go
away.
Yes,
so
now
it's
starting
to
delete.
So
the
next
one
I
want
to
talk
about
is
the
cluster
generator,
so
cluster
generators.
Here
we
go,
and
so
here
let
me
remove
some
of
this
stuff
here.
So
that
way
you
can
clearly
see
this.
A
B
Because,
as
you
see,
I'm
learning
is
because
this
is
new.
Oh,
this
is
one
thing
I
forgot
to
mention
chris,
that
we
got
yelled
about
yelled
at
about
yelled
at
about
we
did
really
yeah,
so
application
sets.
The
openshift
getups
operator
is
ga.
Application
sets
come
along
with
the
get
ops
operator,
however,
their
tech
preview.
So
right
there.
B
B
Yeah
and
then,
as
as
you
see
this,
is
it's
still
an
alpha
right.
So
if
you,
if
you
see
in
the
first
line,
it's
not
v
one,
it's
v,
one
alpha
one.
So
it's
techn,
you
know
it's!
It's
tech.
B
So
there
will
be
breaking
changes
later
right.
So
like
right,
you
know,
yeah
assume
that
assume
they'll
be
breaking
changes,
so
so
the
cluster
generator
a
little
background
about
cluster
generators.
So
if
you
go
here,
if
I
do
argo
cd
cluster
list
or
list
cluster
cluster
list,
okay
cool
the
clusters-
argo
city-
has
a
list
of
clusters
right.
So
where
does
argo
cd?
Keep
that
in
a
database?
No,
this
is
cloud
native.
We
don't
want
safe,
stateful
stuff.
We
we
use
ncd
for
staple
stuff.
B
So
if
you
do
a
k
get
a
secret,
it's
actually
started
a
secret,
oh
cool
it
ups
I'll
pronounce
operator
open
shift
get
ups.
There
you
go.
B
B
So
here
so
there's
a
secret
for
each
corresponding
cluster
right.
So,
if
I
do,
let
me
clear
the
screen
get
secrets
should
get
ups
and
this
oops
this
secret.
Let's
edit
this
here
oops
my
fingers
aren't
where
it
should
be:
okay,
so
each
secret,
each
cluster,
has
a
corresponding
secrets
in
argo.
B
There
is
in
the
secret
is
data
config,
and
this
config
is
just
nothing
more
than
the
cube
q
config
file,
the
name
right,
so
the
name
is
base64
encoded
and
the
server
is
also
base64
encoded.
So
if
I
take,
let's
just
say
name
right
and
then
I
do
an
echo
oops,
you
can.
A
B
I
could
do
right
see
there,
you
go
it's
a
cluster
cluster
one
there
you
go
cluster,
one
cool
and
then
let's
look
at
the
other
one
right
and
then
server.
B
B
Right-
and
it
just
shows
the
the
connection
of
the
api
right
so
so
the
reason
I'm
showing
you
the
secret
and
the
the
fields
in
there
is
because
this
is
what
the
the
cluster
generator
uses
right
and
so
it'll.
B
This
name
right
here
corresponds
to
the
name
field
in
the
secret
server
here
right
line.
26
corresponds
to
that
server
field
in
that
secret
right.
So
basically
it
takes
the
secret
it'll
it'll,
glean
that
information
from
the
secret,
depending
on
the
the
fields
in
the
in
the
secret-
that's
how
it
builds
it
right,
but
how?
How
does
it
know
where
to
deploy
the
application
right?
B
And
this
is
where
the
cluster
has
something
called:
labels
match
label
selectors,
and
so
here
I
have
a
label,
I'm
saying
bgd
colon
dev,
so
anything
that
I
want
to
deploy
the
dev
version
of
my
application
right.
So
here
again,
remember
I'm
supposed
to
oops
specifying
dev,
I'm
going
to
label
I'm
going
to
use
that
label
in
order
to
assign
it
right
and-
and
how
do
I
assign
it
with
the
label?
Is
I
basically
label
the
secret?
So
what's
going
to
happen?
B
Is
I'm
going
to
label
the
secret,
then
the
application
says
says:
okay,
you
want
this
cluster
to
have
the
dev
version
I'm
going
to
build
it
based
on
the
information
that
I'm
getting
from
the
secret
and
how
that
looks
is
so
first,
let's
first,
let
me
close
this
because
I
think
I've
accidentally
made
a
change.
Don't
save
there,
we
go
there,
you
go
and
then,
let's,
let's
open
it
up
again,
oops
there
we
go
or
are
we
yeah?
Okay,
so
do
apply
so
apply?
I
don't
want
this
generator.
B
I
want
cluster
generator
and
then
I
want
application
set
right
and
so
boom
it's
created.
But
if
I
go
back
here,
nothing
happened
right.
So
a
reason
nothing
happened
is
I
haven't
labeled
anything
already
so,
and
this
is
a
good
opportunity
to
talk
about
troubleshooting.
If
I
do,
okay
get
pods
in
open
shift
get
ups.
B
There
is
a
pod
called
application
set
controller.
So
this
is
the
one
that
you
want
to
take
a
look
at
right,
so
just
kind
of
to
be
clear
application
sets
aren't
built
into
argo.
It's
actually
a
separate
controller
that
all
it
does
is
that
it
builds
application
that
argo
knows
how
to
consume.
B
B
So
if
I
do
a
k
logs
of
that
guy,
so
one
of
the
things
here.
B
Yeah,
so
it
says
here
generated
zero
applications
right,
so
it
generated
simple
applications
because
they
didn't
find
anything.
So
if
I
do,
let
me
clear
the
screen
again.
A
B
Yeah,
oh
from
william,
hey,
william,
I
only
want
cluster
only
cluster
labels.
Can
you
clarify
that
yeah.
B
B
Are
you
talking
about
yeah?
I
think
that's
a
that's
a
separation
of
like
you
want
to
deploy
to
a
specific
set
of
nodes
on
a
cluster,
and
I
think
that's
what
I
mean.
If
you
can
clarify
that
yeah
we
can
so
here
you
know
going
back
down
this
path.
So
for
those
of
you
who
are
using
acm,
this
is
analogous
to
oh,
okay.
This
is
analogous
to
I'll
I'll
reference
that
in
a
little
bit,
this
is
analogous
to
placement
rules
right.
B
So
if
I
do
a
k
label
this,
I
think
you
have
to
have
to
do
secret
right,
okay
label
secret
and
then
what
what
key
value
did.
I
say:
oh
bgd,
dev,
bgd
dev
in.
B
Open
shift
get
offs
all
right
so
as
soon
as
I
label
that
guy
it
creates
the
application
on
cluster
three,
and
so
so
like
this
is
cluster
one.
It
should
be
down
cluster
two.
It
should
be
down
plus
three
should
be
down,
but
maybe
it
it'll.
No,
it's
not
it'll,
it
already
deployed,
so
it
deployed
the
application
on
cluster
three.
B
If
I
label
that
guy,
let's
go
over
here
applications
and
then
all
of
a
sudden
cluster
two
gets
this
application.
So
if
you
want
to
say
you
should
get
a
yellow
square,
sweet
yellow
square,
so
if
you
want
to
so
this
is
so
for
those
of
you
so
familiar
with
acm.
This
is
similar
to
placement
rules.
Essentially,
you
you
pick
a
cluster
based
on
the
label
percentage,
so
it's
like
hey!
I
wanted
to
play
on
this
cluster.
B
All
you
need
to
do
is
just
label
the
secret
and
then
it'll
go
and
deploy
that
application
there.
So
now
to
william's
question
right.
So
the
answer
is
no
you're
labeling,
a
cluster.
You
want
to
deploy
the
application
to
that
cluster.
If
you
wanted
to
deploy
it
to
a
specific
set
of
nodes,
you
would
have
to
edit
the
manifest
the
actual
like
action
actually
going
here
and
doing
node
selectors
in
the
actual
deployment
of
the
application.
So,
although
that
would
that's
an
interesting
use
case
where
it's.
A
B
That's
actually
a
pretty
interesting
use
case,
because
I
don't
want
to
have
to
worry
about
managing
my
labels
in
each
one
of
these
like
directories.
Right
because.
A
B
Gpus
yeah
right
yeah
like
that,
and
then
I
think
that
makes
complete
sense.
So
the
answer
is
no
and
the
way
you
would
do
it
is
just
put
in
the
deployment.
However,
I
think
it's
a
very
interesting
idea
because
then,
at
that,
at
that
point
I
just
have
to
disguise
it
at
that
point.
B
Can
I
can
start
mixing
and
matching
there
so
so
there
that's
the
that's
the
idea
of
the
cluster
generator,
so
so
the
next
one.
That's
up.
Let's,
let's
delete
this
here.
B
Oh
one
thing
I
do
have
to
I
want
to
mention.
I
do
have
this
other
one
here.
If,
if
you
want
to
target
all
clusters
right
like
if
you
just
like,
I
don't
care
about
selectors,
just
put
it
in
everything
in
every
cluster
that
I
have,
if
you
just
provide
an
empty,
an
empty
list
of
the
clusters,
it'll
deploy
to
all
the
clusters,
so
yeah
william
says
yet
another
rfe
he
has
like.
So
I
william
is
one
of
our
telco
architects
and
I
speak
to
him.
B
B
Receptive
like
they,
they
love
these
use
cases
right,
because
you
know
you
know
just
imagine
you're,
just
like
in
a
corner
coding
all
day,
it's
kind
of
hard
to
kind
of
you
know
like
if
you're
just
coding
all
day
it's
you
know
you
don't
have
a
chance
to
get
all
these
use
cases
out,
they're,
very
appreciative
of
a
piece
cases
and
very
open
too
shout
out
a
shout
out
to
shubik
who
released
that
team
music.
So
it's
a
great
team
at
red
hat
here.
Let
me
see
here
next
is
yeah.
A
B
If
you
want
to
target
all
clusters,
just
give
it
an
empty
set,
empty
set
means
all
so
all
right
next
one
next
one
is
actually
my
favorite
one
and
it's
one
of
the
ones
that
I
use
a
lot.
B
It's
the
let
me
close
these
because
we
don't
need
these
anymore,
don't
save.
Where
am
I
get
there,
so
the
get
dirt
generator,
so
this
is
github
directory
generator,
so
this
here
it
all
it
does.
It
looks
at
your
git
repo,
looks
at
your
directory
structure
and
then
just
deploys
applications
depending
on
your
directory
structure,
and
so
since
chris
you
know,
I'm
very,
I
guess
it's
there's
no
easy
way
to
put
it
opinionated
about
directory
structures,
yeah.
B
This
is
one
of
my
favorites
because
all
it
it
there's
no
need
for
like
key
value
pairs
or
there's
no
there's,
no
there's
nothing.
There's
no
logic
that
you
need
to
to
build
into
into
it.
It's
just
depending
on
how
your
get
repo
is
laid
out.
It'll
lay
out
your
applications
that
same
way,
so
hillary
rated
silver
says
opinionated.
B
I
guess
that's
a
that
is
a
nice
way
of
putting
it,
and
so
so
here
I'm
get
basically
the
generator.
You
say
I'm
getting
give
you
a
git
repo
right
and
then
look
in
this
path
and
you
notice
how
there's
a
star
there
right.
Basically,
it
says
pick
up
all
the
directories
that
you
find
in
this
path
and
then
create
my
applications.
Based
on
that.
So
I
have
something
called
see
here.
B
You
know
it'll,
take
path
right
and
base
name,
so
base
name
is
like
built
in
right,
so
path
base,
name,
meaning
whatever
you
find
in
star
and
then
down
here.
It
says,
build
me
an
application
based
on
that.
You
know
here,
I'm
gonna,
deploy
to
cluster
one
in
the
namespace
price
list
and
then
in
the
path
that
it
found
right.
So
this
whole
this
whole
thing
and
then
it'll
name
it
based
on
the
namespace
right.
B
B
So
here
I
have
three
applications
right.
I
have
an
application,
that's
just
a
there's,
a
bunch
of
ammo
right,
so
this
is
yaml.
Just
a
bunch
of
this
is
my.
B
All
the
yamls
all,
essentially
this
is
my
front
end
and
then
I
have
a
database
which
is
actually
a
helm
chart.
So
this
is
interesting,
so
I
have
an
application
made
up
of
some
yaml
that
I
have
written
and
a
helm
chart
that
basically,
I'm
just
consuming
a
service
right
here
in
this.
In
this
case,
I
am
using
the
bitnami's
where's
my
values
there.
It
is
the
bitnami's
my
sql
database
right
because
I'm
going
to
create
like
to
say
an
aha
database
right.
So
here
this
is
kind
of
interesting.
B
I
have
an
application
that
I've
written
and
I'm
going
to
just
use
a
database
from
a
helm
chart
that
I
found
and
then
I
have
some
configuration
that
does
things
like
sets
up
rbac
and
sets
up
the
the
namespace.
B
You
know
kind
of
config
like
things,
and
so,
if
I
go
back
here
so
here
essentially
since
I
have
three
directories,
it'll
create
three
applications
right,
it'll,
look
in
this
path:
it'll
take
it'll
name
it.
Whatever
the
base
name
of
this
path
is
so
if
I
go
back
so
the
base
name
it'll
be
priceless
front
end
would
be
one
application,
prices
db,
be
the
next
application
and
press.
B
This
config
would
be
the
last
one
and
that's
how
it
gets
the
name
and
then
the
complete
path
right
is
basically
everything
that
I
found
it
here.
So
so,
since
the
best
way
to
figure
things
out
is
to
apply
it.
So
let's
just
apply,
did
you
do
here?
We
are
get
der
generator
and
then
here.
B
Abset
come
on
there.
He
goes
there.
It
goes
going
back
to
argo
here
so
now.
Here
I
have
three
applications
right
all
deployed
cluster
one,
as
you
see
here,
there's
a
config
that
goes
out
right.
That
creates
all
that.
So
that's
one
application
right.
So
that's
one
directory,
as
you
saw
in
my
my
configuration
here,
so
let's
press
this
config
and
then
there
is
the
db.
B
It
goes
here
right
and
that's
the
next
one
that
that's
going
out
and
then
the
the
front
end
right.
So
the
front
end
is
actually
waiting.
B
I
have
sync
waves
again
if
you
haven't
caught
that
sync
waves
and
hooks,
so
it's
basically
waiting
for
the
db
to
come
up
before
before
it
actually
finishes
deploying.
So
if
we
go
to
the
db,
this
is
all.
A
B
I
kind
of
wanted
to
show
if
I
go
over
here
cluster
one.
If
I
do
k
get
pods
price
list.
B
I
have
a
h
a
because
I
just
wanted
to
get
fancy
and
do
an
h
a
example
of
there's
operators
for
that.
B
You
go
yeah,
that's
right,
yeah,
and
so
I
just
wanted
to
get
fancy.
Do
a
helm
chart
for
this
database
thing
here
for
the
first
cluster.
So
that's
how
that
works.
B
I
have
based
on
your
directory
structure
it'll,
deploy
different
different
applications
based
on
that
on
that
directory
structure.
So
this
is
pretty
cool.
If
you
know
this
works,
if
you
have
like
like
a
model
repo
with
with
all
your
deployments
and
all
the
so,
you
can
like
in
one
shot
just
deploy
that
that
whole
the
whole
application
stack
so
yeah.
B
Yeah
yeah
exactly
yeah,
it's
it's
a
way
to
to
massively
deploy
these
out
yeah.
So
one
of
my
one
of
my
favorite
actually
favorite
things
about
argo
is
when
they
came
out
with
application
sets.
I
was
like
yes.
B
Yeah
exactly
I
didn't
need
to
see
your
face.
I
already
knew
it's
like
well.
I
was
also
talking
to
gerald
one
of
the
architects
in
canada.
I
talked
about
them
often
on
on
the
stream,
but
like
I
I
was
like
literally
like
like
shaking
I'm.
Like
you
don't
understand
this
is
you
know
it's
a
game,
changer
and
then
he's
like
yeah
whatever
and
then
like
a
few
weeks
later,
he
goes
oh
yeah.
No,
I
see
why
you
like
these.
B
B
So
the
last
one!
So
if
none
of
these
so
the
last
one
is
kind
of
one
of
those
catch-alls
like
if
none
of
these
tickle
your
fancy
sort
of
things
the
last
one
here
and
I
think
we're
doing
pretty
good
on
time.
B
Yeah
yeah,
so
I
think
I
think
I
think
it's
it's
it's.
Actually
we
did
pretty
good
on
on
time
here.
Yeah
is
the
what
we
call
the
get
file
generator
right.
So
what's
the
get
file
generator,
so
git
file
generator
will
deploy
your
application
based
on
a
config
file.
You
have
stored
inside
of
get
so
here
here.
Is
you
say,
okay,
this
repo,
this
path
right
in
every
directory.
B
Yeah,
every
directory
you
find
in
this
path,
there's
going
to
be
a
config.json
file.
That's
what
I
want
you
to
read.
That's
why
your
this
is
the
application
set
does
and
in
that
file
it
can
so
in
this
file.
It
can
be
configured,
however,
you
want
it
to
be
as
long
as
it's
valid
json.
That's
all!
That's
really!
The
only
there's
there's
two
prerequisites
one.
B
It
has
to
be
json,
so
there's
a
there's,
a
rfe
to
also
do
a
yaml,
but
right
now
it's
just
json
and
as
long
as
it's
valid
right,
so
it's
it.
So
this
is
kind
of
a
whatever
your
wildest
dreams
could
be
so
braden.
B
So
it'd
be
interesting
to
find
out
if
this
yeah.
B
Oh,
I
see
what
you're
saying
while
this
can.
I
can.
I
read
no
for
at
least
for
this
one.
No,
it
has
to
be
a
config.json
file
like
it
has
to
actually
say
config.json
or
something.json
doesn't
have
to
say
be
config,
but
as
a
valid
json.
B
So
if
I
go
here
and
I
look
at
the
git
file
generator-
I
have
a
here
if
you
notice,
I
have
cluster
one
with
a
config
here,
a
cluster
two
with
a
config
and
three.
So
if
I
go
over
here
and
look
at
this
json
file,
it's
essentially
I'm
just
building
a
config
right,
name,
server
overlay
here.
B
This
is,
if
gerald,
if
you're
watching
this,
he
had
kind
of
rfe
on
this
generator,
but
I
think
the
config.json
one
would
probably
work
would
have
worked
as
well
for
his
use
case,
because
it
could
be
whatever
key
value
pairs
you
want,
it
could
literally
be
foobar.
It
could
be
dumb
equals.
Yes,
it
could
be
whatever
you
want,
because
all
it's
doing
it's
reading
that
file
and
then
taking
you,
know
cluster.name.
It
takes
it
actually
from
this
config
file.
Cluster
name
right
here:
cluster.overlay
is
cluster
overlay.
B
Cluster.Server
cluster.serverlink
and
then
you
know
namespace,
it
could
have
been
clustered.
I
could
add
namespace
here
right
and
then
put
it
in
there
it'll.
So
this
is
essentially
whatever
your
wildest
dreams
narrate
on
the
riv,
and
so
so
this
is.
This
is
how
it
builds
that
out.
So
if
I
go
here
here,
cluster
one
I'll
do
a
cluster
one
overlay.
B
B
Application
set,
go
go.
The
factory
is
going
and
then
notice
how
it's
deploying
this
application.
Now
right.
So
depending
on,
can
I
look
at
the
config
here.
I
think
I
can
app
details
manifest
there.
We
go.
You
know
it.
Basically,
it
it
took
that
config.json
file
and
just
added
boom
boom
boom
boom,
so
so
yeah.
So
that's
the
the
cl.
A
B
Yeah
application
sets
in
general.
One
last
thing
I
want
to
mention
about
application
sets.
Is
you
notice
the
generators?
Are
it's
a
it's
an
array,
so
you
can
actually
mix
and
match
generators.
You
don't
have
to
have
separate
generators.
You
can
actually
use
git
dir
along
with
git
file
along
with
right.
So
you
can.
You
can
actually
use
all
all
four
of
them
if
you
want
all
at
once
in
one
application
set
that
they
don't
you,
don't
they
don't
like
stack
on
each
other
right
so
like
you
can
actually
override
things.
B
So
you
have
to
kind
of
be
careful,
but
you
can
technically
use
use
them
all
together.
So
so
yeah,
that's
application
sets
in
under
an
hour.
So
I'm
sure
I'm
gonna
need
some
water
yeah
because
it
was
non-stop
talking.
This
is.
I
do
have
a
corresponding
blog
about
this.
Oh
yeah,
that's
right!
Crap,.
B
B
There
we
go
yes,
I
found
it.
I
there's
there's
a
blog
about
this
right,
so
this
is
the
stream
version
of
this
blog
that
I've
written
so
check
out
the
blog
I
go
through
it
in
in
gruesome
detail,
essentially
the
all
the
different
mix
and
matching
so
so
yeah
awesome
cool.
I
think
I
think
we're
I
think,
we're
good.
We
have
a
hard
stop
yeah
40
seconds
to
go.
Let's.