1
00:00:00,000 --> 00:00:04,220
All right. Well, Paul, our first experiment with a live podcast recording is going well so far.

2
00:00:04,520 --> 00:00:09,040
I had like 15 minutes of futzing around with stuff, despite the best intentions.

3
00:00:09,600 --> 00:00:11,200
But here we are. Why don't you introduce yourself?

4
00:00:11,960 --> 00:00:13,480
Sure. My name is Paul Tchaikovsky.

5
00:00:15,720 --> 00:00:16,820
What do you want to know about me?

6
00:00:17,280 --> 00:00:21,300
I'm originally from Australia, as you can tell from the accent, but I live in Austin, Texas.

7
00:00:22,000 --> 00:00:25,240
What did they say? I wasn't born in Texas, but I got there as fast as I could.

8
00:00:25,400 --> 00:00:25,840
That's right.

9
00:00:26,100 --> 00:00:27,720
And then I got stuck there and I couldn't leave.

10
00:00:28,460 --> 00:00:32,000
So we're here in Charlotte at the SpringOne Tour.

11
00:00:32,140 --> 00:00:33,260
I always want to say Spring Tour.

12
00:00:33,980 --> 00:00:36,460
And I wanted to take this opportunity.

13
00:00:36,540 --> 00:00:40,780
We can talk about Kubernetes and Spring and exciting things like that, that you know more about than me.

14
00:00:40,840 --> 00:00:44,660
But first, you told me you had a really good hamburger last night, right around the corner.

15
00:00:44,960 --> 00:00:46,740
Yeah, I did. Well, actually, at lunch today.

16
00:00:46,960 --> 00:00:53,220
I skipped the chicken masala and I ran across to a place called Cowbell, just around the corner.

17
00:00:53,780 --> 00:00:55,480
And I had an amazing hamburger.

18
00:00:55,940 --> 00:00:56,180
Yeah.

19
00:00:56,180 --> 00:01:01,280
So it was a hamburger and it had foie gras on it, which immediately is a win in my book.

20
00:01:01,640 --> 00:01:11,220
But then they had this like orange marmalade and a, quite a tart mustard, like a horse strategy mustard.

21
00:01:11,540 --> 00:01:14,620
And so both those two things kind of cut through the richness of the foie gras.

22
00:01:14,860 --> 00:01:17,160
So it made it a lot more delicious.

23
00:01:17,600 --> 00:01:25,280
And then they served it with these sweet potato tots that they had dusted in this like cinnamon sugar mix.

24
00:01:25,600 --> 00:01:29,200
So it was like somewhere between tots and donut holes.

25
00:01:29,580 --> 00:01:31,240
Kind of like a potato beignet.

26
00:01:31,580 --> 00:01:32,400
Right, exactly.

27
00:01:32,660 --> 00:01:32,840
Huh.

28
00:01:33,240 --> 00:01:37,080
And then we had a chia wine float.

29
00:01:37,640 --> 00:01:41,400
And so chia wine is a cherry soda, I think.

30
00:01:41,800 --> 00:01:43,060
Oh, I had some of that at lunch.

31
00:01:43,260 --> 00:01:43,480
Yeah.

32
00:01:43,540 --> 00:01:44,040
Not a float.

33
00:01:44,300 --> 00:01:44,880
Yeah, yeah, yeah.

34
00:01:44,880 --> 00:01:45,100
Yeah, yeah.

35
00:01:45,400 --> 00:01:48,600
And it may have had a little bit of cherry brandy in it as well.

36
00:01:48,840 --> 00:01:50,600
But, you know, it's a work day.

37
00:01:50,700 --> 00:01:51,180
So we didn't go too much.

38
00:01:51,180 --> 00:01:51,360
Right.

39
00:01:51,460 --> 00:01:52,880
It's a content enhancer.

40
00:01:53,280 --> 00:01:53,640
Exactly.

41
00:01:53,840 --> 00:01:54,200
That's right.

42
00:01:54,440 --> 00:01:54,800
All right.

43
00:01:55,580 --> 00:01:56,060
What's it called?

44
00:01:56,160 --> 00:01:56,520
Cowbell?

45
00:01:56,980 --> 00:01:57,340
Cowbell.

46
00:01:57,600 --> 00:01:57,760
Yes.

47
00:01:57,980 --> 00:01:59,840
Because you always need more Cowbell in your life.

48
00:01:59,920 --> 00:02:00,320
That's right.

49
00:02:00,480 --> 00:02:00,760
All right.

50
00:02:00,840 --> 00:02:02,440
Well, we got that covered.

51
00:02:02,780 --> 00:02:03,800
That's the important stuff.

52
00:02:03,960 --> 00:02:08,280
So you've been writing a series recently about how to do like a spring and spring boot and

53
00:02:08,280 --> 00:02:09,500
Kubernetes, right?

54
00:02:09,740 --> 00:02:10,340
Yes, I have.

55
00:02:10,340 --> 00:02:10,540
Yeah.

56
00:02:10,600 --> 00:02:12,160
And how long is the series going to go on?

57
00:02:14,700 --> 00:02:18,400
Until I figure it out or I get bored, whichever happens first.

58
00:02:19,600 --> 00:02:20,220
So that's honest.

59
00:02:20,540 --> 00:02:20,680
Yeah.

60
00:02:20,740 --> 00:02:22,400
I'm coming at it from a couple of different angles.

61
00:02:22,640 --> 00:02:26,260
One is I've never written a line of Java in my life.

62
00:02:26,440 --> 00:02:27,300
Actually, that's not true.

63
00:02:27,780 --> 00:02:35,660
As of earlier this month, I wrote a patch for Halyard, which is part of the Spinnaker tooling.

64
00:02:36,140 --> 00:02:39,720
So I now have one line of code that I wrote in Java.

65
00:02:40,280 --> 00:02:44,840
And hopefully sometime in the next 12 months, I'll actually accept that pull request.

66
00:02:45,020 --> 00:02:45,360
Oh, yeah.

67
00:02:45,460 --> 00:02:45,880
That's exactly right.

68
00:02:45,880 --> 00:02:46,940
Because, you know, that's always a thing.

69
00:02:47,020 --> 00:02:51,740
You contribute to open source and then you wait for someone to actually review it and merge it in.

70
00:02:52,060 --> 00:02:52,600
All right.

71
00:02:52,600 --> 00:02:58,620
So what are the concerns if you're deploying like a spring boot app to Kubernetes?

72
00:02:58,840 --> 00:03:03,600
Like, what are you, I got a command prompt here and I've set up some Kubernetes thing.

73
00:03:04,300 --> 00:03:04,360
Right.

