Overview

About this video

What You'll Learn

  1. Practice listing and switching three Kubernetes contexts, extracting the current context directly from kubeconfig with shell commands.
  2. Create and verify StatefulSet scaling and Pod scheduling tasks, including unscheduled and normal scheduler cases.
  3. Build PV, PVC, and hostPath workload resources, use kubectl top, and check control-plane components via SSH.

Rawkode tackles the Killer.sh CKA exam simulator live, working through kubectl contexts, scheduling pods onto control plane nodes, scaling StatefulSets, creating PVs and PVCs with hostPath, kubectl top, and manually scheduling pods by stopping the scheduler.

Chapters

Jump to a chapter

  1. 0:00 Holding screen
  2. 1:47 Introduction & Channel Updates
  3. 2:42 CKA Exam Prep with Killer.sh
  4. 3:11 About Killer.sh Simulator
  5. 4:06 Starting the Killer.sh Session
  6. 4:39 Reviewing Simulator Instructions
  7. 5:35 Question 1: List and Display Contexts
  8. 12:40 Reflection on Question 1
  9. 14:03 Question 2: Pod Scheduling on Control Plane Node
  10. 25:14 Question 3: Scale Down Stateful Set
  11. 31:06 Enabling Kubectl Completion
  12. 31:26 Question 5: List and Sort Pods (by age & UID)
  13. 34:09 Question 6: Create PV, PVC, and Deployment with HostPath
  14. 45:16 Question 7: Kubectl Top Commands (for metrics)
  15. 47:08 Question 8: Check Control Plane Components (via SSH)
  16. 50:51 Preparing for Question 9 (Context Switch)
  17. 51:35 Question 9: Manual Pod Scheduling (Stop/Start Scheduler)
  18. 56:01 Discussion: Show Score or Continue?
  19. 57:00 Decision: Show Score & Plan Part 2
  20. 59:08 Reviewing Score & Missed Questions
  21. 1:00:57 Conclusion & Outro
Transcript

Full transcript

Generated from the English captions. Timestamps jump the player to that moment.

Read the full transcript

1:47 Introduction & Channel Updates

1:47 Hello, and welcome to the newly branded Rawkode Academy. This is my first ever video under this new name, and I I hope you're excited to join me on this journey. Remember, if you're not subscribed already, go ahead and do that now. You can click thumbs up on the video, plus helps other people find it. And now you can join for under a dollar as a monthly membership and get access to private livestreams, emojis, although they don't work that great on my software, but we'll fix that. And there'll be courses launching in July. Also, we have a Discord server available at

2:28 Rawkode.chat. If you're watching this live and wanna chat afterwards or you have more questions, that is the best place to do it. If you're not watching live and you still have questions, that is also the best place to do it. Hopefully, we will see you in there soon. Now, today's episode is a little bit different and that, well, it is just me. And we're gonna do some CKA exam preparation. And I was really looking forward to this until I read that it's apparently harder than passing the CK. You see here difficulty. This simulator is more difficult than the real

2:42 CKA Exam Prep with Killer.sh

3:07 certification. So what is this simulator? This is Keller. Sh. This is now something that anyone who purchases an exam from the CNCF will have access to this simulator. I believe they get two runs through the scenarios in order to prepare for setting the actual CTA. So, of course, it makes sense that this would be a little bit more difficult just to give you that extra bit of confidence when you go in for your exam. So that's today's plan. I have already started a a session. In order to do so, if you wanna, you know, do this in your own time,

3:11 About Killer.sh Simulator

3:43 you log in. I authenticated with my Linux foundation account. And then from the dashboard, you can see I've got my active session here and I have another one here. It took around three minutes for the environment to spin up. I haven't looked at anything. I've not even clicked star. I believe I've got thirty six hours from the moment I started the environment to complete it. So we're pretty much just gonna dive straight in and and see how prepared I am. My CKA and my CKAD both expire in a couple of months, so this will be really

4:06 Starting the Killer.sh Session

