1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-06 16:57:10 +00:00
node-feature-discovery/master/usage/custom-resources.html

91 lines
29 KiB
HTML
Raw Normal View History

<!DOCTYPE html> <html lang="en" dir="auto"> <head><meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5, user-scalable=no"> <meta name="description" content="Custom Resources Table of contents NodeFeature NodeFeatureGroup NodeFeatureRule NodeResourceTopology NFD uses some Kubernetes custom resources. Nod..."> <meta name="revised" content=""> <meta name="author" content="Kubernetes SIGs"> <meta name="generator" content="rundocs/jekyll-rtd-theme v2.0.10"><meta name="theme-color" content="#2980b9"> <title>CRDs · Node Feature Discovery</title> <meta name="twitter:title" content="CRDs · Node Feature Discovery"> <meta name="twitter:description" content="Custom Resources Table of contents NodeFeature NodeFeatureGroup NodeFeatureRule NodeResourceTopology NFD uses some Kubernetes custom resources. Nod..."> <meta name="twitter:card" content="summary"> <meta name="twitter:site" content="@Kubernetes SIGs"> <meta name="twitter:url" content="https://kubernetes-sigs.github.com/node-feature-discovery/master/usage/custom-resources.html"> <meta name="twitter:creator" content="@rundocs/jekyll-rtd-theme v2.0.10"> <meta property="og:title" content="CRDs · Node Feature Discovery"> <meta property="og:description" content="Custom Resources Table of contents NodeFeature NodeFeatureGroup NodeFeatureRule NodeResourceTopology NFD uses some Kubernetes custom resources. Nod..."> <meta property="og:locale" content="en"> <meta property="og:url" content="https://kubernetes-sigs.github.com/node-feature-discovery/master/usage/custom-resources.html"> <meta property="og:type" content="article"> <meta property="article:author" content="Kubernetes SIGs"> <meta property="article:published_time" content="2016-07-23T05:07:52+00:00"> <meta property="article:modified_time" content="2024-05-27T07:22:20+00:00"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://kubernetes-sigs.github.com/node-feature-discovery/master/usage/custom-resources.html" }, "headline": "CRDs · Node Feature Discovery", "image": [], "author": { "@type": "Person", "name": "Kubernetes SIGs" }, "datePublished": "2016-07-23T05:07:52+00:00", "dateModified": "2024-05-27T07:22:20+00:00", "publisher": { "@type": "Organization", "name": "Kubernetes SIGs", "logo": { "@type": "ImageObject", "url": "https://avatars.githubusercontent.com/u/36015203?v=4" } }, "description": "Custom Resources Table of contents NodeFeature NodeFeatureGroup NodeFeatureRule NodeResourceTopology NFD uses some Kubernetes custom resources. Nod..." } </script> <link rel="dns-prefetch" href="https://cdn.jsdelivr.net"><link rel="prev" href="https://kubernetes-sigs.github.com/node-feature-discovery/master/usage/nfd-gc.html"><link rel="next" href="https://kubernetes-sigs.github.com/node-feature-discovery/master/usage/customization-guide.html"><link rel="canonical" href="https://kubernetes-sigs.github.com/node-feature-discovery/master/usage/custom-resources.html"><link rel="icon" type="image/svg+xml" href="/node-feature-discovery/master/assets/images/favicon.svg"><link rel="icon" type="image/png" href="/node-feature-discovery/master/assets/images/favicon-16x16.png" sizes="16x16"> <link rel="icon" type="image/png" href="/node-feature-discovery/master/assets/images/favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="/node-feature-discovery/master/assets/images/favicon-96x96.png" sizes="96x96"><link rel="mask-icon" href="/node-feature-discovery/master/assets/images/favicon.svg" color="#2980b9"><link rel="apple-touch-icon" href="/node-feature-discovery/master/assets/images/apple-touch-icon-300x300.jpg"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/rundocs/jekyll-rtd-theme@2.0.10/assets/css/theme.min.css"><style>@media (min-width: 1280px){.content-wrap{max-width:1200px}}</style><script> window.ui = { title: "Node Feature Discovery", baseurl: "/node-feature-discovery/master", i18n: { search_results: "Search Results", search_results_found: "Search finished
<span class="na">kind</span><span class="pi">:</span> <span class="s">NodeFeature</span>
<span class="na">metadata</span><span class="pi">:</span>
<span class="na">labels</span><span class="pi">:</span>
<span class="s">nfd.node.kubernetes.io/node-name</span><span class="pi">:</span> <span class="s">node-1</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">node-1-vendor-features</span>
<span class="na">spec</span><span class="pi">:</span>
<span class="na">features</span><span class="pi">:</span>
<span class="na">instances</span><span class="pi">:</span>
<span class="s">vendor.device</span><span class="pi">:</span>
<span class="na">elements</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">attributes</span><span class="pi">:</span>
<span class="na">model</span><span class="pi">:</span> <span class="s2">"</span><span class="s">xpu-1"</span>
<span class="na">memory</span><span class="pi">:</span> <span class="s2">"</span><span class="s">4000"</span>
<span class="na">type</span><span class="pi">:</span> <span class="s2">"</span><span class="s">fast"</span>
<span class="pi">-</span> <span class="na">attributes</span><span class="pi">:</span>
<span class="na">model</span><span class="pi">:</span> <span class="s2">"</span><span class="s">xpu-2"</span>
<span class="na">memory</span><span class="pi">:</span> <span class="s2">"</span><span class="s">16000"</span>
<span class="na">type</span><span class="pi">:</span> <span class="s2">"</span><span class="s">slow"</span>
<span class="na">labels</span><span class="pi">:</span>
<span class="na">vendor-xpu-present</span><span class="pi">:</span> <span class="s2">"</span><span class="s">true"</span>
</code></pre> </div></div> <h2 id="nodefeaturegroup">NodeFeatureGroup</h2> <p>NodeFeatureGroup is an NFD-specific custom resource that is designed for grouping nodes based on their features. NFD-Master watches for NodeFeatureGroup objects in the cluster and updates the status of the NodeFeatureGroup object with the list of nodes that match the feature group rules. The NodeFeatureGroup rules follow the same syntax as the NodeFeatureRule rules.</p> <div class="language-yaml highlighter-rouge notranslate"><div class="highlight"><pre class="highlight"><code><span class="na">apiVersion</span><span class="pi">:</span> <span class="s">nfd.k8s-sigs.io/v1alpha1</span>
<span class="na">kind</span><span class="pi">:</span> <span class="s">NodeFeatureGroup</span>
<span class="na">metadata</span><span class="pi">:</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">node-feature-group-example</span>
<span class="na">spec</span><span class="pi">:</span>
<span class="na">featureGroupRules</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">node</span><span class="nv"> </span><span class="s">has</span><span class="nv"> </span><span class="s">kernel</span><span class="nv"> </span><span class="s">version</span><span class="nv"> </span><span class="s">discovered"</span>
<span class="na">matchFeatures</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">feature</span><span class="pi">:</span> <span class="s">kernel.version</span>
<span class="na">matchExpressions</span><span class="pi">:</span>
<span class="na">major</span><span class="pi">:</span> <span class="pi">{</span><span class="nv">op</span><span class="pi">:</span> <span class="nv">Exists</span><span class="pi">}</span>
</code></pre> </div></div> <h2 id="nodefeaturerule">NodeFeatureRule</h2> <p>NodeFeatureRule is an NFD-specific custom resource that is designed for rule-based custom labeling of nodes. NFD-Master watches for NodeFeatureRule objects in the cluster and labels nodes according to the rules within. Some use cases are e.g. application specific labeling in a specific environments or being distributed by hardware vendors to create specific labels for their devices.</p> <div class="language-yaml highlighter-rouge notranslate"><div class="highlight"><pre class="highlight"><code><span class="na">apiVersion</span><span class="pi">:</span> <span class="s">nfd.k8s-sigs.io/v1alpha1</span>
<span class="na">kind</span><span class="pi">:</span> <span class="s">NodeFeatureRule</span>
<span class="na">metadata</span><span class="pi">:</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">example-rule</span>
<span class="na">spec</span><span class="pi">:</span>
<span class="na">rules</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">example</span><span class="nv"> </span><span class="s">rule"</span>
<span class="na">labels</span><span class="pi">:</span>
<span class="s2">"</span><span class="s">example-custom-feature"</span><span class="pi">:</span> <span class="s2">"</span><span class="s">true"</span>
<span class="c1"># Label is created if all of the rules below match</span>
<span class="na">matchFeatures</span><span class="pi">:</span>
<span class="c1"># Match if "veth" kernel module is loaded</span>
<span class="pi">-</span> <span class="na">feature</span><span class="pi">:</span> <span class="s">kernel.loadedmodule</span>
<span class="na">matchExpressions</span><span class="pi">:</span>
<span class="na">veth</span><span class="pi">:</span> <span class="pi">{</span><span class="nv">op</span><span class="pi">:</span> <span class="nv">Exists</span><span class="pi">}</span>
<span class="c1"># Match if any PCI device with vendor 8086 exists in the system</span>
<span class="pi">-</span> <span class="na">feature</span><span class="pi">:</span> <span class="s">pci.device</span>
<span class="na">matchExpressions</span><span class="pi">:</span>
<span class="na">vendor</span><span class="pi">:</span> <span class="pi">{</span><span class="nv">op</span><span class="pi">:</span> <span class="nv">In</span><span class="pi">,</span> <span class="nv">value</span><span class="pi">:</span> <span class="pi">[</span><span class="s2">"</span><span class="s">8086"</span><span class="pi">]}</span>
</code></pre> </div></div> <p>See the <a href="/node-feature-discovery/master/usage/customization-guide.html#node-feature-rule-custom-resource">Customization guide</a> for full documentation of the NodeFeatureRule resource and its usage.</p> <p>The <a href="https://github.com/kubernetes-sigs/node-feature-discovery/tree/master/deployment/nodefeaturerule/samples"><code class="language-plaintext highlighter-rouge notranslate">deployment/nodefeaturerule/samples/</code></a> directory contains sample NodeFeatureRule objects that replicate the built-in default feature labels generated by NFD. The sample rules can be used as a base to customize NFD feature labels. To use them in place of the the NFD built-in labels, the corresponding feature source(s) of nfd-worker should be disabled with the <a href="/node-feature-discovery/master/reference/worker-configuration-reference.html#corelabelsources"><code class="language-plaintext highlighter-rouge notranslate">core.labelSources</code></a> configuration option.</p> <h2 id="noderesourcetopology">NodeResourceTopology</h2> <p>When run with NFD-Topology-Updater, NFD creates NodeResourceTopology objects corresponding to node resource hardware topology such as:</p> <div class="language-yaml highlighter-rouge notranslate"><div class="highlight"><pre class="highlight"><code><span class="na">apiVersion</span><span class="pi">:</span> <span class="s">topology.node.k8s.io/v1alpha1</span>
<span class="na">kind</span><span class="pi">:</span> <span class="s">NodeResourceTopology</span>
<span class="na">metadata</span><span class="pi">:</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">node1</span>
<span class="na">topologyPolicies</span><span class="pi">:</span> <span class="pi">[</span><span class="s2">"</span><span class="s">SingleNUMANodeContainerLevel"</span><span class="pi">]</span>
<span class="na">zones</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">node-0</span>
<span class="na">type</span><span class="pi">:</span> <span class="s">Node</span>
<span class="na">resources</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">cpu</span>
<span class="na">capacity</span><span class="pi">:</span> <span class="m">20</span>
<span class="na">allocatable</span><span class="pi">:</span> <span class="m">16</span>
<span class="na">available</span><span class="pi">:</span> <span class="m">10</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">vendor/nic1</span>
<span class="na">capacity</span><span class="pi">:</span> <span class="m">3</span>
<span class="na">allocatable</span><span class="pi">:</span> <span class="m">3</span>
<span class="na">available</span><span class="pi">:</span> <span class="m">3</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">node-1</span>
<span class="na">type</span><span class="pi">:</span> <span class="s">Node</span>
<span class="na">resources</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">cpu</span>
<span class="na">capacity</span><span class="pi">:</span> <span class="m">30</span>
<span class="na">allocatable</span><span class="pi">:</span> <span class="m">30</span>
<span class="na">available</span><span class="pi">:</span> <span class="m">15</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">vendor/nic2</span>
<span class="na">capacity</span><span class="pi">:</span> <span class="m">6</span>
<span class="na">allocatable</span><span class="pi">:</span> <span class="m">6</span>
<span class="na">available</span><span class="pi">:</span> <span class="m">6</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">node-2</span>
<span class="na">type</span><span class="pi">:</span> <span class="s">Node</span>
<span class="na">resources</span><span class="pi">:</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">cpu</span>
<span class="na">capacity</span><span class="pi">:</span> <span class="m">30</span>
<span class="na">allocatable</span><span class="pi">:</span> <span class="m">30</span>
<span class="na">available</span><span class="pi">:</span> <span class="m">15</span>
<span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">vendor/nic1</span>
<span class="na">capacity</span><span class="pi">:</span> <span class="m">3</span>
<span class="na">allocatable</span><span class="pi">:</span> <span class="m">3</span>
<span class="na">available</span><span class="pi">:</span> <span class="m">3</span>
</code></pre> </div></div> <p>The NodeResourceTopology objects created by NFD can be used to gain insight into the allocatable resources along with the granularity of those resources at a per-zone level (represented by node-0 and node-1 in the above example) or can be used by an external entity (e.g. topology-aware scheduler plugin) to take an action based on the gathered information.</p> <!-- Links --> </div> </div> <div class="navigation-bottom d-flex flex-justify-between py-3" role="navigation" aria-label="footer navigation"> <div class="prev"><a href="/node-feature-discovery/master/usage/nfd-gc.html" class="btn" title="NFD-Garbage-Collector" accesskey="p" rel="prev"> <i class="fa fa-arrow-circle-left"></i> Previous </a></div> <div class="next"><a href="/node-feature-discovery/master/usage/customization-guide.html" class="btn" title="Customization guide" accesskey="n" rel="next"> Next <i class="fa fa-arrow-circle-right"></i> </a></div> </div><hr> <div class="copyright text-center text-gray" role="contentinfo"> <i class="fa fa-copyright"></i> <span class="time">2016-2024,</span> <a class="text-gray" href="https://github.com/kubernetes-sigs" rel="noreferrer" target="_blank">Kubernetes SIGs</a> Revision <a class="text-gray" href="https://github.com/kubernetes-sigs/node-feature-discovery/commit/" title="" rel="noreferrer" target="_blank"></a> <br> <div class="generator"> Built with <a href="https://pages.github.com" rel="noreferrer" target="_blank" title="github-pages v228">GitHub Pages</a> using a <a href="https://github.com/rundocs/jekyll-rtd-theme" rel="noreferrer" target="_blank" title="rundocs/jekyll-rtd-theme v2.0.10">theme</a> provided by <a href="https://rundocs.io" rel="noreferrer" target="_blank">RunDocs</a>. </div> </div> </div> </div> <div class="addons-wrap d-flex flex-column overflow-y-auto"> <div class="status d-flex flex-justify-between p-2"> <div class="title p-1"> <i class="fa fa-book"></i> Node Feature Discovery </div> <div class="branch p-1"> <span class="name"> master </span> <i class="fa fa-caret-down"></i> </div> </div> <div class="addons d-flex flex-column height-full p-2 d-none"> <dl id="versions"> <dt>Versions</dt> <script src="/node-feature-discovery/versions.js"></script> <script> var dt = document.getElementById('versions'); var items = getVersionListItems(); for (var i=0; i < items.length; i++) { var dd = document.createElement('dd'); var a = dd.appendChild(document.createElement('a')); a.appendChild(document.createTextNode(items[i].name)); a.href = items[i].url; dt.appendChild(dd); } </script> </dl> <dl> <dt>GitHub</dt> <dd> <a href="https://github.com/kubernetes-sigs/node-feature-discovery" title="Stars: 700"> <i class="fa fa-github"></i> Homepage </a> </dd> <dd> <a href="https://github.com/kubernetes-sigs/node-feature-discovery/issues" title="Open issues: 21"> <i class="fa fa-question-circle-o"></i> Issues </a> </dd> <dd> <a href="https://github.com/kubernetes-sigs/node-feature-discovery/zipball/gh-pages" title="Size: 102882 Kb"> <i class="fa fa-download"></i> Download </a> </dd> </dl> <hr> <div class="license f6 pb-2"> This <a href="/node-feature-discovery/master/" title="Node Feature Discovery">Software</a> is under the terms of <a href="https://github.com/kubernetes-sigs/node-feature-discovery">Apache License 2.0</a>. </div> </div> </div> <script src="https://cdn.jsdelivr.net/gh/rundocs/jekyll-rtd-theme@2.0.10/assets/js/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/gh/rundocs/jekyll-rtd-theme@2.0.10/assets/js/theme.min.js"></script> </body> </html>