74
00:03:04,360 --> 00:03:06,320
I mean, is that, or is that jumping the gun?

75
00:03:06,700 --> 00:03:11,620
Well, I mean, the first thing you need to do is actually get your spring app inside of a Docker container, right?

76
00:03:11,720 --> 00:03:12,540
Inside of a Docker image.

77
00:03:12,660 --> 00:03:12,760
Right.

78
00:03:13,400 --> 00:03:16,660
And it's not necessarily obvious on how to do that.

79
00:03:17,420 --> 00:03:28,040
Ordinarily, you would have a Docker file sitting in your code repo and it would say, like, from Java, run some commands and magic happens.

80
00:03:28,040 --> 00:03:32,000
And your application is now inside the container.

81
00:03:33,520 --> 00:03:45,360
What I found with Java is often people are expecting you to have already built the Java file and then inject it into the Docker image versus have it compile itself inside the Docker image.

82
00:03:46,220 --> 00:03:50,360
And there's some tools that actually do that, that do that for you.

83
00:03:50,460 --> 00:03:52,120
And so you don't even need, you don't need a Docker file.

84
00:03:52,200 --> 00:03:52,840
You don't need anything.

85
00:03:52,920 --> 00:03:57,520
You just say, hey, Maven, make me a Docker image.

86
00:03:58,180 --> 00:04:02,140
And there's a tool from Google called Jib, J-I-B.

87
00:04:02,680 --> 00:04:08,940
And there's a couple of tools from, I think, Spotify that will either help build one from a Docker file or without a Docker file.

88
00:04:09,000 --> 00:04:12,380
And it just, like, takes source and compiles it for you or it takes your already built one?

89
00:04:12,380 --> 00:04:13,680
Yeah, it takes your source.

90
00:04:13,940 --> 00:04:19,240
Like, you do Maven install or you add some Maven commands and it will basically build it for you.

91
00:04:19,760 --> 00:04:26,140
The interesting thing with the Google one is it will actually build you a Docker image without you needing Docker on your computer.

92
00:04:26,920 --> 00:04:27,360
Right.

93
00:04:27,780 --> 00:04:31,500
Which, I mean, I have Docker on my laptop, so it wasn't a big deal.

94
00:04:31,860 --> 00:04:37,060
But it means I can build my images in a CI system that doesn't have a reliance on Docker.

95
00:04:37,300 --> 00:04:37,760
I see.

96
00:04:38,100 --> 00:04:42,420
And so one of the CI systems I've been playing with lately is drone.io.

97
00:04:43,100 --> 00:04:53,540
And they're in the middle of rebuilding that on top of Kubernetes with Kubernetes being, like, the engine for running the actual CI tasks.

98
00:04:53,860 --> 00:04:54,400
Oh, right, right.

99
00:04:54,580 --> 00:05:07,980
And so ordinarily, if you want to build a Docker image inside of a Kubernetes pod, you have to either allow privileged mode, so you can run Docker in Docker, or you need to map your Docker socket from the host into a container.

100
00:05:08,500 --> 00:05:12,560
Both of which have some spurious security concerns.

101
00:05:12,880 --> 00:05:15,440
Whereas using this tool, I just don't need Docker at all.

102
00:05:16,100 --> 00:05:22,460
And so it will build it into a Docker image and then it will upload it to the Docker registry without needing Docker on it.

103
00:05:22,520 --> 00:05:25,660
Because really, a Docker image is a tarball with files in it.

104
00:05:25,900 --> 00:05:32,480
And so you can just untar that, throw some more stuff in it, tar it up again in the right format, and you've got an image.

105
00:05:32,780 --> 00:05:41,300
And so it seems like the assumption of, like, Docker and Kubernetes then is, like, you're going to give me a pre-made Docker image.

106
00:05:41,420 --> 00:05:41,800
Exactly.

107
00:05:42,020 --> 00:05:45,120
And hence all these exciting workarounds to, like, not do that.

108
00:05:45,180 --> 00:05:45,580
Exactly.

109
00:05:46,120 --> 00:05:53,800
And that may change a little bit as, you know, Knative is a newish thing in Kubernetes that has some tooling for building images.

110
00:05:54,100 --> 00:05:56,280
And so that might help with that a little bit.

111
00:05:56,940 --> 00:06:01,760
But it's probably going to use the same tooling under the hood as I'm doing manually anyway.

112
00:06:01,960 --> 00:06:08,260
So, you know, whether it's me or Kubernetes doing it, there's still something doing the build of your image.

113
00:06:08,500 --> 00:06:09,020
Right, right.

114
00:06:09,040 --> 00:06:09,720
Before you can run it.

115
00:06:09,940 --> 00:06:14,140
And then so you get the thing built there, or you get it in there, and then what?

116
00:06:14,380 --> 00:06:15,920
Like, how do you, like, run it?

117
00:06:16,480 --> 00:06:17,980
All right, so I've got my image built.

118
00:06:18,220 --> 00:06:22,020
I've pushed my image to a Docker registry so that my Kubernetes cluster can then get it.

119
00:06:22,480 --> 00:06:30,720
And then if it's, like, a Hello World app, I can do kubectl run, give it a name, and point at my image, and that's enough to get it running.

120
00:06:31,280 --> 00:06:31,600
Okay.

121
00:06:32,400 --> 00:06:35,240
But it's probably not a Hello World app in real life.

122
00:06:35,240 --> 00:06:39,100
It's probably got, you know, some config files that need to be modified.

123
00:06:39,300 --> 00:06:40,680
Like, yeah, the pet store you were using.

124
00:06:40,680 --> 00:06:42,780
Exactly, the pet store, some other stuff.

125
00:06:43,500 --> 00:06:49,420
And so with the pet store, it's still a fairly basic app, but it's got, it needs a database.

126
00:06:49,740 --> 00:06:53,220
And so you can use an in-memory database, or you use, like, an external MySQL.

127
00:06:54,940 --> 00:07:03,380
And then it has a bunch of config settings that you can expose, you know, to change, like, you know, MySQL host and stuff like that.

128
00:07:03,380 --> 00:07:09,920
And you can do those via environment variables, which you basically capitalize, like, spring, underscore, blah, blah, blah.

129
00:07:09,980 --> 00:07:19,980
And you basically simulate the application.yaml or parameters.xml, whatever that file is you use to tell Java.

130
00:07:20,080 --> 00:07:21,580
Like you said, you're only a recent programmer.

131
00:07:21,700 --> 00:07:22,000
Exactly.

132
00:07:23,460 --> 00:07:27,560
And so, and so you, environment variables.