4:18 good preparation for resetting those exams. So if you're watching, say hello in the comments. It's always good to get a little bit of feedback, especially when I'm sitting here all on my own. And let's get started. Actually, nervous. Alright. Let's see. Zoom. Zoom. Zoom. Zoom. Let's make this really big. Hopefully, that's oh. It's difficult for me to read, but let's see how we get on. Okay. Instructions. You should avoid using the deprecated kubectl commands as these might not work in exam. There are three Kubernetes clusters and eight nodes in total. Cluster one, cluster two, cluster three.

4:39 Reviewing Simulator Instructions

5:04 Got it. I'm only allowed to have one other browser tab open with the Kubernetes documentation. I'm not gonna read the docs. Notes. You have a notepad tool, Just like the exam. And there's a difficulty thing. Alright. Using kubectl from the terminal, you can reach the API servers of all of them. I just need to switch context. Alright. Good. What did I do? Oh, next question. First challenge done. Okay. I have access to multiple clusters from my main terminal. Sure. Kubectl context, right, all of these context names enter this fail. You have access to multiple clusters for your

5:35 Question 1: List and Display Contexts

6:01 main terminal for the kubectl. Alright. Kubectl. Got it. Let's see. Config get contacts. Yep. Write all those context names and to a fail. Alright. One in each lane, comma separated. Do you care? Not sure. Alright. Let's do a head dash m one. It should get rid of the header. No. That's only gonna give me the header. Did I skip a lane? Told tell me I can't remember how to skip a lane. Manhead. Okay. Print the first number of lanes. No. I wanna skip a lane. Skip a lane. Skip a lane. Alright. Who just thought that would get me first?

6:59 Get context. I'm just going to arc open open Print. One. Why have I got a thingy here? Now zero would be the whole lane. One should be the star. Two should be the name. Alright. Write this to op course one context, and I'm gonna cheat because I can't remember how to skip a line on my output. Maybe I could do with less. Of course, one tail. Thanks, Alex. That's always a weird thing. Alright. I think that's good enough. So Alice Bauer says, yeah, should have used tail. Yeah, I can. I could have used tail. It seems obvious now that you've stated

7:53 it. Matt Hawk, I'm a huge Hawk fan. I love using Hawk for pretty much anything on my terminal. Okay, so now we want to write a command to display the current context and here, I would just hit that. Alright, so get context. Correct. Star. Yep. Put it into this other file. Sure thing. I just want a name. Yep. Print to opt course one. Bring up my CLI a bit. No problem, Navin. Thank you. Alright. Context default kubectl dot sh. Oh, wait. It says write a command to display the current context. Alright. So I don't sort of command in

9:03 the file, even though it's dot sh file. Yeah, I want that SH trail to be a command that I could run right. Without the use of kubectl. Really? Okay. Echo all of this. I think that's what it wants. I'm assuming the idea being I could run course one context default. I got the rate. Why did my walk not kick in? Because it was interpolated. There we go. That was funny. Okay. Now I need to do the same, but without using cube control. So I expect what this is trying to confirm is that I know that the config is here.

10:29 That is Yamal. Always grip fail. It has a default context lane if I remember or a current context lane. Correct. Current. Yeah. There we go. So we actually wanna echo this to fail, and I know someone's gonna tell me, you don't need to use cat. Yeah. That's that's gonna bug me, isn't it? So Okay. So we're gonna grab for current here. Okay, so now our arc has to get fancy. And because we do want to print zero all one left hand side, two right hand side, only this time we're gonna need an a field separator.

11:27 I'm getting nested quotes here now. I wonder if I can do it with the, let's try. And I'm gonna have to run this to test before I start echoing it. No. Alright. Okay. Now if this is field separator, go in. There we go. Alright. So now I wanna echo this to that location, escaping these. I don't know if I completely misunderstood this first task. It seems a little weird, but I should be able to run context default null. My awk again. It's a good thing I'm checking my work. Alright. We've got a cube control one, make sure

