{"id":32928,"date":"2023-02-27T11:42:02","date_gmt":"2023-02-27T11:42:02","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=32928"},"modified":"2023-02-27T11:44:16","modified_gmt":"2023-02-27T11:44:16","slug":"kubrnetes-example-of-storageclass","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/kubrnetes-example-of-storageclass\/","title":{"rendered":"Kubrnetes: Example of StorageClass"},"content":{"rendered":"\n<p>Choose a storage class and set it as your default by setting the storageclass.kubernetes.io\/is-default-class=true annotation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">$ kubectl patch storageclass CUSTOM_STORAGE_CLASS_NAME -p <span class=\"hljs-string\">'{\"metadata\": {\"annotations\":{\"storageclass.kubernetes.io\/is-default-class\":\"true\"}}}'<\/span>\r\n\r\n$ kubectl annotate storageclass CUSTOM_STORAGE_CLASS_NAME storageclass.kubernetes.io\/is-<span class=\"hljs-keyword\">default<\/span>-<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span><\/span>=<span class=\"hljs-literal\">true<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><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\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">apiVersion: storage.k8s.io\/v1\r\n<span class=\"hljs-attr\">kind<\/span>: StorageClass\r\n<span class=\"hljs-attr\">metadata<\/span>:\r\n  name: CUSTOM_STORAGE_CLASS_NAME\r\n<span class=\"hljs-attr\">provisioner<\/span>: kubernetes.io\/aws-ebs\r\n<span class=\"hljs-attr\">reclaimPolicy<\/span>: Retain\r\n<span class=\"hljs-attr\">parameters<\/span>:\r\n  type: gp2\r\n  <span class=\"hljs-attr\">zone<\/span>: <span class=\"hljs-string\">'*AWS_ZONE*'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">kind: StorageClass\r\napiVersion: storage.k8s.io\/v1\r\nmetadata:\r\n  name: gp2\r\n  annotations:\r\n    storageclass.kubernetes.io\/is-default-class: \"true\"\r\nprovisioner: kubernetes.io\/aws-ebs\r\nparameters:\r\n  type: gp2\r\nreclaimPolicy: Retain\r\nmountOptions:\r\n  - debug\r\nallowedTopologies:\r\n- matchLabelExpressions:\r\n  - key: failure-domain.beta.kubernetes.io\/zone\r\n    values:\r\n    - ap-southeast-1a\r\n    - ap-southeast-1b\r\n    - ap-southeast-1c<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\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: storage.k8s.io\/v1\r\n<span class=\"hljs-attr\">kind<\/span>: StorageClass\r\n<span class=\"hljs-attr\">metadata<\/span>:\r\n  name: standard\r\n<span class=\"hljs-attr\">provisioner<\/span>: kubernetes.io\/aws-ebs\r\n<span class=\"hljs-attr\">parameters<\/span>:\r\n  type: gp2\r\n<span class=\"hljs-attr\">reclaimPolicy<\/span>: Retain\r\n<span class=\"hljs-attr\">allowVolumeExpansion<\/span>: <span class=\"hljs-literal\">true<\/span>\r\n<span class=\"hljs-attr\">mountOptions<\/span>:\r\n  - debug\r\n<span class=\"hljs-attr\">volumeBindingMode<\/span>: Immediate<\/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\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">kind: StorageClass\r\napiVersion: storage.k8s.io\/v1\r\nmetadata:\r\n  name: gp2\r\n  annotations:\r\n    storageclass.kubernetes.io\/is-default-class: \"true\"\r\nprovisioner: kubernetes.io\/aws-ebs\r\nparameters:\r\n  type: gp2\r\n  fsType: ext4 <\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Scheduling based on Node label selector<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>The&nbsp;<a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/storage-classes\/#allowed-topologies\" target=\"_blank\" rel=\"noopener\">&#8216;Allowed Topologies&#8217;<\/a>&nbsp;feature allows you select the Nodes where the application Pods may be scheduled based on Node labels.<\/p>\n\n\n\n<p>The nodes which are preferred for scheduling may be labelled using a unique label and key. Multiple such labels and keys per label may be specified. All of the selection criteria is AND-ed.<\/p>\n\n\n\n<p>The following is a sample StorageClass which allows scheduling on nodes with the labels&nbsp;<code>kubernetes.io\/hostname=worker-2<\/code>,&nbsp;<code>kubernetes.io\/hostname=worker-3<\/code>&nbsp;and&nbsp;<code>kubernetes.io\/hostname=worker-5<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">apiVersion: storage.k8s.io\/v1\r\n<span class=\"hljs-attr\">kind<\/span>: StorageClass\r\n<span class=\"hljs-attr\">metadata<\/span>:\r\n  name: custom-hostpath\r\n  <span class=\"hljs-attr\">annotations<\/span>:\r\n    openebs.io\/cas-type: local\r\n    cas.openebs.io\/config: |\r\n      - name: StorageType\r\n        <span class=\"hljs-attr\">value<\/span>: <span class=\"hljs-string\">\"hostpath\"<\/span>\r\n      - name: BasePath\r\n        <span class=\"hljs-attr\">value<\/span>: <span class=\"hljs-string\">\"\/var\/openebs\/local\"<\/span>\r\n<span class=\"hljs-attr\">provisioner<\/span>: openebs.io\/local\r\n<span class=\"hljs-attr\">volumeBindingMode<\/span>: WaitForFirstConsumer\r\n<span class=\"hljs-attr\">allowedTopologies<\/span>:\r\n- matchLabelExpressions:\r\n  - key: kubernetes.io\/hostname\r\n    <span class=\"hljs-attr\">values<\/span>:\r\n    - worker<span class=\"hljs-number\">-2<\/span>\r\n    - worker<span class=\"hljs-number\">-3<\/span>\r\n    - worker<span class=\"hljs-number\">-5<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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>","protected":false},"excerpt":{"rendered":"<p>Choose a storage class and set it as your default by setting the storageclass.kubernetes.io\/is-default-class=true annotation. Scheduling based on Node label selector The&nbsp;&#8216;Allowed Topologies&#8217;&nbsp;feature allows you select the Nodes where the application Pods may be scheduled based on Node labels. The nodes which are preferred for scheduling may be labelled using a unique label and key&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-32928","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/32928","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=32928"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/32928\/revisions"}],"predecessor-version":[{"id":32932,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/32928\/revisions\/32932"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=32928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=32928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=32928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}