133
00:07:28,700 --> 00:07:31,580
And that's enough to get, like, your app running.

134
00:07:32,420 --> 00:07:47,540
What's interesting, though, is sort of spring adopted a lot of the things that came out of Netflix for, like, service discovery, for, like, doing an external configuration server and things like that.

135
00:07:48,080 --> 00:07:52,540
And so, spring has these adapters to tie into those services.

136
00:07:53,140 --> 00:07:55,920
Well, Kubernetes provides ways to do that, those as well.

137
00:07:55,920 --> 00:08:07,680
And so there's a spring cloud Kubernetes project that basically will let you just automatically use the Kubernetes versions of those things.

138
00:08:08,100 --> 00:08:08,140
Okay.

139
00:08:08,340 --> 00:08:20,940
So, in your pom.xml file, if you're a Maven fan, which I'm still learning, I didn't realize that in January of 2019 I would be writing, handwriting, XML files.

140
00:08:21,080 --> 00:08:21,920
But, you know, here we are.

141
00:08:23,960 --> 00:08:33,860
If one of our Java devs in the room, Mark Heckler, would like to rewrite it so that we can use, like, a pom.yaml file, that would be amazing.

142
00:08:34,820 --> 00:08:39,200
If you could send that up to Maven, I'm sure they would happily take that for us.

143
00:08:39,320 --> 00:08:41,620
Do they still use DTDs in XML?

144
00:08:43,860 --> 00:08:45,080
I don't know what that is.

145
00:08:45,140 --> 00:08:45,600
Okay, good.

146
00:08:45,760 --> 00:08:46,060
Probably.

147
00:08:46,440 --> 00:08:46,640
Yeah.

148
00:08:46,840 --> 00:08:47,160
Probably.

149
00:08:47,780 --> 00:08:54,300
So, anyway, you put this, like, four-line thing into your pom.xml to say, I've got a dependency on spring cloud Kubernetes.

150
00:08:55,000 --> 00:08:59,980
And then if you deploy it to Kubernetes, they'll automatically get, like, service discovery.

151
00:09:00,200 --> 00:09:07,940
So, any services or pods that it should know about, it just asks Kubernetes for the host names and IP addresses.

152
00:09:08,120 --> 00:09:09,480
Because Kubernetes already knows those things.

153
00:09:09,680 --> 00:09:11,620
So, then you can be, like, is this the right granularity?

154
00:09:11,620 --> 00:09:17,380
Then your pet store, your store, can be sort of, like, pod aware, right?

155
00:09:17,620 --> 00:09:17,980
Exactly.

156
00:09:18,380 --> 00:09:18,740
Right, right.

157
00:09:18,740 --> 00:09:28,280
Yeah, so, if it needs a MySQL backing store, and I'm running MySQL in my Kubernetes cluster, I don't need to, like, give it an IP address for my...

158
00:09:28,280 --> 00:09:29,120
You have to figure it out.

159
00:09:29,140 --> 00:09:29,260
Right.

160
00:09:29,320 --> 00:09:31,960
I just need to say, I need you to go to my MySQL service.

161
00:09:32,160 --> 00:09:32,400
Okay.

162
00:09:32,740 --> 00:09:32,980
Okay.

163
00:09:33,060 --> 00:09:45,600
And then I can use a config map or a secret, which are Kubernetes constructs, which are basically key value pairs that Kubernetes keeps track of, to configure my app as well.

164
00:09:46,260 --> 00:09:56,140
And so, assuming the config map is named correctly in the right nomenclature, the app will read those config maps and say, okay, these are the config settings to use for the app.

165
00:09:56,220 --> 00:10:07,760
So, I can put my MySQL server name, my username, my database name into a config map, and I can put my password into a secret, and it will automatically load those things up when I start the app.

166
00:10:08,040 --> 00:10:08,320
Okay.

167
00:10:08,320 --> 00:10:15,380
So, I don't need to be, like, hand-rolling a YAML file to stick in the container.

168
00:10:15,540 --> 00:10:20,440
I don't need to be, like, putting in, like, 15, 20 different environment variable lines.

169
00:10:20,560 --> 00:10:20,880
Yeah, yeah, yeah.

170
00:10:20,880 --> 00:10:26,660
I can just stick it all in a config map and have it actually just read from it, which is super interesting.

171
00:10:27,180 --> 00:10:32,120
I haven't tested how it handles, like, when you modify the config map, and so that's my next.

172
00:10:32,120 --> 00:10:32,520
Oh, right.

173
00:10:32,580 --> 00:10:34,240
Because you have to, like, redo stuff.

174
00:10:34,240 --> 00:10:34,480
Right.

175
00:10:34,840 --> 00:10:46,600
Because I know with the Spring external configuration, I think you send it some sort of, like, an API call to an actuator to tell it to reread its config.

176
00:10:46,840 --> 00:10:47,200
Right, right.

177
00:10:47,200 --> 00:10:54,760
So, I don't know if I'll have to do that, or, so, that's probably not the next blog post, but the one after.

178
00:10:55,740 --> 00:11:00,420
Right now, I'm just, first of all, explored how to just get, like, a basic app up and running.

179
00:11:00,560 --> 00:11:08,940
So, by using, like, the Kubernetes imperative commands, like kubectl run and kubectl expose to get the app up and running.

180
00:11:09,400 --> 00:11:13,700
So, my next post will probably be about, okay, now let's actually write some Helm charts.

181
00:11:14,340 --> 00:11:22,860
And I'm writing a basic Spring Helm chart with the idea that most Spring apps have this very similar set of characteristics.

182
00:11:23,340 --> 00:11:23,700
Yeah.

183
00:11:23,700 --> 00:11:27,720
So, I can have one Helm chart that will deploy most Spring apps.

184
00:11:28,520 --> 00:11:28,960
Right.

185
00:11:29,440 --> 00:11:36,240
And then, from there, I'll probably then get on to config maps and service discovery and some of the other tighter integrations.

186
00:11:36,740 --> 00:11:40,300
So, then to recap, we've got a store, an application that's a store.

187
00:11:40,400 --> 00:11:43,160
You can find pets or music or whatever.

188
00:11:44,100 --> 00:11:48,540
And you're going to want to, like, compile that as, like, a Spring boot app, I guess.

189
00:11:48,800 --> 00:11:48,920
Right.

190
00:11:48,920 --> 00:11:49,400
Or whatever.

191
00:11:49,540 --> 00:11:49,700
Exactly.

192
00:11:50,500 --> 00:11:54,820
Now, right there, you can either compile it on your own and build your own Docker image.

193
00:11:55,120 --> 00:11:56,520
And then, you stick that in a registry.

