Sometimes, God has to break you before He can bless you. Never underestimate God's ability to make use of a desperate situation. The Scripture is filled with examples of people who sought God in the midst of trying times. Sometimes life will present challenges to you that are beyond your ability to handle. The death of a loved one, a dreaded diagnosis, the addiction of a friend, an unexpected financial calamity, no one is exempt from trials. God uses hardships to draw people closer to Him. In fact, desperation is a part of my testimony. God used desperation to free me from religion and bring me to life in the Spirit. No doubt, in desperate times, one should call upon God. Biblically speaking, desperation definitely has its place. So not all desperation is a bad thing. But to be honest with you, I believe that desperation is overrated. And its place is all too often misunderstood. While we should call upon God when we face hardships, and while God will use tough consequences to bring forth repentance, desperation should neither be the persistent posture nor the lifestyle of the Spirit-filled believer. We must have believed the idea that we have to plead and press in order to invoke a response from God. In the first place, none of us are so persuasive as to be able to convince God to do anything. Here's the reality. Our persistence doesn't move God. He's unmovable. Rather, our persistence positions us to receive. And it's not as though God is looking down from heaven withholding His presence and power from us, waiting for us to become desperate enough in order for Him to move. Oh, if only you had shouted louder. If only you had jumped up and down during the song service. If only you had cried out for five minutes longer, I would have heard you. I would have responded. Sadly, some Christian leaders push this idea of a desperate lifestyle either by sincere mistake or out of a need to hype an atmosphere. Perhaps some even want to create a desperation culture so that it appears that the people are responding more to their gift, to their preaching, or to their worship leading. Whatever the reason, it must be noted that the believer doesn't have to beg for an audience with God. I imagine the conversation between the believer and God sometimes goes something like this. Father, do you hear me? Yes, I hear you. Father, please listen to me. I'm listening. God, please don't ignore me.  You don't need to beg for God's presence when He lives in you. You don't need to plead to be heard when He's already listening. You don't need to cry out for something that's already been given to you. Believer, you're already one with God. But the person who is joined to the Lord is one spirit with Him. Let's first create the chapter 6 verse 17. Imagine how much time you could save in prayer if instead of begging God to hear you, you simply believe that He already does. Could it be that the reason we're so often desperate for God is because we've not been connecting with God daily as we should?  If I skip too many meals, I become starving. Spiritually hungry? Yes. Spiritually starving? No. Desire God? Yes. Desperate for God? No. Our pleading is too loud. Servants beg. Strangers beg. Sons come boldly with faith. Desperation is a great initiator, but a terrible sustainer. Desperation initiates, but only faith sustains. Desperation is what brings me to the Lord. But once I have Him, why would I ever be desperate for His presence again? You don't enter the glory through noisy desperation. You enter through faith-filled confidence. Confident faith, not desperation, is the way to know the presence of the Holy Spirit. There's no need for you to punish or exhaust yourself. Just come boldly through faith. And we are confident that He hears us whenever we ask for anything that pleases Him. 1 John 5 verse 14, I don't pray to connect with God. I pray from connection with God. I don't worship to connect with God. I worship from connection with God. I'm David Diga Hernandez, and that is your Moment of Truth. For more free teachings like this, make sure you're signed up to my emailing list so that I can send you weekly emails with content that will help you to grow spiritually. Go to DavidHernandezMinistries.com slash email. Thank you for watching EncounterTV. Don't forget to subscribe and click the notification bell. Also, help us spread the gospel of Jesus Christ in the power of the Holy Spirit. Make a one-time donation or become a monthly supporter by clicking on the donate link now.


