{"id":6219,"date":"2019-07-23T11:18:25","date_gmt":"2019-07-23T11:18:25","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=6219"},"modified":"2021-11-16T11:16:03","modified_gmt":"2021-11-16T11:16:03","slug":"working-with-multiple-virtual-kubernetes-clusters-aka-namespaces","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/working-with-multiple-virtual-kubernetes-clusters-aka-namespaces\/","title":{"rendered":"Working with multiple virtual Kubernetes clusters aka Namespaces"},"content":{"rendered":"\n<p>Kubernetes supports multiple virtual clusters backed by the same physical cluster. These virtual clusters are called namespaces.<\/p>\n\n\n\n<p>Namespaces ca be used in multiple environment with many users spread across multiple teams, or projects. Names of resources need to be unique within a namespace, but not across namespaces. <\/p>\n\n\n\n<p>Namespaces are a way to divide cluster resources between multiple users (via resource quota).<\/p>\n\n\n\n<p><strong>Viewing namespaces<\/strong><\/p>\n\n\n\n<p>$ kubectl get namespace<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"127\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/07\/kubernetes-namespaces-1024x127.jpg\" alt=\"\" class=\"wp-image-6223\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/07\/kubernetes-namespaces-1024x127.jpg 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/07\/kubernetes-namespaces-300x37.jpg 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/07\/kubernetes-namespaces-768x95.jpg 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/07\/kubernetes-namespaces-660x82.jpg 660w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/07\/kubernetes-namespaces.jpg 1112w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Setting the namespace preference in kubectl config file<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">$ kubectl config set-context --current --namespace=<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">insert-namespace-name-here<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Validate it<\/strong><\/p>\n\n\n\n<p>$ kubectl config view | grep namespace:<\/p>\n\n\n\n<p><strong>Creating namespaces using Command line<\/strong><\/p>\n\n\n\n<p>$ kubectl create ns dev<\/p>\n\n\n\n<p><strong>Creating namespaces using Yaml<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">apiVersion<\/span>: <span class=\"hljs-selector-tag\">v1<\/span>\n<span class=\"hljs-selector-tag\">kind<\/span>: <span class=\"hljs-selector-tag\">Namespace<\/span>\n<span class=\"hljs-selector-tag\">metadata<\/span>:\n  <span class=\"hljs-selector-tag\">name<\/span>: \"<span class=\"hljs-selector-tag\">development<\/span>\"\n  <span class=\"hljs-selector-tag\">labels<\/span>:\n    <span class=\"hljs-selector-tag\">name<\/span>: \"<span class=\"hljs-selector-tag\">development<\/span>\"\n\n# <span class=\"hljs-selector-tag\">kubectl<\/span> <span class=\"hljs-selector-tag\">apply<\/span> <span class=\"hljs-selector-tag\">-f<\/span> <span class=\"hljs-selector-tag\">test<\/span><span class=\"hljs-selector-class\">.yaml<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Deleting namespaces<\/strong><\/p>\n\n\n\n<p>$ kubectl delete ns dev<\/p>\n\n\n\n<p><strong>Filtering and Performing Actions by Namespace<\/strong><\/p>\n\n\n\n<p>$ kubectl create deployment &#8211;image nginx demo-nginx &#8211;namespace=demo-namespace<\/p>\n\n\n\n<p><strong>Interesting facts of Namespaces and DNS<\/strong><\/p>\n\n\n\n<p>When you create a Service, it creates a corresponding DNS entry. This entry is of the form ..svc.cluster.local, which means that if a container just uses , it will resolve to the service which is local to a namespace.<\/p>\n\n\n\n<p>This is useful for using the same configuration across multiple namespaces such as Development, Staging and Production. If you want to reach across namespaces, you need to use the fully qualified domain name (FQDN).<\/p>\n\n\n\n<p><strong>Not All Objects are in a Namespace<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>In a namespace<br> $ kubectl api-resources &#8211;namespaced=true<br> Not in a namespace<br> $ kubectl api-resources &#8211;namespaced=false<\/p><\/blockquote>\n\n\n\n<p><strong>Creating namespaces and ResourceQuota using Yaml<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">apiVersion: v1\n<span class=\"hljs-attr\">kind<\/span>: Namespace\n<span class=\"hljs-attr\">metadata<\/span>:\n  name: myspace\n---\n\napiVersion: v1\n<span class=\"hljs-attr\">kind<\/span>: ResourceQuota\n<span class=\"hljs-attr\">metadata<\/span>:\n  name: compute-quota\n  <span class=\"hljs-attr\">namespace<\/span>: myspace\n<span class=\"hljs-attr\">spec<\/span>:\n  hard:\n    requests.cpu: <span class=\"hljs-string\">\"1\"<\/span>\n    requests.memory: <span class=\"hljs-number\">1<\/span>Gi\n    limits.cpu: <span class=\"hljs-string\">\"2\"<\/span>\n    limits.memory: <span class=\"hljs-number\">2<\/span>Gi\n---\n\napiVersion: v1\n<span class=\"hljs-attr\">kind<\/span>: ResourceQuota\n<span class=\"hljs-attr\">metadata<\/span>:\n  name: object-quota\n  <span class=\"hljs-attr\">namespace<\/span>: myspace\n<span class=\"hljs-attr\">spec<\/span>:\n  hard:\n    configmaps: <span class=\"hljs-string\">\"10\"<\/span>\n    <span class=\"hljs-attr\">persistentvolumeclaims<\/span>: <span class=\"hljs-string\">\"4\"<\/span>\n    <span class=\"hljs-attr\">replicationcontrollers<\/span>: <span class=\"hljs-string\">\"20\"<\/span>\n    <span class=\"hljs-attr\">secrets<\/span>: <span class=\"hljs-string\">\"10\"<\/span>\n    <span class=\"hljs-attr\">services<\/span>: <span class=\"hljs-string\">\"10\"<\/span>\n    services.loadbalancers: <span class=\"hljs-string\">\"2\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_39682\"><iframe loading=\"lazy\"  id=\"_ytid_81615\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_39682\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Kubernetes supports multiple virtual clusters backed by the same physical cluster. These virtual clusters are called namespaces. Namespaces ca be used in multiple environment with many users spread across multiple&#8230; <\/p>\n","protected":false},"author":1,"featured_media":7747,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[4859],"tags":[5530,5449,4860,3618,5531,5229],"class_list":["post-6219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kubernetes","tag-clusters","tag-devopsschool","tag-kubernetes","tag-multiple","tag-namespace","tag-virtual"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=6219"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6219\/revisions"}],"predecessor-version":[{"id":25491,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6219\/revisions\/25491"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/7747"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=6219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=6219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=6219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}