194
00:11:57,220 --> 00:12:03,200
And then, you use your kubectl stuff to basically have that run in a pod somewhere.

195
00:12:03,420 --> 00:12:03,560
Yep.

196
00:12:03,880 --> 00:12:11,860
And then, but then there's a variation there where basically you could say, like, I want the build pipeline to build this thing for me.

197
00:12:12,220 --> 00:12:14,280
I don't want to have to create the image on my own.

198
00:12:14,340 --> 00:12:16,080
Or I'm not allowed to create the image on my own.

199
00:12:16,540 --> 00:12:19,740
And then, once you get that, so then that gets deployed into your pod.

200
00:12:19,880 --> 00:12:25,940
And then, after that, you're basically, like, now, within the Kubernetes cluster, I need this database.

201
00:12:26,180 --> 00:12:34,480
So, I need some way of passing through from my XML or YAML file, ask for the store database.

202
00:12:35,120 --> 00:12:40,080
And then, that will get injected into your Kubernetes name value store somewhere.

203
00:12:40,380 --> 00:12:41,400
I'm doing a lot of hand-waving.

204
00:12:41,760 --> 00:12:41,860
Yes.

205
00:12:42,600 --> 00:12:49,640
But then, if you've included this Spring for Kubernetes wingding, that knows how to go up to Kubernetes and stay.

206
00:12:49,760 --> 00:12:51,420
And say, tell me the database.

207
00:12:51,900 --> 00:12:56,820
And then, it basically jams that in for you instead of having to pass in all those environment variables on your own.

208
00:12:57,140 --> 00:12:57,400
Yes.

209
00:12:57,560 --> 00:12:59,240
It's like you actually listened to me.

210
00:12:59,480 --> 00:13:03,200
Your eyes were glazed over when I was talking, but it was actually being taken in.

211
00:13:03,320 --> 00:13:03,740
That's right.

212
00:13:04,120 --> 00:13:04,500
That's right.

213
00:13:04,580 --> 00:13:06,020
I got to work for my paycheck.

214
00:13:06,800 --> 00:13:08,220
Otherwise, I wouldn't be listening to you.

215
00:13:10,220 --> 00:13:10,620
Okay.

216
00:13:11,020 --> 00:13:17,560
So, then, like, does that, how do you, well, so why am I using Kubernetes in the first place?

217
00:13:18,000 --> 00:13:19,040
That's a great question.

218
00:13:22,200 --> 00:13:26,720
Usually, it's because you have some sort of organizational pressure to do so.

219
00:13:28,000 --> 00:13:29,960
Sometimes, it's real.

220
00:13:30,160 --> 00:13:31,220
Sometimes, it's political.

221
00:13:33,860 --> 00:13:42,560
Sometimes, you're doing it because, you know, the old way of doing things is so bad that it's worth taking on the pain of, you know, using Kubernetes.

222
00:13:43,060 --> 00:13:44,460
So, Kubernetes is great.

223
00:13:44,740 --> 00:13:45,720
I love using it.

224
00:13:46,260 --> 00:13:53,240
But, like, there's not a lot of point in using Kubernetes for Kubernetes' sake, right?

225
00:13:53,400 --> 00:13:53,560
Right.

226
00:13:54,060 --> 00:14:03,420
If you don't have a set of problems that Kubernetes solves by bringing it into your organization, you're just creating more problems and not solving the ones you have.

227
00:14:03,640 --> 00:14:12,360
So, if you find yourself with a set of problems that Kubernetes can be part of the solution to fix, then that's really when you want to be looking at Kubernetes.

228
00:14:12,800 --> 00:14:16,460
And so, what are these problems you might have?

229
00:14:17,180 --> 00:14:17,800
Oh, boy.

230
00:14:18,780 --> 00:14:20,640
Well, let me be more directed.

231
00:14:20,640 --> 00:14:32,220
So, what is a reason you would be using Kubernetes, right, that creates the next thing that you need to solve when it comes to running Spring and Kubernetes, right?

232
00:14:32,240 --> 00:14:33,680
So, we've gotten an instance running.

233
00:14:34,040 --> 00:14:34,720
Everything's dandy.

234
00:14:35,180 --> 00:14:38,320
I assume part of why you want Kubernetes is because of, like, elasticity.

235
00:14:38,580 --> 00:14:39,860
I don't know if the kids say that anymore.

236
00:14:40,240 --> 00:14:40,400
Yeah.

237
00:14:40,420 --> 00:14:42,520
But some sort of, like, scaling sort of thing.

238
00:14:42,540 --> 00:14:42,640
Yeah.

239
00:14:42,720 --> 00:14:48,960
So, Kubernetes has a lot of good properties for running, you know, web-scale apps.

240
00:14:49,220 --> 00:14:49,440
Right.

241
00:14:49,840 --> 00:14:53,380
It handles scaling applications up and down really well.

242
00:14:54,460 --> 00:14:57,840
It's really smart about how it deploys them.

243
00:14:57,960 --> 00:14:59,580
You know, they're lighter weight than VMs.

244
00:14:59,620 --> 00:15:00,820
There's a bunch of things it does.

245
00:15:03,700 --> 00:15:05,160
I just lost my chain of thought.

246
00:15:06,160 --> 00:15:07,540
Better edit this out in post.

247
00:15:08,000 --> 00:15:08,400
Oh, that's all right.

248
00:15:08,460 --> 00:15:10,440
So, you got your sprint, your store running.

249
00:15:10,700 --> 00:15:10,940
Right.

250
00:15:11,140 --> 00:15:14,300
And then, all of a sudden, I'm doing really well selling pets.

251
00:15:14,480 --> 00:15:14,700
Yeah.

252
00:15:14,820 --> 00:15:15,780
I don't know what that means.

253
00:15:15,780 --> 00:15:16,180
Yeah.

254
00:15:16,280 --> 00:15:16,380
Okay.

255
00:15:16,460 --> 00:15:21,260
So, like, let's take a step back to before you're running a pet store, like, why you're

256
00:15:21,260 --> 00:15:23,640
actually going to go to, like, have Kubernetes there.

257
00:15:23,720 --> 00:15:27,380
Because you're not going to get a Kubernetes just so you can run a pet store, right?

258
00:15:27,380 --> 00:15:29,200
You've got a larger endemic problem.

259
00:15:29,800 --> 00:15:34,820
And often, that's around, like, just the amount of toil and the amount of effort and the amount

260
00:15:34,820 --> 00:15:38,740
of time it takes to get an application, package it up, and deploy it.

261
00:15:39,260 --> 00:15:44,160
If you have a lot of pain around that, and you haven't already made a lot of inroads into

