Exercise 9.4 - some confusing things?
Going through the exercise aforementioned, I see some rather confusing conclusions being drawn and I'm not sure if I misunderstand something myself or the wording is not very accurate.
Namely:
Step 27 says "As we were able to deploy more pods even with apparent hard quota set..." which seems to imply that the quota isn't being respected during pod deployment.
However, isn't the quota actually supposed to enforce the restrictions during PVC creation (i.e. earlier than pod deployment)?
Why would the quota be considered "apparent" here?
In this exercise:
1. At step 18 the PV was created at 1GiB capacity.
2. At step 21 the PVC was created with a claim of 200MiB.
3. Then at steps 22-23 the quota of 500 MiB is removed and a new one of 100 MiB is added.
4. Then at step 25 we recreate the deployment. However, at this stage the PVC was already created and bound before the smaller quota was enforced. Wasn't it? At this point, diverging from the lab path a bit, I deleted and recreated the PV and PVC inside small namespace, and I got the expected (by me) error:
$ kubectl -n small create -f pvc.yaml Error from server (Forbidden): error when creating "pvc.yaml": persistentvolumeclaims "pvc-one" is forbidden: exceeded quota: storagequota, requested: requests.storage=200Mi, used: requests.storage=0, limited: requests.storage=100Mi
So the quota seems to not be "apparent" but rather enforced only on newly created PVCs in the namespace and not retroactive (not sure if it being retroactive is an expected behavior).
5. Then step 34 goes ahead and says "The quota only takes effect if there is also a resource limit in effect" but the result above seems to disprove that.
6. To confirm that, after step 38 I went a bit off-track and didn't delete immediately the PV and PVC but instead reduced again the storage quota to 100 MiB and re-deployed again the nfs-pod.yaml and it again deployed without any issues (as I expected, since the PVC was already created and bound).
If anything, the only conclusion that I could summarize, related to this particular aspect of the quota enforcing, wasn't at all that if LimitRange is missing the hard quotas are "apparent" or not respected but rather that: storage quotas don't apply retroactively on PVCs that were already existing when the quota was applied/enforced.
Not sure if I am missing something very obvious here or this exercise need some amending as far as some of its stated conclusions go.
I just thought that I'd put this out there, since for newbies trying to burn in our memory the right concepts, the last thing we need is a wrong one in the mix.
So, maybe someone can confirm or dispell my deductions.
Best regards,
Adrian
Comments
-
Hi @admusin,
When in doubt about certain topics I highly recommend inspecting the official Kubernetes documentation to clarify any apparent ambiguity in the lab guide.
However, you are correct in your findings that the quota does not impact existing resources, it impacts any resource created after the quota was put in place.
Keep in mind however the clear distinction between the
ResourceQuotaand theLimitRange. TheResourceQuotahelps to limit combined resource consumption by all applications in a Namespace, while theLimitRangehelps to set and control per Pod resource constraints in the Namespace.Regards,
-Chris0 -
Hi Chris,
Thanks for confirming this and for the elaboration on the distinction between the two resources.
Best regards,
Adrian0 -
Hi!
Sorry for returning to older discussion but it helped me. I got same results.Also one note about step 34 as it says "The quota only takes effect if there is also a resource limit in effect". Both absence and presence of LimitRange object are makes no sense here as I can understand. All steps works as expected even if I don't create LimitRange.
I guess author refers to particular case when ResourceQuota limit cpu/ram. It this case LimitRange helps to start a pod without limits/requests in its spec setting it to some default value (https://kubernetes.io/docs/concepts/policy/resource-quotas/). But this string in step makes me confused and may be misleading.0 -
Hi @lioneyes,
For clarification:
In a Pod's
spec, the containerresourcesdefine resource constraints only for the container they belong to - meaning that if three distinct container images are declared by a podspec, with only the second container havingresources.requestsand/orresources.limitsdeclared, these constraints only apply to the second container. A feature that is currently alpha, will eventually allow declaring these resource constraints for the entire pod.The
LimitRangeis a policy that sets resource requests and limits to all pods or containers in a namespace. TheLimitRangeextends beyond theresourcesdefinition. It also defines default constraints that apply to all pod containers launched in the namespace without explicitresources.requestsand/orresources.limitsdefined. TheLimitRangealso validates the explicitresourcesof a pod spec, and prevents the launching of the pod if any violations are found.The
ResourceQuotasets hard limits on the combined resource of the namespace, that applies to all applications launched in the namespace. TheResourceQuotasystem is effective when either individual podresourcesare defined, orLimitRangesare in place to enforce defaults.Regards,
-Chris0
Categories
- All Categories
- 177 LFX Mentorship
- 177 LFX Mentorship: Linux Kernel
- 750 Linux Foundation IT Professional Programs
- 373 Cloud Engineer IT Professional Program
- 169 Advanced Cloud Engineer IT Professional Program
- 74 DevOps IT Professional Program - Discontinued
- 4 DevOps & GitOps IT Professional Program
- 99 Cloud Native Developer IT Professional Program
- 7.6K Training Courses & Learning Paths
- 1 AI & ML Training
- 1 Blockchain & Decentralized Identity Training
- 3 Cloud & Containers Training
- 1 Cybersecurity Training
- 2 DevOps & Site-Reliability Training
- 1 Linux Kernel Development Training
- 1 Networking Training
- 1 Open Source Best Practice Training
- 1 System Administration Training
- 1 System Engineering Training
- 1 Web & Application Development Training
- 792 Hardware
- 202 Drivers
- 68 I/O Devices
- 37 Monitors
- 95 Multimedia
- 173 Networking
- 91 Printers & Scanners
- 87 Storage
- 769 Linux Distributions
- 81 Debian
- 68 Fedora
- 22 Linux Mint
- 13 Mageia
- 24 openSUSE
- 150 Red Hat Enterprise
- 31 Slackware
- 13 SUSE Enterprise
- 356 Ubuntu
- 465 Linux System Administration
- 31 Cloud Computing
- 73 Command Line/Scripting
- Github systems admin projects
- 98 Linux Security
- 78 Network Management
- 101 System Management
- 46 Web Management
- 106 Mobile Computing
- 18 Android
- 73 Development
- 1.2K New to Linux
- 1K Getting Started with Linux
- 392 Off Topic
- 121 Introductions
- 181 Small Talk
- 29 Study Material
- 955 Programming and Development
- 310 Kernel Development
- 627 Software Development
- 983 Software
- 375 Applications
- 182 Command Line
- 5 Compiling/Installing
- 68 Games
- 317 Installation
- Archived
- 2 LFD140 Class Forum
Upcoming Training
-
August 20, 2018
Kubernetes Administration (LFS458)
-
August 20, 2018
Linux System Administration (LFS301)
-
August 27, 2018
Open Source Virtualization (LFS462)
-
August 27, 2018
Linux Kernel Debugging and Security (LFD440)