12:25 that works. It does. And we wrote our context. Not what I was expecting for a first question. I guess it's just trying to clarify, you know, where the cube things is, you know, roughly the format of what, how the context works and how it stores the default. And then I guess there's a little bit of knowledge there to test your cube control. Alex with another great comment in the chat. Cube control get context. No headers. Yeah. There we go. I always forget that's an option. Yeah. I agree, Matt. I'm not entirely sure that it's a great first question,

12:40 Reflection on Question 1

13:18 but Alex, what you're saying to me. Alex is saying, I don't think you did the context one correctly. Since it wants you to know what the options are. No. I think that would be a shitty. I don't think it's anything to do with the options. I I think it's just familiarity with the KubeConfig and enough Linux knowledge to juggle it around. I don't really think it matters how they get to it. Like, knowing that you can do formatting of kubectl, nobody remembers those parameters ever. Everyone's always gonna default. I will speak for myself, not for

13:54 everyone. I'm always gonna default to my Linux tools rather than esoteric flags on kubectl. So I disagree. The outcome is what matters. Okay. I switched context. I create a single pod running this image and the namespace default. The pod should be in pod one, and the container should be named pod one container. This pod should only be scheduled on a control plane node. Do not add any labels. Shortly, write the reason on why the pods are by default not scheduled. Okay. Now, do we have anything well, I'm gonna set my alias. Have anything running to copy.

14:03 Question 2: Pod Scheduling on Control Plane Node

14:42 I always found that it's the best way to get started when I did my CK the first time. Like, nobody expects you to remember a pod spec off the top of your head. I thought the pod's easy enough. We probably could we probably could take that up. But there's already specs here and this is a one to one cluster. Was it? Let's find out. Which means if I do a get pod dash o yaml, there must be a one. No, no, no. There we go. No. Yeah. It's not got all of the verbosity that I just bet. So, okay, cool.

15:24 I didn't see managed fields, which is good. This maybe has a one twenty one cluster. There used to be an export flag, don't think that works anymore. Yeah. That was deprecated, but it would try to remove all of that crap. But you can just say pod dot yaml and then tweak. So you gotta remember to remove metadata that is not particularly important. And I also told us that there should be no labels. Do not add any new labels to the node. Okay. Means I don't need any. The name is supposed to be pod one and the default namespace.

16:03 We don't need that. Containers. Unfortunately, think that's actually the same one, isn't it? Yep. 2, no, almost. 2.40.41DashAlpine. The policy is not important. The pod name was, I want it to be called Pod 1 container. We don't need any mounts if I delete too much. Nope. Where's my relative line numbers? What else do we need? Nothing yet. We will need the toleration, I'm gonna leave them in. And I can't comment about Oh, yeah, can't This is an actual local fail. This is not a cube control edit. I'll never remember the toleration syntax. And we'll delete all of that. Okay.

16:55 This is our polyaml spec. Right now I think it does everything that it has to do here. It wants us to ensure that is only scheduled on a control plane node, which means I need to remember how all of this works, but we can run KGET nodes. Let me shut my phone up. Describe cluster one, master one. And there is label on this, which will say that it is a control plane node, although we could just use a node selector. Maybe that's just easier. We've tried to tolerate the labels, but yeah, we got this here. So we

17:47 can either add a toleration or this load, affinity for this label, but I'm just gonna use the node selector actually. Where was that? What was it? Okay. Cluster one, master one. Okay. In a while. Let's see. Bye. What did I get wrong? Oh, my node selector is wrong. Alright, we are gonna use Kubernetes docs. Node selector. That's what I used. I put it in the wrong place. Alright. Okay. So yeah, it's the node selector and then how to select it. I don't think we need to use affinity here. I'm going to just avoid it. And just need name.

19:16 Let's try. So worst that can happen. Only people are watching me. Alright. Node selector. Well, that pending tells me hasn't worked. Zero free notes are available to pod and tolerate. Okay. It didn't match that. So my selector is wrong. Let's describe this again. That are the key, get nodes, show labels. Okay. What we got? How does this work again? Oh yeah, good show. Rory is saying I can just use node name. Now I'm kinda, I do kinda wanna get it working. So the node selector, and then there's this, is this, this is the key value pair,