262
00:15:44,160 --> 00:15:48,880
solving it using, you know, there's a lot of tools and techniques out there in, like,

263
00:15:49,060 --> 00:15:54,820
SRE and DevOps realms around helping do infrastructures code, config management, stuff like that.

264
00:15:55,320 --> 00:16:00,440
If you haven't yet gotten into those, or you've sort of got to the point where you need even

265
00:16:00,440 --> 00:16:03,740
more efficiency, Kubernetes can help with that.

266
00:16:03,740 --> 00:16:10,560
Because Kubernetes as a platform is kind of almost DevOps aware.

267
00:16:10,840 --> 00:16:12,780
Like, a lot of the things you try and do in DevOps.

268
00:16:12,940 --> 00:16:15,760
It embodies a lot of the patterns and practices you would do.

269
00:16:15,960 --> 00:16:16,820
Such as what?

270
00:16:17,780 --> 00:16:24,560
Such as, like, building, like, small atomic scalable units that are easily deployed, easily

271
00:16:24,560 --> 00:16:34,600
updated, if you're using a Kubernetes deployment, you don't need to, like, write in any, like,

272
00:16:34,800 --> 00:16:36,700
deployment scripting orchestration.

273
00:16:37,380 --> 00:16:41,580
You change the, like, you update your image in the deployment manifest.

274
00:16:42,280 --> 00:16:47,760
And the Kubernetes deployment controller will actually go and perform a rolling upgrade for you.

275
00:16:48,160 --> 00:16:48,500
Oh, yeah.

276
00:16:48,620 --> 00:16:48,760
Okay.

277
00:16:48,920 --> 00:16:49,060
Right.

278
00:16:49,320 --> 00:16:52,000
And so there's a lot of things like that, that it removes the toil.

279
00:16:52,380 --> 00:16:55,980
And so if you don't already have good practices and automation around that stuff, you can kind

280
00:16:55,980 --> 00:17:02,380
of get that stuff without the, like, the heavy amount of pain you would have gone through

281
00:17:02,380 --> 00:17:03,520
before we had some Kubernetes.

282
00:17:03,820 --> 00:17:04,060
Okay.

283
00:17:04,340 --> 00:17:04,920
That makes sense.

284
00:17:05,160 --> 00:17:10,020
Hence, you're wondering, for part three, I think you said, of your thing, like, if I update

285
00:17:10,020 --> 00:17:14,560
my properties, how does that, like, kick into the thing of, like, doing an upgrade of everything?

286
00:17:15,100 --> 00:17:15,460
Exactly.

287
00:17:15,620 --> 00:17:15,820
Yeah.

288
00:17:15,920 --> 00:17:20,480
Because I want to look at, like, we can run a Spring app in Kubernetes quite easily.

289
00:17:20,480 --> 00:17:23,460
But what's an actual, like, production Spring app?

290
00:17:23,560 --> 00:17:23,800
Yeah.

291
00:17:23,900 --> 00:17:28,260
So I'm, like, I have to be, like, it has to respond to changes.

292
00:17:28,480 --> 00:17:29,620
It has to be upgradable.

293
00:17:30,040 --> 00:17:30,800
It has to be monitored.

294
00:17:31,040 --> 00:17:31,860
It has to have logging.

295
00:17:32,720 --> 00:17:35,500
There's this new movement around, like, observability and tracing.

296
00:17:35,740 --> 00:17:36,960
So I should probably have some of that.

297
00:17:37,160 --> 00:17:37,340
Right.

298
00:17:37,340 --> 00:17:41,760
So, like, what is all this stuff I should have to have what would be really considered,

299
00:17:41,940 --> 00:17:45,280
like, a production-grade Spring app?

300
00:17:45,720 --> 00:17:48,680
And then what are the things that it gives me?

301
00:17:49,760 --> 00:17:51,080
And then also, what are the drawbacks?

302
00:17:51,220 --> 00:17:53,960
Like, what are the things that, like, every platform has drawbacks.

303
00:17:54,040 --> 00:17:56,700
So what are the things I'm going to have to figure out how to work around?

304
00:17:57,560 --> 00:18:01,960
And so that's kind of the, that's where I'm trying to get to is slowly build my way up

305
00:18:01,960 --> 00:18:06,820
to, okay, now I fully understand how to run a Spring app in Kubernetes.

306
00:18:07,340 --> 00:18:13,300
You know, as a, coming from an ops background, a lot of the way, like, you kind of have to

307
00:18:13,300 --> 00:18:17,480
think, like, the thing you are deploying or the thing you're deploying to, to be able

308
00:18:17,480 --> 00:18:19,500
to really deploy it in a production way, right?

309
00:18:19,760 --> 00:18:20,640
Oh, yeah, yeah, yeah.

310
00:18:20,640 --> 00:18:23,380
And so that's kind of the, I need to really understand.

311
00:18:23,480 --> 00:18:24,500
You have to think like your enemy.

312
00:18:24,680 --> 00:18:25,900
You have to think like your enemy, right?

313
00:18:26,120 --> 00:18:31,440
So I have to really understand how Spring Kubernetes integration works.

314
00:18:31,780 --> 00:18:33,400
I have to really understand how Kubernetes works.

315
00:18:34,440 --> 00:18:35,240
And, yeah, so that's.

316
00:18:35,400 --> 00:18:40,580
And then, so maybe even the simplest thing is like, so then let's say I'm going to upgrade

317
00:18:40,580 --> 00:18:41,960
my pet store upgrade.

318
00:18:42,040 --> 00:18:46,220
I'm going to add a feature where you can, I don't know, in addition to ordering a pet,

319
00:18:46,620 --> 00:18:50,960
you can, it'll also suggest food serving bowls to order with you.

320
00:18:50,960 --> 00:18:52,140
So I have to add some new feature.

321
00:18:52,240 --> 00:18:52,380
Right.

322
00:18:52,660 --> 00:18:52,960
And then.

323
00:18:53,120 --> 00:18:54,240
So like a recommendation engine.

324
00:18:54,400 --> 00:18:55,020
Yeah, yeah, yeah.

325
00:18:55,080 --> 00:18:59,160
And then, so like, how do I, how do you envision that gets updated?

326
00:18:59,920 --> 00:19:00,120
Yeah.

327
00:19:00,140 --> 00:19:00,960
So that's a great question.

328
00:19:00,960 --> 00:19:05,560
So the version of the pet store, cause it's like eight versions of the pet store now is

329
00:19:05,560 --> 00:19:07,420
different versions of Java and Spring.

330
00:19:07,420 --> 00:19:08,560
But there's competition, right?