Hey everyone, welcome to Nintendo Prime and hold on, doesn't quite match, doesn't feel right here. That feels better. So today we're going to be talking about EA and you know when EA is coming up, it's probably not going to end up being a super positive conversation, but it actually brings up a frustrating thing I want to talk about based on some recent news. So you can kind of consider this maybe a bit more of a rant than a news video. In fact, I might label this as a discussion video instead of news, even though it's about a piece of news. And I'm going to try to be completely frank with you guys and honest about why I care about something like this. And it's going to come down to an initial conversation we're going to have about why I'm not upset that you guys don't know everything. I don't know everything either. But before we get to that, hey, editor. Yo, yo, yo, yo, editor. I don't know where Steve went. Dude, roll the intro. Roll. All right, now before we get into the more serious parts of this video, I got to show you guys something. You see this? This is a Game Boy display that we are actually giving away right now. It has a retail value of about $300, which is pretty insane. But we're actually giving away not this one. I actually have a second one still in the packaging here. Ah, yes. There's the good old packaging for you. Anyways, you can go down into the pinned comment or description to enter. And yeah, the only real requirement is that I ask you to subscribe to the channel because it is a giveaway for our subscribers. But yeah, go check out that link in the description of the pinned comment. And it's really cool. I mean, it's Tetris. That's Tetris. This is the LCD board. This is where like the game cart would get plugged in. Pretty cool. I try not to blame people for the things that they don't know. It's not usually because people don't want to know. I mean, sometimes it is. But oftentimes, there are things you wish you knew.  And I do actually know all the news that it currently exists out there. Example, I know there's some sort of Star Fox rumor out there. I just don't find the rumor to be credible. So we're not covering it. But I know about all the stories that exist out there because I make the time to make myself knowledgeable. Unfortunately, not everyone has that time. That's why you rely on content creators and others to deliver the news to you because you just don't have the time to know what you would like to know all the time. And I understand it takes hours and hours of my day and people don't have that. They want to, you know, concise down into videos in smaller bits or in headlines. So I get it. And there's other times like, hey, you might want to know all of the history and lore of the Legend of Zelda franchise, but it requires you playing all the games, but not just playing all the games, reading manuals. It also requires you diving into several books like Hyrule Historia, getting into the manga. There's a lot to dive into and it's unrealistic for me to expect people to have all of that knowledge. And there are people that have more of it than I do, but it's unrealistic for me to expect it because we all have different lives and different circumstances that are going to determine how much time we can dedicate to these things we would just like to know, but maybe don't. And I bring this up because one thing a lot of people on this channel don't know is that I actually really enjoy sports games, right? The Maddens of the world, the FIFA's of the world, the NHL hockey games of the world, the UFC fighting games, sometimes the occasional WWE game, although those haven't been good in a while. NBA 2K. I really enjoy these in PGA Tour. Like, I don't play all of them every year. I don't even play most of them every year, but I really enjoy sports games. And part of this is because I'm a big sports fan. I love watching NFL. I love playing football. I love watching basketball and playing basketball. I love a lot of these sports. I played soccer or, you know, as it's called, Nerse World Football. Like, I played this stuff growing up and I really enjoy it. I still enjoy hitting the golf course now and then as well. So these are things that I actively enjoy and because I actively enjoy these aspects, it leads to me really enjoying virtualized simulation versions of those aspects and even the occasional arcade stuff like NFL Blitz or Tenorswitch sports or stuff like that. Like, I end up enjoying those games quite a bit. Mario Strikers as an example. But what we go from that and I know a lot of people find these games to be, especially the simulation ones, to be kind of the scum of the earth because a yearly releases and price gouging. Well, we had an update on FIFA 23 Legacy Edition for Nintendo Switch and this should be the last year that this particular brand can use the word FIFA because EA and FIFA don't have a contract beyond this year. So this is the last year like FIFA 23 is a thing coming out in September. But this is the last year we're going to see that brandy. But here's the actual news. And I want to talk about why this is just extremely frustrating even though it's not technically news. So you can see we're over here on on Nintendo everything. And I apologize that it's not completely centered here versus FIFA 23 Legacy Edition coming to Switch. EA will releasing FIFA 23 Legacy Edition on Switch later this year. The company has confirmed this marks the fourth consecutive year that Nintendo Switch console is receiving a legacy edition of the sports franchise. I'm going to actually argue it's six consecutive years, but we'll get to that in a bit. The game will have updates for kids, clubs, squads in commentary, but not much else will be different just like last year and other years prior. That means if you bought FIFA on Switch previously, FIFA 23 Legacy Edition will largely be the same. EA is trying out some new features with FIFA 23 this year, such as the inclusion of a women's club teams for the first time with Barclays Women's Super League and Division 1 Arkema which are at least confirmed for Switch along with stadiums like Manchester City Academy. The title will also have the men's FIFA World Cup Quatar 2022 and FIFA's Women's World Cup Australia and New Zealand 2023 as post-lodge updates, though those are unlikely for Nintendo's console. Crossplay features are planned as well, but when it comes to Switch they will be unavailable. PS5, PS4, Xbox Series, Xbox One, and Stadia, a streaming platform, will now be shared FUT transfer market pool. However, EA says that Switch won't be included in that and will continue to operate independently. FIFA 23 Legacy Edition for Switch comes out on September 30th 2022. Now we're bringing this up because I am tired of specific companies and today we'll focus on EA. Treating Nintendo platforms like they don't matter. Nintendo Switch is in 100 and what I guess officially 107-108 million homes although we're about to get sales updates on August or early August so basically like a week or two weeks I believe 10 days I don't know August 2nd, August 3rd somewhere in there we're about to get the update that's going to show that Nintendo Switch is probably over 110 million right now and like the over 120 million by the end of this fiscal year probably well over 120 million if we're completely honest maybe 130 but the point I'm trying to mention is that I am so tired of Nintendo Switch being treated as this platform that this sort of treatment's allowed. All FIFA 23 is is a roster update maybe there's a fresh coat of paint on the menu system but otherwise it's a roster update and if we're honest I know they didn't call FIFA a legacy edition all the way back in 2017 but it was it was literally a two to three year old version of FIFA from the Xbox 360 essentially and they never bothered to really update it from there they even pretended for a couple of years that this it's FIFA for Switch it's all the same thing but it wasn't it was never the same game it was not even close they did this by the way on Wii U if you guys remember remember they touted that that that massive partnership between Nintendo and EA and then one of the very first games we got was Madden that year on Wii U which by the way Wii U that particular year was power parity with Xbox 360 and PlayStation 3 the PlayStation 4 and Xbox one didn't exist at that time so the year we got Madden there was no power excuse reason to not to not have a parity version of Madden and despite that what we got for Madden back then I believe it was Madden 13 what we got on Switch was a four year old version of Madden we couldn't even get the current version of Madden because reasons it couldn't even use power as the excuse back then because it wasn't an excuse they just were lazy and didn't care which is ironic because some of the teams that EA did care the need for Speedport we ended up getting on back then for for the Wii U ended up actually being a really well done port so there were some teams that cared the sports teams weren't one of them and EA on the whole has not exactly been a massive supporter of Nintendo Switch this entire time we're six years in Switch is the number one selling platform in the world it's been the number one selling platform in the world almost since it came out there's a couple years where PS4 was number one but for the most part Nintendo Switch has been the number one selling platform in the world for six consecutive years and here we're sitting where we still can't get EA to properly support the platform as an example fine you guys aren't going to care about the sports games so much I get that that's not a huge part of my audience but what about it takes two why don't we have it takes two on Nintendo Switch what's the reason what's the reason we don't have that game on Switch what's the reason EA doesn't deliver a majority of their games on Switch why don't we have the Sims and I don't want to hear that the Sims doesn't make sense when we have 30 plus million in sales of Animal Crossing on Nintendo Switch the Sims makes complete sense and the current version of Sims isn't even new it's older there's no reason that we couldn't have that with a bunch of DLC on Nintendo Switch except that EA just doesn't care EA doesn't think they could sell games on Switch and it's extremely unfortunate but this isn't even this isn't even surprising not just from EA other companies it's rare that we get companies like Bethesda and id software willing to bring over on parody ports of Doom and Wolfenstein like those were amazing when we got Mortal Kombat 11 on on parody port but cross platform like day one it's so rare we get those ports and I understand there is um let's just say a point to be made that switches a significantly weaker platform and it's a much harder to get on parody versions of games I get that and I understand that there will be sacrifices I'm not even asking for things like Madden 23 or yeah be 23 this year to come to Nintendo Switch and actually have cross platform play with the other platforms no that one makes sense because it probably wouldn't be able to run at 60 fps and so you shouldn't really have the cross platform play in that case not that Madden really has cross platform play anyways that's a whole nother thing with EA which I don't know what the hell they're doing with some of these games but why are you continuing to release FIFA and why are you continuing to charge full price for FIFA when it's a roster update every year why don't you just charge for an official a $15 fee for an official roster up even then no one should buy this game if you want to play FIFA 23 go buy FIFA 19 which is the exact same damn game and just go online and download one of the fan made rosters for it because there's absolutely no reason to buy the current one I'm just tired of the switch being treated in this way when nothing really warrants it we could talk about the power all we want but shouldn't game sales matter more and haven't we seen that high quality ports that Nintendo switch do well why do you think we got doom eternal because doom 2016 was a high quality port and it did well now some might be able to go well we got witcher three but then we didn't get cyberpunk well when cyberpunks being taken out and refunded by PlayStation I kind of think that you know it was probably the right decision to not don't worry about having cyberpunk on switch but hey you don't worry I understand we're getting some games you know later no man sky is coming much later than came on other platforms portal collection much later than other platform I get all of that but at least some of these companies are showing that they care when valve who has the steam deck is showing they care more about the Nintendo switch and the potential sales despite having a competing platform than EA does that to me is a problem it's a when Microsoft is allowing Cuphead and Ori that they own the publishing rights to to come to Nintendo switch and PlayStation but we can't get EA and other companies like them to properly support the switch there's no reason we don't have Grand Theft Auto 5 on switch other than they just don't want to do it oh we got the GTA trilogy that's great you know what I mean easier how about Grand Theft Auto 5 that was running on the Xbox 360 oh oh the only care about the online mode okay and the online originally also existed on the Xbox 360 I understand that maybe the card online couldn't work on a 360 whatever whatever you know you also don't get any money by not bringing the game over at all maybe you could have sold a couple million copies and you can't tell me that that's not worthwhile that's not worthwhile to sell a couple million copies of GTA 5 I know people today down in the comment section right now that'll probably say yeah man if they brought GTA 5 over hell I'd even pay full price for it on switch which is insane considering this game came out now two generations ago it's a really old game but this is the way companies still treat Nintendo some of this is Nintendo's fault they created bad blood with third parties back in the 90s okay because they wouldn't let go of some of their draconian practices that were ensuring quality games but also being a little bit too controlling a little bit too controlling things like bayonetta could not exist on a nintendo platform bad things nintendo was too controlling so they needed to let go of some of that grip and they also needed to stop forcing these companies to give such a massive cut to nintendo compared to other companies it was insane so nintendo was a bit draconian it was needed in the 80s because the industry needed order and needed structure but then by the time the industry came around they needed to relax and nintendo did so some of the bad relationships date back to them but we are 20 years away from the 90s 22 years away from the 90s 23 if you want to actually get into 99 we don't need to be worrying about this as much anymore i think that nintendo has been trying to listen a little bit to third parties and i know nintendo is very infocussed so that doesn't help and i understand that companies don't think that they can compete in sales with nintendo stuff you know why don't we have call of duty on switch in any form in any form forget forget modern warfare 2 why don't we have call of duty mobile on switch answer me that it's very confusing that switch despite being the moneymaker that it is the popular platform the platform that doesn't seem to be slow well it technically is slowing down but isn't slowing down at a rate that people expected can't get this support and i don't think that more powerful harbors the answer because when nintendo have more powerful hardware with the gamecube and even the we you for that two year period still wasn't getting that support so fifa 23 today had the same old news that fifa's had for six straight years on switch so it's not really much of a news story to me it's just a constant reminder that some companies treat switch not even like a second-class platform not even like a third-class platform almost like the platform doesn't exist at all and that just bothers me thank you guys so much for tuning in i entertainer robert jess from the center prime hopefully you enjoyed this video and i'll catch you in the next one