20:36 right? Of the labels that were attached because this is adding a label here where this type equals. So I'm assuming, we'll try one more thing and I'll use node name and one US actually set the node name on the pod. I believe the scheduler just ignores it and then the kubelet takes over. So you don't it doesn't get scheduled per se. But that's a good show actually. Okay. So we did have control plane, but it was set to kind of zero. So I'm assuming control dash plane here with an empty file and I can't update pods. Those are immutable.

21:20 See, I've made this take a lot longer now by just avoiding the affinity. I think the affinity would have been a lot quicker, but yeah, okay, that's not working. Delete pod, pod one. Let's modify this one more time. Cluster one. Here we go. So what's the chat saying to me? It was kinda going kinda Alastair saying, hey. If you're telling me to use tents, yeah. I was avoiding that just because I felt like it was too much typing and then it ended up taking myself around on a couple of circles. So suggestion, well, you need a toleration for

22:15 the no schedule. Not if I skipped the scheduler and use node name. Oh, yeah. Actually, I bet my selector was working and I just didn't tell it to tolerate the no schedule. There we go. In fact, there we go. If got comments in the chat. You forgot to add the toleration. Message is quite difficult to read. Let's pop that over there. Let's just remove that. The opacity or transparency. Okay. Let's see. Alright. Yep. The chat corrects me. Yes. You're all correct. Awesome. However, we cheated. Well, it's not cheating. We got the end result. Maybe it's just not the

23:03 way that we're telling us to. And the CK is not, I don't think they check to see how you implemented that. They really just check the results. You use whatever you can. Okay. So switch con it's the same context, but let's type it anyway or copy and paste it anyway. Okay. There are two pods and a namespace project c 13 or o three DB. There are indeed. C 13 management asked, just asked us to scale them down so that we only have one replica. Okay. So the first thing we notice here is the naming convention of the pod.

23:50 It is not a triple with a replica set in the middle like we see here. So this this is the three part triple. Pods are generally like this. This would be the higher level name, probably the deployment. The middle bit is the replica set ID and then this is the pod ID. What we see here is that these are stateful sets because we have numbered ordered pods. Oh, did I miss an action on question two? Did I? Oh, yeah. Sure. Thanks. Good catch. So I'm gonna lie here. The pods weren't scheduled with the affinity or

24:48 selector because the pod wasn't configured to tolerate the taint that control plane nodes have. Not sure how they check that if a human is involved or they just look for the keyword, which is tolerate, but there we go. Okay, so we wanna scale down the stateful set. So if we enter namespace, get STS, You can see it here. Edit o three DB replicas one get pod watch. And we'll wait for that to terminate and we'll move on. I think we're good. More questions like that, please. Okay, same context. I'm not going to copy and paste it again. Do the following,

25:14 Question 3: Scale Down Stateful Set

25:49 do the following and namespace default, create a single pod named ready of service ready with an NGINX image, configure aliveness probe, which simply runs true, configure a readiness probe, which does an HTTP check. Start this pod and confirm it isn't ready because of the readiness probe. Alright. Well, we already got a pod Yamo. What question is this? Let's call it q four. It was naive of me to call it pod.yaml in the first place. Okay. So pod name ready. If service, ready. Default namespace. Doesn't need scheduled. Image nginx one sixteen one dash Alpine. Oh, come on then.

26:46 Let's just call this NGINX. Okay. So we need to add liveness probe command. See if I can remember how to do this. I'm gonna use the docs. So there's two ones that can go here, right? There's http get blah blah blah. And I think it's just exec and then true. We'll make it up there. Okay. Oops. Remember when I said I wasn't gonna use a docs? Well, that was naive to exec command. So close. Alright. And this is just returning true. Okay. And it wanted a readiness probe get URL Copy paste. It's actually telling me to