331
00:19:09,760 --> 00:19:13,200
And so the version I'm using is kind of the basic one where it's kind of a monolith.

332
00:19:14,200 --> 00:19:19,200
And so if you're going to add a new feature to it, you'd probably go down that like a Strangler

333
00:19:19,200 --> 00:19:22,460
pattern where you like add a new feature as a microservice.

334
00:19:22,900 --> 00:19:29,480
And have like a proxy in front that knows how to write route the, the new, the new requests

335
00:19:29,480 --> 00:19:33,200
to the new recommendation engine versus the monolith.

336
00:19:33,460 --> 00:19:33,580
Yeah.

337
00:19:33,700 --> 00:19:33,800
Yeah.

338
00:19:34,800 --> 00:19:39,440
And so you would hopefully have a much smaller app that just does that one thing, looks at

339
00:19:39,440 --> 00:19:44,500
previous purchases, does some, I don't know, machine learning or whatever, whatever it is

340
00:19:44,500 --> 00:19:44,900
they do.

341
00:19:45,040 --> 00:19:45,220
Yeah.

342
00:19:45,660 --> 00:19:48,920
But then, but then how would you like deploy it to the cluster?

343
00:19:48,920 --> 00:19:53,760
And so what I would do then is I would probably have a Helm chart or something like a Helm chart

344
00:19:53,760 --> 00:19:55,120
specific for that app.

345
00:19:55,680 --> 00:19:57,280
And so I would, I would deploy that.

346
00:19:57,560 --> 00:20:02,220
And that Helm chart would be creating a deployment and a service config map, those bits and pieces

347
00:20:02,220 --> 00:20:03,640
for me.

348
00:20:04,360 --> 00:20:12,440
And then obviously I would then need to go back to the old app and provide any integration

349
00:20:12,440 --> 00:20:13,460
points it needs.

350
00:20:13,520 --> 00:20:18,480
Like if it needs to now talk to like a rabbit server to get messages across or whatever.

351
00:20:18,920 --> 00:20:20,140
So get that integration working.

352
00:20:20,360 --> 00:20:24,480
Obviously I'd need to deploy a new version of pet store with the integration points in

353
00:20:24,480 --> 00:20:24,660
it.

354
00:20:25,140 --> 00:20:30,660
And then I would probably need an ingress controller or something over the top, which is the thing

355
00:20:30,660 --> 00:20:34,960
that's going to determine, okay, you're going to like slash recommendation.

356
00:20:34,960 --> 00:20:39,740
So I need to bring, take, bring it to the recommendation API or whatever.

357
00:20:39,840 --> 00:20:40,020
Yeah.

358
00:20:40,120 --> 00:20:40,260
Yeah.

359
00:20:40,260 --> 00:20:42,060
So that the right requests go to the right.

360
00:20:42,240 --> 00:20:48,820
And does Kubernetes help you with like that sort of release thing where like I've got a

361
00:20:48,820 --> 00:20:53,020
new version of this pet store thing and then I need to deploy my recommendation engine.

362
00:20:53,560 --> 00:20:57,600
And I don't know even how you kind of do the topology of that, if that's a word, but

363
00:20:57,600 --> 00:21:00,840
like, is it, is that like one of the patterns that's written into it?

364
00:21:01,500 --> 00:21:01,640
Yeah.

365
00:21:01,700 --> 00:21:08,540
Well, usually you kind of want to consider them to be separate things so that one deployment

366
00:21:08,540 --> 00:21:09,860
doesn't rely on the other deployment.

367
00:21:10,160 --> 00:21:10,360
Right.

368
00:21:10,460 --> 00:21:10,660
Right.

369
00:21:10,940 --> 00:21:12,240
And so the microservices.

370
00:21:12,460 --> 00:21:12,780
Exactly.

371
00:21:12,940 --> 00:21:13,380
Hence the microservices.

372
00:21:13,380 --> 00:21:14,400
That's what that stuff does.

373
00:21:14,540 --> 00:21:14,680
Yeah.

374
00:21:14,680 --> 00:21:21,080
So if I've done my microservices right, if I've done feature flagging right, I shouldn't

375
00:21:21,080 --> 00:21:26,920
need to like deploy both at the same time with some magical sequence to make it work.

376
00:21:27,120 --> 00:21:27,520
Right.

377
00:21:27,520 --> 00:21:29,720
I should be able to deploy my recommendation engine.

378
00:21:30,280 --> 00:21:32,240
I should be able to validate that it's working.

379
00:21:32,840 --> 00:21:40,240
And then I should be able to either flip the feature flags in the pet store or deploy the

380
00:21:40,240 --> 00:21:44,300
new version of the pet store that has the right bits to then have its side of the integration

381
00:21:44,300 --> 00:21:44,460
store.

382
00:21:44,460 --> 00:21:46,000
Right, right, right, right, right.

383
00:21:46,440 --> 00:21:50,100
And then, and then, so if someone's in the middle of like purchasing something from the

384
00:21:50,100 --> 00:21:51,280
pet store, right.

385
00:21:51,400 --> 00:21:53,960
And then you're going to add this new recommendation engine.

386
00:21:54,140 --> 00:21:54,500
Right.

387
00:21:54,620 --> 00:21:57,040
Like does Kubernetes do that so you don't lose that sale?

388
00:21:58,680 --> 00:21:58,900
Yeah.

389
00:21:59,060 --> 00:22:05,840
So Kubernetes will make sure that the new version of your app is running before it closes down

390
00:22:05,840 --> 00:22:06,580
the old version.

391
00:22:07,740 --> 00:22:07,760
So.

392
00:22:08,100 --> 00:22:08,320
Right.

393
00:22:08,880 --> 00:22:12,320
And then we'll like let someone finish their transaction of buying something or.

394
00:22:13,000 --> 00:22:18,020
That then gets into like how your app and Kubernetes, like how closely they are, how close

395
00:22:18,020 --> 00:22:19,100
they are friend wise, right.

396
00:22:19,380 --> 00:22:19,580
Yeah.

397
00:22:19,580 --> 00:22:24,060
Like if there's a, like Kubernetes should ask your application to shut down gracefully.

398
00:22:24,740 --> 00:22:29,920
And your application should be smart enough to say, hold on, I just got to finish this

399
00:22:29,920 --> 00:22:30,320
thing's purpose.

400
00:22:30,320 --> 00:22:31,500
About to sell 10 pythons.

401
00:22:31,620 --> 00:22:32,140
Right, right.

402
00:22:33,100 --> 00:22:36,660
Finish selling 10 pythons and then close itself down.

403
00:22:36,920 --> 00:22:37,180
Right.