Welcome to KubeCon on the last Friday. I hope you guys had a good week. I know I did. It's nice to be in person once again for these talks. So times that I cherish the most is being able to see all you folks and communicate with everybody here at the con. So you're here for KubeKuttle said what? Because we need to interpret sometimes what KubeKuttle is trying to tell us about our applications. My name's Chris, Christopher. I shorten everybody else's name, so I just go by Chris. I'm a senior cloud native engineer at RXM. I'm an instructor and I'm a consultant. So when I'm not in a class with a bunch of students, I'm usually working on a project to help people adopt Kubernetes and cloud native applications and things like that. And I like to talk, so that's why I'm here. And I've done it in the past. So you can check out some of the other talks that I've had the last couple of years here at KubeCon, although it was virtual. OK, so before we get started on interpreting what KubeKuttle is trying to tell us, we need to think about what Kubernetes is doing to deploy our application. And so this is a resource creation flow that shows, often, we're the user here in the upper right-hand corner or upper left. And we're a little bit disconnected from the actual deployed application that happens many steps down in this flow. And so there are some swim lanes that happen here. And so we've delineated those to show that you create the deployment as the user, it's then, or the controller, let's say, it's then the controller's job to actually submit the API requests to create your applications or to create your pods. And then the scheduler has to do its work to make sure that those things get home. And then the KubeLit has to kick in and communicate with the container runtime and actually create containers and have running processes. And in any one of these swim lanes, something may go wrong that you may not anticipate. And you'll need to figure out what's going on. So we're going to look at each one of these swim lanes in turn here. So Kubernetes resources, all of them have things like conditions, phases, states, that some of which are summaries.  Other things are very detailed. And it will give you exactly the message that you need to know about your application and what's happening with it. So they'll all give you some sort of clue to help you with that. When you first learn in Kubernetes, it can be a little bit difficult to know where to look and what to pay attention to. I create a pod or I create a deployment and it says resource created. Oh, cool, everything should be great, right? Well, no, not really. A lot of stuff has to happen in the background before that actually becomes true. And so if you don't know how to dig in and actually find that information, then you're sort of left stranded and wondering why can't I connect to my application? Kubernetes said it was created. So we're going to go through those steps here.  It's always a jumping off point. We get the object to get some sort of summary information and then go from there. We can use modifiers like minus 0, so outputting YAML, outputting JSON, and then getting specific status information using something like status.conditions and extracting the actual message from the condition of the object. And of course, kubectl describe is very helpful as well. So we're going to look at some practical examples. We're going to start with the first top two swim lanes here. So we're going to focus on, as a user, we create the deployment and then what happens, or the controller rather, and then what happens when that controller fails to do what we expect it to do. And so in some cases, we can get some details from a command like kubectl describe. So for deployment, it has some transient states that it will express. So for example, available, this can be a little bit complicated because it requires understanding of the setting which is max unavailable and the other setting which is the minimum ready seconds. So some number of pods has to be available for a certain amount of time based on what was expressed in the deployments, essentially rolling update strategy, which determines whether or not the minimum number of replicas are available to clients. And so this will tell us yes or no. Is the thing actually available to clients? Or are there not enough replicas to make that available? Progressing happens when we have new RSSs. So a new RSS comes around when we have a new deployment or a rolling update. And so in any of those cases, we'll see the progressing status condition show up. Or if we have a scale up or scale down, we're making changes to the existing application. And then that shares a condition replica failure with the replica set. So both deployments and replicasets will express replica failure if they can't create a pod for any sort of reason. Stateful sets and jobs don't have as much detail. So stateful sets have a status.conditions part of their object. But it's not easy to find. And it's not very detailed. So it's just not as good as the deployment when it comes to being clear about what's going on with pods under a stateful set. And then job has one that's very transient. That's whether or not something finished with a zero or non-zero. But if it's still running, it doesn't even present that to you with kubectl, right? So it's not queryable at that point until it does its work. So we're going to look at a practical example of these guys. So I've got a couple of yamls. I'm just going to apply them. And then we're going to see what happens.  And so I'm just going to kubectl get the deployment, the RS, the stateful set. And I'm using the short terms because I'm lazy. And job, right? And so this is kind of our jumping off point, right? I have a couple of deployments. You can see that they're not whole. I've got a stateful set. It too is not whole. It has a lot less information for me to understand why it's not whole. And the same thing with the job, it's not done yet. I don't know if it's in progress or if it can't create a pod or what's going on with it, right? So there's a limited amount of information that gets displayed here. But if we go through each one, we can get a sense of what these different columns mean and how they can help us. So for example, ready, this is important concept in Kubernetes' readiness probes. And so at this point, we don't know if two of our pods have passed their or have not passed their readiness probes or if they just don't exist. So we can look at something like available and up to date to help us with that. So if the pod doesn't exist, it's not going to be up to date. And we don't have a new revision of this deployment, of course, because it's brand new. So we know that we were able to create two pods, but two are missing. We still don't know why. The RS's actually have a little bit better details because they've got the desired versus current and ready. And so now I've broken out a little bit more detail information. We know it's not just that the pods aren't ready, but that they really just haven't been created because the RS has four pods that it wants to create, but only two exist for the one RS. And then this one has zero for whatever reason. Staple set, again, we don't know. They're just zero of three ready. There could be a pod there, but the readiness probe may not have passed. Or again, there's no pod that exists there. So what we need to do is dig deeper and ask these specific controllers about their statuses. So I can do kubectl describe on one of these controllers. So I'll do deploy. And we'll do the dep ex. And so our only condition that shows here available as false means that, again, we don't have enough replicas. So this ties into the max unavailable. This is just the default. So we only have two or four pods. So of course, we've breached this threshold and we're below the max unavailable. And so we expect this to be false. Replica failure is true. Here's our first indication that the controller is failing to create pods because it has this set to true. And it's still trying, of course, because it's under progressing, set as true. But the only event we really get here is that the replica set scaled up to four. So what's going on here? We don't have enough clues. So I need to go to the replica set to really get the information. And of course, I get a huge amount of events. So the replica set, remember, in the flow is the actual controller responsible for creating the pods. So the deployment did what it was supposed to do. It created the replica set. But the replica set is not being able to create the pods because I actually ran this in a namespace that has a quota that would be deliberately violated so we would actually see something that was wrong. So knowing where to look is key to this. If I'm trying to look at my deployment, when what I'm looking for is missing pods, well, the deployment's not responsible for that. It's the RS that's responsible for that. And so if I go directly to the RS, I can see events like this. Now, when I don't have that two-tiered relationship between controllers, of course, I can go directly to the controller like a staple set and get the same message, right, that there's a quota in place that is preventing that as well. And the job's the same way. So if I queried the job, you'd see the quota. Now, there's one that we didn't see that is not part of this quota scenario that I've set up. So I'm just going to list all again. So there's one more deployment here called SAEX that is failing to create one pod. And it looks very similar to the other problems that we're having. Is it a quota issue? They look very similar, right? If we actually look at that, again, deployment's not going to tell me much, right, because it's not what's responsible for creating pods. So just wanted to reiterate that. So what I need to do is go to the RS. So now in this case, it has nothing to do with the quota. This is a failed service account. So the pod spec is relying upon a service account that doesn't exist. Again, I made this scenario artificial just so we could have something to look at in our troubleshooting scenario. But just looking at the get output doesn't give us these details, right? Being able to go into the actual events of the controller and the correct controller will give us the information that we need in that scenario. So going back here, when we look at the deployment stateful set with something like kubectl, get a lot of the issues that we're going to have are going to look identical. And we're going to see later on with some of these other scenarios that they're going to look identical to those scenarios, too. Replica sets give us the best details about things like ready versus current, not matching desired. Pods are going to be missing, right? So I can't query pods that don't exist for their status information. I have to rely on what the controller tells me because I can't query something that hasn't been created yet. And you can actually see the message field that gets populated as a related condition. So those events will populate into the message field of the controller. So common causes here are things like quotas, missing service accounts, as we saw. Now, if your controller can actually create pods, then we're moving down a swim lane. If we see that pods are created, then we need to go and look at pod objects for their status, their phases. And so some of the macro states that exist for pods include things like pending. So this is when the replica set has actually successfully submitted the pod spec to the API. But the pod can actually be created. Remember that pods are represented by the pod sandbox, which is a container. And so the first bullet here that says that the containers have not been created includes that infrastructure container, that pod sandbox container. Running, then, is where we actually have scheduled it to a node, but the containers can be in any state. So they can be restarting. They can be running. They could have gone into a crash. In some cases, we'll get that actually as a message. Succeeded and failed is very straightforward. Zero non-zero exit codes. And then unknown is not something you'll see very frequently, but it's a lot of times deals with the communication between the host where the cubit is running, where that pod is, and it's not updating the status. If we go a little bit deeper, so these come with kubectl get pod. That's, again, a good starting point where we jump off. But if we get something like kubectl describe, we can get Boolean conditions that let us know if something's ready, if the containers have been launched or they have failed to finish via initialized, whether or not all the containers in our pod are actually ready, passing their probes or not, and whether or not it's been scheduled. And this will give us some more details. So if we look at the next swim lane here, there's the scheduler responsible for finding pods that have not been bound to nodes once the controller has submitted them, and then binding them to nodes. And so if we look at some examples, I'll clear my cluster. And I'm going to need to change namespaces so I get out of the quota so we don't deal with that. So we'll switch to a different namespace without a quota. We'll apply a new set of pods here. And I'll just dump everything because what we're going to need to do is look at the pods themselves. So we'll use get all. Now, if we, again, go back to the controllers where we started the first time, these conditions look fairly similar to what we saw when there was a quota problem or a service account problem. So they're not going to be very helpful, right? We have pods, but they're not passing readiness checks. And so that column of readiness includes everything up to the point where that probe passes. So a lot of conditions are trapped. We already saw upstream that other conditions are trapped by that. So we can't really rely on the controllers to give us that information. We need to go directly to the pods in this case. So I can use get on a pod. We'll use the res ex example. And if I go to something like a YAML output, I can see that under the conditions for my pod. I do have a false for the pod scheduled condition. And then I get the actual message as the reason. So this will take the event that traps. The reason why the scheduler couldn't schedule it and inject it so I can extract it directly. So I can actually traverse this output if I wanted to with the JSON path outputter. Go status conditions and extract this message and find that each one of my pods have some sort of scheduling issue. And so if we go through each one, I'll use describe on the other ones, we can see that nodes aren't available because of things like resources or volumes. And because we're dealing with the scheduler and pods, the messages are going to be related to the pods. I didn't even bother going to the controllers because they would just lead me on a wild goose chase. So if I go up one level, let's do describe. They did what it was supposed to do and that's the event that we see. It created the pods that it needed to create. It's just the fact that the scheduler can't reconcile the use of the resources. So going back to the pending symptoms, the controller outputs are going to look identical to what we saw before when the controller was having an issue. But the pods are going to actually exist as opposed to before when pods just didn't exist. It's going to return pending, of course, in this scenario. And then you will see pod schedule is false. As part of its status condition, you can get that message field. But there's not going to be any containers. So the difference between something that you need to troubleshoot at the container level versus the pod level is that essentially, container status will be no, there are no containers because you can't create containers unless the pod has actually been scheduled. So some common causes here, things like insufficient resources, if you don't have enough CPU or memory. Things like node selectors. So if I use a node name, a node selector, an infinity, that would prevent that. And then volumes. These are kind of the primary three things that the scheduler used to schedule a pod. The last one here, priority class preemption, is kind of an advanced use case that I didn't go over here, but can look very similar to the first, which is the insufficient resources, because you'll have a bunch of pods that are running that may be a lower priority class. And so they will then, if a higher priority pod comes along and resources are scarce, those pods will get evicted in favor of one that has a higher priority and needs those resources. In which case, the events you'll see will look like insufficient CPU or insufficient memory, because the new pending pods that got evicted, there are replacements for the old ones that were running at one point. But unless you see that actually happen in sequence, it's hard to tell that it even happened at all, because the new pods have no relationship to the old pods that were actually running. So that can be a tough one to look through. So running. So once we have pods that are actually scheduled and running, we're getting down to the bottom swim lane here. Containers each have their statuses tracked. So this includes in containers. This includes init containers. This also includes ephemeral containers that that's enabled on your particular cluster. Again, you can use things like the container statuses to group this information and look through it. There are three different types, waiting. This is kind of the default state of a container. So anytime it's waiting to actually be created, if it's mounting volumes that config maps or secrets, or if there's a crash loop or an error, it will go into a waiting state. Running is anything that's, of course, got a process. And if there's any hooks that have been specified, then those have completed successfully. So you can determine that. Okay, my hook was ran successfully. And same thing with terminated. If you have a pre-stop hook, you won't see terminated until that completes.  So that sounds pretty straightforward, right? Everything's fine, right? You've got a controller that has created a pod. The scheduler has scheduled to a node. The Kubelet has created the containers. Why are we even talking about this? Right? Everything's just fine, correct? Right, well, if that's the case, then we actually wouldn't be here talking about it. So let's clear our cluster again and we'll apply our new set of pods and see what sort of things we get into. So it's a little bit fast with the get all. We'll run that again. Right, so again, looking at the controllers, right? If we go from the top down that we've done before, they look very similar to other cases, right? It's a hard place to start to debug from. But if we look at the pods directly, we get a little bit more details. We know that they have one, in one case, two containers, but one of them is in peril. So in this case, we get an extra status message. This was not included in the official pod statuses. This is actually to help us. So we know there's something causing an error here, causing a container to fail and get restarted. And so just having a running in that case would be a lot harder to troubleshoot. So there are other cases that we'll look at at the very end of this that help us debug by replacing the macro states of just like pending running with these other detailed status messages. So although we haven't really looked at that yet, there are ways that we can populate the status section and give us more clues when we wanna have a easier time debugging, right? So in this case, I can look at my containers in the container status array. And the easiest way to do that is getting the pod and we'll do the restart pod. And you can see that we've got two containers in here and we've got a restart count of four and a restart count of zero, right? And so this one's not ready and this one's ready. And so we can very easily see that the database here is failing and then we have the message for the waiting state. So that's in the waiting state because it's in the crash loop and the related message right in front of us.  Because it's just a generic message but by leveraging something like minus O YAML with the get, I can relate the actual status message to the container that has the problem, right? And so being able to customize what I see coming back from Kube CTL helps me to debug faster. So I know we're running out of time pretty quickly. Now there's one use case that I wanna point out here. This one seems to be healthy and running just fine. This is an example of a liveness probe and so that's easily determined from just describe. You'll see that as an event. And since we only have one container in there, anyway, you can see that the readiness probe has failed for that one. So easy enough to get from events. But going back here, nothing seems to be wrong with this container, right? It's running, it's ready. The controller is happy. But if I show you where it's running, so it's running on worker one and I go over here and I stop worker one from functioning in my two node cluster. If I continue to get this pod, I know that pod's not running but Kubernetes is telling me that pod is still running because remember in the swim lanes, the agent responsible for reporting these things upstream is the kubelet, I just disabled the kubelet. So I have no indication that this pod is no longer available to clients from this standpoint. But if I again dig in, I can see that the readiness condition has set the false because the node controller found that the heartbeat of the kubelet where this pod was running has decayed long enough to declare it unready. We don't actually know what's wrong with this pod because the kubelet is no longer communicating that but to be safe, we stop sending traffic to it. So this will affect things like end points controller. So this pod would no longer receive traffic from clients but if I go back to my get, still running. So you have to know where to look sometimes. Now at a certain point, this is gonna go to terminating because Kubernetes will eventually give up on the pod or give up on the node and terminate all the pods on that node because the node is not coming back. However, if we just simply bring the node back, kubelet will heartbeat again and then the readiness that we saw in the describe will actually flip back to true and it will continue to receive traffic. So sometimes running doesn't actually mean running. Okay, so turns out all was not well. So some of the symptoms and some of the differences between the symptoms. So again, controllers, not gonna be very helpful. Running is gonna be set on your get pod, ready is not gonna have equal values for your current desired. Schedule will be true because we're past the scheduling swim lane.  And so you can find messages like containers with unready status will give you container names within things like different outputs and the different states of the containers of course will change based on cause. The difference between something like a probe failure and an actual error is that running will be true for a probe failure, ready of course will be false. Something that's crashing will be in a waiting state whereas they'll both share the ready equals false state, right?  Once that timestamp decays about 40 seconds, you'll see a mismatch between ready and available to show up in your cube CTL output, right? Running and ready is gonna be there and that's gonna be completely misleading. So common cause as we saw with this is a node failure, like kubelet is down, can't report in. So what happens when we saw one example of this, right? Error versus crash loop back off. What happens when we have other examples? Clear this cluster again and we'll apply the other, this is Kubernetes helping us. So the status condition of these pods has to do with what errors, right? They're actually in depending state. So if I look for this, if I use this command JSON path where I get the items, so all my pods and I look at the phase of all my pods, they're actually all in a pending state. But Kubernetes is helping us by saying, well, this one which is trying to mount a config map can't get that config map. This one has some sort of problem with an image, right? A mis-type in an image or some other issue. This one is not so clear, just container creating forever. So I actually have to dig in on that one. And now in this case, it's a secret, right? We're trying to mount a secret for the pod, it's not working. So something like where a container gets stuck creating forever, it's got a dependency and that dependency has not been fulfilled. Now in other cases like config maps, better details, right? You can see it just with kubectl get but in this case we have to dig in a little bit more. Okay, so, right? So even though the status.phase is always gonna be one of the standard phases, getting the container status, state.reason is gonna give you more clues as to what's actually happening and Kubernetes helps us by surfacing these types of messages for, and we didn't cover this here because it was in the previous section so that you can help you debug the commonly occurring issues that exist. So now you kinda know what kubectl said. So thank you guys.