28:17 use w get. Why? We get Oh, because that's only gonna Of course. Because you can't provide an absolute URL here. It only hits your actual pod. Of course it is. Okay. So I'm feeling to be able to do. Let's do the exact command. This is actually a list. As is this, I'm gonna change syntax just to make it confusing for everyone. W get this. Okay. So start the pod, confirm that it never gets ready because of this command here. Q four. Okay. So that is running, and we should not really see any updates for that to change.

29:21 May have been smart for me to set it then really quickly so we can get through the three adaptations, but I'm pretty confident that is not gonna update because I trust the exam question. Okay. So now we wanna create a second pod called I am ready. Looks like the image is potentially the same. We want to add a label. They already exist in service service. I'm not ready. It should now have that second. Okay. So now we're just checking that we can add a new pod with the right label, which is going to be in the selector

29:49 in our service. We'll call this Q4, Q 4 2. So what was different here? Am I ready? Yes. Am I ready? Some of the default namespace is correct. Image is the same. Labels. That's the labels on that. Yeah, it's just apologies about deployment. Labels ID cross server ready. Doesn't ask for any probes. Running, ready, describe. Let's get the services first. Describe service. I have a quick No. Let's get that enabled next. And we have our endpoint. Looking good. Alright. Source. Control completion bash. Cool. Alright. Like that one. Question five. It says I've got ninety three minutes left.

31:26 Question 5: List and Sort Pods (by age & UID)

31:30 I'm only gonna be streaming for another thirty. So we'll see how far we get through and then I'll try and pick it up again after I've had lunch with my daughter. Okay. Same context. There are various pods in all namespaces. No shit. Write a command into fame pods, which was all the pods sorted by their age. Who remembers this? Alex is gonna give me any trouble if I don't use commands, but more like this through bash and sort and stuff. So first thing we want to do is get all pods wide. Do we even need,

32:14 we get the time already, don't we? Yeah. Okay. Get pods help. Let's do this nice way. So start by I don't think these flags are good for certification. Not that important. Network? Yeah. They're not enough of that coder anymore. Alright. And write the command into a file. Okay. Alt course five. Alright. Right. Second command, which lists all the pods sorted by metadata UID using kubectl sorting for both commands. Okay. So I was actually making sure I used that. So this is find pods UID UID. Thank you. That's my other one. Thomas laugh, nice catch. I forgot the all

33:47 pods in my commands. Alright. Let's run off course five fame pods and find pods, UID. Alright. Maybe I messed something up there. Seems okay. Oh, 8%. Okay. Create a new persistent volume named Safari PV. I should have a capacity of two gigabit access mode to readwrite once host path. Hey. And no storage class name defined. Create a new persistent volume claim to claim the persistent volume. Alright. Let's see if we have any PVs, PVCs. Definitely copy and paste in this at the docs then. Okay. Well, this is question six then q six. I just need to create them.

34:09 Question 6: Create PV, PVC, and Deployment with HostPath

34:54 I don't need to store the YAML anywhere. Yeah. Nice. Okay. So we'll just do this all in a one hour. Q six dot YAML. Copy some YAML. Assistant volume. Show me the ammo. Got one with everything? No. K. One at a time. Messed my Versus Code Editor, which has OO Complete and generation for all of this. Okay. What are we calling this? Safari PV two, read write once. Don't need anything else. Yama multi lane and that we need to claim as such. And we're calling this, oh wait, host path here. I'll fix that in a second.

36:12 Okay. So, oh no, we're in a namespace. Safari PVC namespace. Project Tiger, nice name. Don't define the storage class name. I don't want, don't need volume mode either. And how do we define host path? Just a little path. Okay. PostPath. Volumes. I don't know if that's supposed to be a joke with it slash volumes capital V. Maybe it's like trying to pretend it's a Mac. Never seen that on a Linux system before. Alright. Let's make sure I've not messed this up. So we created a persistent volume called Safari PV. It's got two Gebi bits. Gebi bits.