404
00:22:37,360 --> 00:22:41,960
And so assuming that your app will happily gracefully shut down.

405
00:22:42,020 --> 00:22:43,720
And that's kind of still part of microservices, right?

406
00:22:43,760 --> 00:22:44,840
That's part of the 12 factor.

407
00:22:45,040 --> 00:22:45,420
I think so.

408
00:22:45,420 --> 00:22:48,680
There's a whole section on graceful shutdowns and all that sort of stuff.

409
00:22:49,580 --> 00:22:51,260
Um, so assuming that's happening.

410
00:22:51,360 --> 00:22:55,240
And then also assuming if you're doing some sort of session state, if you're saving that

411
00:22:55,240 --> 00:23:02,060
into, uh, our friends, Redis labs or something like that, so that you're not relying on state

412
00:23:02,060 --> 00:23:05,220
on a particular pods, like a hard drive or whatever.

413
00:23:05,400 --> 00:23:05,620
Yeah.

414
00:23:05,680 --> 00:23:05,820
Yeah.

415
00:23:05,820 --> 00:23:10,280
Um, then obviously, and in theory, any of the other pods that should be able to just

416
00:23:10,280 --> 00:23:15,500
take a session because the session is all sitting in some sort of cache or, you know, Redis

417
00:23:15,500 --> 00:23:15,880
or whatever.

418
00:23:16,160 --> 00:23:16,780
Right, right, right.

419
00:23:16,880 --> 00:23:22,900
So, so it seems, it seems like a, a, a best sort of easy scenario is following all the like

420
00:23:22,900 --> 00:23:24,160
stateless 12 factor stuff.

421
00:23:24,160 --> 00:23:27,120
All these processes you're killing never actually hold on to anything.

422
00:23:27,360 --> 00:23:31,380
And instead they refer back to the, you know, the magical data source that handles itself.

423
00:23:31,960 --> 00:23:37,220
Uh, and, and therefore like when you bring down the process that's buying the pythons,

424
00:23:37,380 --> 00:23:41,180
it just comes down and when the new one comes up, it's like, Oh, here's a Python buying thing.

425
00:23:41,200 --> 00:23:42,560
And it just resumes doing that.

426
00:23:42,920 --> 00:23:43,040
Yeah.

427
00:23:43,400 --> 00:23:46,520
And then sometimes it's worth saying, well, you know what, that person will probably

428
00:23:46,520 --> 00:23:49,180
reattempt to buy the 10 pythons if it fails.

429
00:23:49,280 --> 00:23:49,540
Yeah.

430
00:23:50,000 --> 00:23:53,180
You know, I mean, if you wanted 10 pythons, you're probably going to keep doing it.

431
00:23:53,180 --> 00:23:53,340
Right.

432
00:23:53,440 --> 00:23:53,760
Exactly.

433
00:23:54,300 --> 00:23:57,140
Although I don't know how many times have you just been about to buy something and something

434
00:23:57,140 --> 00:24:00,000
happens and then you have to wait five minutes, you know, like that was a bad idea.

435
00:24:00,340 --> 00:24:01,060
That is true.

436
00:24:01,300 --> 00:24:06,680
That is, that's, there is, there is certain, uh, you know, you kind of get the buyer's remorse

437
00:24:06,680 --> 00:24:09,060
flashback before you actually make the buy.

438
00:24:09,300 --> 00:24:09,560
Huh.

439
00:24:09,980 --> 00:24:10,160
Yeah.

440
00:24:10,660 --> 00:24:17,840
Uh, so, so then, uh, why don't you explain before we close out, what's the proper way to

441
00:24:17,840 --> 00:24:19,520
cook a hamburger at home?

442
00:24:19,520 --> 00:24:20,340
Like, how do you do it?

443
00:24:20,420 --> 00:24:23,420
Like, all I know, all I know is you press your thumb in the top of it.

444
00:24:23,840 --> 00:24:26,200
But how do I get, how do you get a restaurant-grade hamburger?

445
00:24:26,600 --> 00:24:30,480
So there's two thoughts on making a hamburger.

446
00:24:30,640 --> 00:24:35,140
You've got your pub-style hamburger, which is a big, thick meat patty, right?

447
00:24:35,300 --> 00:24:35,660
Yeah, yeah.

448
00:24:35,800 --> 00:24:38,840
Uh, and then you've got your fast food hamburger, which is like your smash burger.

449
00:24:39,120 --> 00:24:39,360
Yeah.

450
00:24:39,520 --> 00:24:43,040
Where you're cooking on like a flat surface and you just like smash the hell out of it.

451
00:24:43,460 --> 00:24:49,560
Uh, and I actually prefer the latter, the smash burger style, because you're getting a lot

452
00:24:49,560 --> 00:24:51,240
more surface area attached to that grill.

453
00:24:51,700 --> 00:24:53,760
You've got like pockmarks and stuff.

454
00:24:53,920 --> 00:24:57,020
And so there's going to be a lot more browning and it's going to be a crispy burger.

455
00:24:57,120 --> 00:24:58,000
A crispy burger, delicious.

456
00:24:58,200 --> 00:24:58,800
Like Freddy's.

457
00:24:58,800 --> 00:25:00,380
And if you want, exactly like Freddy's.

458
00:25:00,520 --> 00:25:00,720
Yeah, yeah.

459
00:25:00,840 --> 00:25:06,080
And so if you want a thick burger, then just have, have four smash burgers between the

460
00:25:06,080 --> 00:25:07,100
two pieces of bun, right?

461
00:25:08,480 --> 00:25:13,640
Um, but the thing, the thing that I learned, um, when I, when, when I actually moved to

462
00:25:13,640 --> 00:25:18,160
the U S is that everywhere outside of the U S makes their burgers wrong.

463
00:25:18,520 --> 00:25:21,820
And that is you put a bunch of fillers and other crap in there.

464
00:25:22,000 --> 00:25:27,040
So, you know, you get your ground meat, you'll add like an egg, you'll add breadcrumbs.

465
00:25:27,040 --> 00:25:28,680
Wait, we do that in the U S or?

466
00:25:28,780 --> 00:25:29,600
No, outside of the U S.

467
00:25:29,600 --> 00:25:30,640
This is outside of the U S.

468
00:25:30,640 --> 00:25:30,860
Okay.

469
00:25:30,860 --> 00:25:31,080
Okay.

470
00:25:31,180 --> 00:25:36,060
And you basically end up with something that's more of a, like a meatloaf than it is a burger.

471
00:25:36,340 --> 00:25:36,560
Right.

472
00:25:36,560 --> 00:25:36,800
Right.

473
00:25:36,860 --> 00:25:42,220
Whereas in the U S you just have your ground meat, you kind of form it into shape and then

474
00:25:42,220 --> 00:25:43,980
you season it right before you cook it.

475
00:25:43,980 --> 00:25:44,280
Okay.

476
00:25:44,380 --> 00:25:44,500
Right.

477
00:25:44,500 --> 00:25:49,440
Um, cause even, even mixing salt through, uh, messes with the proteins and kind of, kind

478
00:25:49,440 --> 00:25:52,480
of binds the meat together and gives you that more meatloaf texture.

479
00:25:52,640 --> 00:25:53,040
Okay.

480
00:25:53,100 --> 00:25:59,860
And so either pub style or smash burger style, you, you grind your meat, you know, there's

481
00:25:59,860 --> 00:26:02,180
you want, I think it's 20% fat in your meat.

482
00:26:02,180 --> 00:26:04,180
So there's certain cuts that kind of give you that.

483
00:26:04,780 --> 00:26:06,500
Um, if you can grind it at home.

484
00:26:06,560 --> 00:26:07,100
That's great.

485
00:26:07,520 --> 00:26:09,260
Food processor works well for grinding.

486
00:26:09,500 --> 00:26:14,720
And if you've got a food processor, uh, and then if you're grinding yourself, you're, you

487
00:26:14,720 --> 00:26:19,280
can like, you can cook it like to medium rare and stuff a lot safer than if it's sitting

488
00:26:19,280 --> 00:26:20,160
at the grocery store.

489
00:26:20,160 --> 00:26:22,100
This is the part I always screw up is the cooking part.

490
00:26:22,220 --> 00:26:22,460
Right.

491
00:26:22,520 --> 00:26:24,560
Now there's the tip about only season before you're cooking.

492
00:26:24,640 --> 00:26:25,020
That's good.

493
00:26:25,100 --> 00:26:25,320
Right.

494
00:26:25,500 --> 00:26:28,320
And don't put a bunch of eggs and biscuits in there.

495
00:26:28,440 --> 00:26:32,500
But like, but like, so the cooking, so like, what am I in a medium heat?

496
00:26:32,600 --> 00:26:33,420
What am I doing here?

497
00:26:33,680 --> 00:26:38,700
So I would say start with making smash burgers, right?

498
00:26:38,780 --> 00:26:44,240
Cause you just get your cast iron pan or some sort of flat surface up as hot as you can get.

499
00:26:44,480 --> 00:26:49,620
Uh, you put like the burger patty on there and then you use like a press or a heavy spatula

500
00:26:49,620 --> 00:26:52,260
and you just press it down as hard as you can.

501
00:26:52,580 --> 00:26:52,740
Yeah.

502
00:26:53,020 --> 00:26:53,860
Uh, and what is that?

503
00:26:53,920 --> 00:26:55,300
Like two minutes each side or something?

504
00:26:55,460 --> 00:26:55,960
Yeah, exactly.

505
00:26:56,180 --> 00:26:57,120
Like two minutes each side.

506
00:26:57,220 --> 00:26:57,780
It's like fish.

507
00:26:57,940 --> 00:27:01,900
And it doesn't matter if it's like well done because it's so thin and you just bite through

508
00:27:01,900 --> 00:27:02,260
it anyway.

509
00:27:02,640 --> 00:27:02,680
Right.

510
00:27:02,680 --> 00:27:06,060
But then, but then if I've got one of these stick burgers, how am I going to manage that?

511
00:27:06,980 --> 00:27:10,980
Uh, so, uh, kind of the same way your, your, your thumb trick totally works.

512
00:27:11,220 --> 00:27:16,240
Um, you know, as it cooks, it will actually kind of shrink in and swell up.

513
00:27:16,240 --> 00:27:18,180
So it'll become like, right.

514
00:27:18,260 --> 00:27:20,060
It's almost like, yeah, it's become taller.

515
00:27:20,440 --> 00:27:24,100
Uh, and so pressing your thumb in can kind of help because it's got to fill in that shape

516
00:27:24,100 --> 00:27:25,000
before it grows taller.

517
00:27:25,000 --> 00:27:25,620
I see.

518
00:27:25,800 --> 00:27:32,100
Um, but really just, I, I like to start on a high heat, uh, get that first side really

519
00:27:32,100 --> 00:27:34,840
going and then turn the heat down when I, when I flip it.

520
00:27:35,080 --> 00:27:35,400
Okay.

521
00:27:35,560 --> 00:27:37,200
Um, but you know, it's hard to go wrong.

522
00:27:37,300 --> 00:27:41,800
I always like to use a flat surface rather than a like grill because you want as much

523
00:27:41,800 --> 00:27:43,920
of that meat round as possible.

524
00:27:44,160 --> 00:27:44,740
You like a crispy burger.

525
00:27:44,780 --> 00:27:45,220
You want a crispy.

526
00:27:45,440 --> 00:27:45,580
Yeah.

527
00:27:45,720 --> 00:27:47,240
And so the browning is the flavor.

528
00:27:47,820 --> 00:27:48,080
Yeah.

529
00:27:48,340 --> 00:27:49,080
Well, that's very helpful.

530
00:27:49,080 --> 00:27:55,600
So, so deploy your pet shop and then, uh, get your configuration flat surface for a burger.

531
00:27:55,660 --> 00:27:56,600
Light surface for a burger.

532
00:27:56,780 --> 00:27:57,040
Okay.

533
00:27:57,120 --> 00:27:57,520
That's good.

534
00:27:57,600 --> 00:27:57,780
All right.

535
00:27:57,800 --> 00:27:58,280
Well, thanks.

536
00:27:58,580 --> 00:28:01,580
Thank you for being where you had a Twitter handle or something.

537
00:28:01,680 --> 00:28:03,280
I do have a Twitter handle handle.

538
00:28:03,480 --> 00:28:07,540
It is at Pete Tchaikovsky, which is, uh, I don't know.

539
00:28:07,540 --> 00:28:08,980
You can put it in the, in the show notes.

540
00:28:09,040 --> 00:28:10,020
It's hard to, hard to spell.

541
00:28:10,360 --> 00:28:12,600
I don't know why I've got a stupid hard to spell name, but I do.

542
00:28:12,760 --> 00:28:13,880
So I blame my parents.

543
00:28:15,260 --> 00:28:15,580
Exactly.

544
00:28:15,900 --> 00:28:16,240
All right.

545
00:28:16,260 --> 00:28:17,580
Well, uh, thanks for listening.

546
00:28:17,960 --> 00:28:18,460
Bye bye.

547
00:28:18,460 --> 00:28:18,920
Bye bye.