37:34 We've got a host path of volumes data with an access mode to read write once. We then want a PVC within a namespace, which we've got the same size, same mode, no storage class. Oh, and you want a deployment. Am I gonna type a deployment? Well, guess we're converting a pod to deployment. Okay. Deploy. And we wanna call this Safari and same namespace. Really I should have created some of these first. Yeah, I should be using kubectl explain. Okay. Now we need to convert this pod to deployment. So that goes away. We've got spec template

38:40 spec selector and oh too much. Oh, it's set. TS, let's say you set a tab size. Let me just do this the slow manual way. Why is that x four? X three? So, yeah. It's a small x. Alright. Okay. Image. I don't think care about the names. So let's call this HTTP because it's the image at least at once. That one's HTTP two four four one Alpine. No command. It wants to mount our PV, which would leave a code. This is a host path and it's going to fix that. And we're mounting to temp Safari data.

40:03 Maybe it's a Mac joke. It's called Safari. Alright. This volume is who knows? The fatty PVC. Can't remember if it has claim name or if it's something else. Course, persistent volume claim and then the claim name. Persistent volume claim. This could blow up. I have no idea. Draps. It did blow up. Okay. Converting the channel to JSON line 12. I've got any more than that. I cannot find expected colon. Anchor saying feels good to watch someone else think. Thanks. I'm doing my best. Okay. Debugging at all is not something I want to be doing. Okay. So this, these

41:25 board dashes. I'm on chat. Should be all over that. At least now it's something else, but okay. So it's telling me that my persistent volume and valid type host path volume source got a string expected to map. Okay, what did I get wrong with the host path? Yeah, let's use the explain. So this is our persistent volume spec host path. So we can do k explain PV spec host path and it just expects there to be a path. Easy when you know how. And let's try. Silly apps v one. Alright. I was gonna say better. I mean, that is

42:31 better. I didn't add a selector. Okay. Labels, name Safari, templates back. Selector match labels name, and gonna get something wrong. Name Safari. Quickly. Why is that? Don't have much time. But it's not labels on the top level. Right? Is it? Matadea labels. Select or match labels. Method, oh, got it the wrong way, Kinda. Alright. So this is the selector match labels, templates back, metadata label. Yeah, of course it is. This is the, we applied to pods. Spacing looks wrong. Unknown field metadata. I just looked you up. Template spec. Template spec metadata. Template meta. Yeah. This because

44:12 it's above that. Like, I was actually typing a real pod. Alright. Let's check. This was a namespace, wasn't it? Projects Tiger project. Pvb. Alright. That is perfect. What I'm looking for here is just these status bound. That means they're connected, they're working. What I don't wanna see is I get pods and something set in impending because it can't do anything. All is good running. We can always describe it if we were cautious. Tiger describe pod. We should have auto complete. Nope. And we got our volume. Looks good. Okay. I think that's alright. Okay. So I wonder how many questions there

45:16 Question 7: Kubectl Top Commands (for metrics)

45:19 are. I really should look that up because I'm not sure what I'll get through. Maybe maybe one or two more. K. This is a one percenter, so the matrix server hasn't been installed yet in the cluster, but it's something that should be done soon. Your college would already like to know the kubectl commands too. Show node resource usage. Show pod under container. I mean, that's not gonna work with the metric server. Just want the command. Sure. Why not? Course seven. I don't know if it wants me to install metric server. It just wants the commands. Okay.

46:12 So this will be kubectl top node pod. Don't know if I'm oversimplifying this one. Well, we'll just keep moving. Yeah. But before I get to the end, well, I think I can actually go in the actions here and just say like, you know, get my get my score. So if we don't Woah, there's 25 questions And I've got plenty of time but not actually got plenty of time. So maybe I think if I click show answers and score, I don't think I can come back and do it again, but I do have thirty six hours. So I'm tempted to just, you

46:57 know, do the next question and then maybe just, like, drop out and then do a part two. But I also kinda wanna know if I'm getting shit right. Okay. Let's see. Let's see where we are in five minutes. Okay. So we wanna SSH in to the master why does it keep calling it master control plane node? SSH onto a control plane node with this. Let me send a feedback to update that. Come on. We're past this now. Okay. Check how the control plane components keep ah, see, I love it when I get to deal with the control plane components.

47:08 Question 8: Check Control Plane Components (via SSH)

47:33 I think it'd be, that's a clustered episode right there. Check how the mass control plane components, the kubelet, the API server, the schedule and the cube controller manager and SSE are starting and installed on the control plane node. Also find that name of the DNS application and how it started Awesome. This is just a health check of the components. So what I would expect, in fact, we can check if this is a QVDM cluster, but just really take a look here. And whenever I see admin.conf, usually a really good indicator this is the Kubernetes cluster, which means

48:06 we're gonna have our kubelet started via systemd, which we do. Next we check for the static manifest paths. You can see here, we've got etcd, API server control manager scheduler, scheduler special running. And now we want to, I think what it wants us to do here is to know that we can do admin dot conf as a way to query cluster. We can also do a get system, get pods, and we're looking for the core DNS pod or maybe it's kubed DNS, but I don't know. Yeah. There we go. Core DNS. Okay. Write your findings into this,

48:46 should be structured like so. Let's copy it. So opt course eight master component for text. Alright. So kubelet systemd. Pod? Static pod? Pathway. Read the docs. Not installed. Process. Static pod. Okay. Cool. Static pod. That's pod. That's pod. That's pod. Static pod. And pod coordinates. Even though the pods aren't actually called core DNS, the deployment is. I think that's okay. Root. Help. Opt course. Is it because I'm, does it want me to do it in the SSH or does it want me to do it on my Yeah. Okay. Let's grab my, I think it wants me to come out of the

50:38 SSH course eight master. It should make that more clear. I could trip people up. Next. Okay. So, oh, new context. Not the same context. Hello, new cluster. Okay, Navin says that my kubelet type is not systemd in process. Thank you. I mean, I think I should get extra points for writing systemd, but let's leave it like this. Thank you for that. Good catch. Alright. 9. We've already switched context. We're gonna ask the station to cluster two, cluster one. Temporarily stop the cube scheduler. Alright. Is it a static manifest on this cluster? It is. So temporarily stop the kube scheduler, this means

51:35 Question 9: Manual Pod Scheduling (Stop/Start Scheduler)

51:50 in a way that you can start it again afterwards. So you don't want me to delete the file? This is a pod. There stopped. Create as we should confirm it stopped, really. KubeConfig, Kubernetes, and KubeSystem, pods, and we have the scheduler. Okay. Create a single pod named manual schedule of the image, confirm that it started but not scheduled on any node. And now you're at the scheduler and have all the power manually schedule a pod on that. Okay. So now this is one node name. This is just showing that every put the node name, the scheduler is

52:46 removed from all scheduling decisions, bypasses almost everything and just does its thing. So pod. Yaml. I'm gonna type this. V1. Okay. We'll go type scrappy. Spec. Containers. Name. Image. Actually, t p d. It's gonna bug me. Manage data. Name. Manual. Schedule. Okay. Let's get our kube control. We don't wanna do it in that namespace. Apply our pod.yaml. Can I not even write a pod now? Expect to the map and it got an array. Oh, that's just me being silly. Okay. So we should see that it's pending and unscheduled. Pods are immutable. Can you change the

54:18 I wonder. Not everything's immutable. Most things are immutable. So let's try. Yeah, immutable. So let's delete, apply, get running. Okay. Start the kube scheduler again and confirm. Oh, wait, did I miss a step? No. Okay. Start the schedule again and confirm the scheduler is running and then create a second pod. We call it manual two. Manual schedule without the node name. It should run on a worker because it's been scheduled like a normal pod. Okay. So move here, Play to get pods. Maybe you just have to wait a minute for the scheduler to come on

55:37 and schedule that. There we go. And it should be running on worker. But we can do it. Oh, wait. I'm just gonna affect the Vogue SIM then. Okay. We're just doing all wide and we can see it is on worker one. Okay. Oh, it's a six percenter and I've got a few minutes left. Oh, it's decision time. Create a service account. Again, if I can do it quickly. And I'll just come back to that question. Create daemon set. Create deployment. Yeah, I mean I can do that pretty quickly. Give me something to just create part. A lot of yaml have been

56:01 Discussion: Show Score or Continue?

56:27 somewhere around on this. Okay. You're estimating the thought information about this context. Answer five questions. Yeah. I'm not finding a question. I can do it in a couple of minutes. So I will let the chat decide. Do we want my answers and score or am I coming back to this later with another hour and an attempt to complete the last ten ish questions? Yeah. Sixty eight minutes left. I'm probably a little bit behind where I should be, I think and hope. And it's just because I'm talking about it as I do it and not just heads

57:00 Decision: Show Score & Plan Part 2

57:08 down, but I don't get any strong opinions. Who wants to see my score and who wants me to come back to this later? I will give you thirty seconds. Oh, thank you, Naveen, for becoming a member. Appreciate that, man. Thanks. Alright. Nobody's feeling too chatty. Part two please, Thomas laugh. Alright, you got it. Can I pause this? Or once you start it, you start it. What happens if I just close it? Yeah. Let's let's find out. I I I'll just leave. Listen, I'm worried because there's no explicit pause is that it's just gonna time out.

58:22 Alright. I've got I've already spoken to the team at color shell. I don't know what they call it, color dot sh color dot shell. They've given me credits to stream this. So what I'll do is I will have answers and score, but I will do a full one completely. I'll set aside the full two hours. We'll do it start to finish just because there's no pause. This is gonna time out an error. I don't think coming back is actually gonna work, But I will do this again. Yes. Yes. It just stops the countdown. Yeah. I mean,

59:03 that's what's gonna happen anyway because I don't have time to finish it just now. Where's my score? I got a low score because I never get through all the questions. But scenario one, tick, tick, tick, tick. What? Rats. So why did I get the stateful step one wrong? I didn't maybe I misread a question. I didn't know it wanted a record of the skill then. So I just went into the manifest and edit it to replicas because I'm a bit of a a cowboy that way, I guess. What I should have done was a proper skill down event using

59:08 Reviewing Score & Missed Questions

59:50 dash dash record, which actually adds it to the audit log as a history or an event on the stateful set saying why this was skilled down. You can actually add a message to it. Really good if you're not an amateur like myself. Okay. So yeah, I misread that. That's my fault. And this one, I have no idea scenario four pod one is ready. Did I not wait for it to be ready? Did I get something wrong? I'm not sure, but at least I did get the majority of it correct. QControl top pod. It did work. I ran it. Although we

1:00:26 didn't have a metrics server working. Maybe I wanted it as a plural. I'm not sure why I got that wrong. We got scenario eight correct, which was just understanding control plane components. Scenario nine. Woah, did I miss an entire thing? Alright. Well, I'm unhappy with that. And then I didn't actually get through any of the others. Okay. Well, that was our first attempt at the color shell CTE exam preps. I will set aside a complete two hours at some point this week. So that will be today, tomorrow, or Friday, and we will come back and do this

1:00:57 Conclusion & Outro

1:01:13 from start to finish again, and I will read the questions properly. Stop being an amateur. But thank you for joining me today. I hope this was useful. Feel free to reach out to me on Discord or Twitter. Let me know what else you wanna see. But thank you to the people that joined the academy. It is nice and cheap. Join early, and more content is coming soon. Thanks a lot, everyone. I'll see you soon.

Technologies featured

Meet the Cast

Weekly Cloud Native insights

Stay ahead in cloud native

Tutorials, deep dives, and curated events. No fluff.

Comments, transcript, and resources

More from Rawkode Live

View all 173 episodes
Kubernetes

More about Kubernetes

View all 172 videos