newrelic.com
Open in
urlscan Pro
151.101.130.217
Public Scan
Submitted URL: https://get.newrelic.com/MzQxLVhLUC0zMTAAAAGEd4lTSfnwchdsJCgLuX-3ymdE9x1Z0S4xQNY4AmEJfPzTsKrfGXjL5JoOACLR-peiBvgyd-0=
Effective URL: https://newrelic.com/blog/nerdlog/k8s-integration-v3?utm_source=marketo&utm_medium=email&utm_campaign=amer-fy23-q1-ne...
Submission: On May 18 via api from US — Scanned from DE
Effective URL: https://newrelic.com/blog/nerdlog/k8s-integration-v3?utm_source=marketo&utm_medium=email&utm_campaign=amer-fy23-q1-ne...
Submission: On May 18 via api from US — Scanned from DE
Form analysis
4 forms found in the DOMPOST /search
<form class="flex relative" method="post" action="/search" __bizdiag="-906336856" __biza="WJ__">
<label class="sr-only" for="header-search">Search</label>
<input class="js-full-text-search col-start-1 row-start-1 w-full !pr-16" type="search" id="header-search" name="search" placeholder="What are you looking for?" autocomplete="on" autocorrect="off" autocapitalize="off" value="">
<div class="absolute right-0 flex items-center justify-center h-full w-16">
<button class="js-search-form-cancel btn-text !bg-transparent text-nr-black dark:text-nr-white" aria-label="close" type="button">
<span aria-hidden="true">
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="m8.928 8.928 14.144 14.144m0-14.144L8.928 23.072" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path>
</svg>
</span>
</button>
</div>
</form>
GET /blog/search
<form class="relative w-full max-w-xl large:max-w-3xl" method="get" action="/blog/search" __bizdiag="115" __biza="WJ__">
<label class="sr-only" for="blog-header-search-input"> Search the blog </label>
<input class="js-blog-header-search-input w-full !pr-20" id="blog-header-search-input" type="search" placeholder="Type your search here" name="s">
<button class="js-blog-header-search-submit absolute right-0 top-0 flex items-center justify-center h-full w-16 p-0 bg-transparent text-nr-black" type="submit">
<span aria-hidden="true">
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.93 20.861A6.93 6.93 0 1 0 13.93 7a6.93 6.93 0 0 0 0 13.861Z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path>
<path d="m18.782 18.782 3.466 3.465.877.878 1.125 1.125.75.75" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path>
</svg>
</span>
<span class="sr-only">Submit</span>
</button>
</form>
<form id="mktoForm_2440" class="mktoForm mktoHasWidth mktoLayoutLeft" novalidate="novalidate" style="font-family: inherit; font-size: 13px; color: rgb(51, 51, 51); width: 2194px;" __bizdiag="1193416728" __biza="WJ__">
<style type="text/css"></style>
<div class="mktoFormRow">
<div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 5px;">
<div class="mktoOffset" style="width: 5px;"></div>
<div class="mktoFieldWrap mktoRequiredField"><label for="Email" id="LblEmail" class="mktoLabel mktoHasWidth" style="width: 107px;">
<div class="mktoAsterix">*</div>Email:
</label>
<div class="mktoGutter mktoHasWidth" style="width: 5px;"></div><input id="Email" name="Email" placeholder="Business Email" maxlength="255" aria-labelledby="LblEmail InstructEmail" type="email"
class="mktoField mktoEmailField mktoHasWidth mktoRequired" aria-required="true" style="width: 150px;"><span id="InstructEmail" tabindex="-1" class="mktoInstruction"></span>
<div class="mktoClear"></div>
</div>
<div class="mktoClear"></div>
</div>
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow">
<div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 5px;">
<div class="mktoOffset" style="width: 5px;"></div>
<div class="mktoFieldWrap mktoRequiredField"><label for="Country" id="LblCountry" class="mktoLabel mktoHasWidth" style="width: 111px;">
<div class="mktoAsterix">*</div>Country:
</label>
<div class="mktoGutter mktoHasWidth" style="width: 5px;"></div><select id="Country" name="Country" aria-labelledby="LblCountry InstructCountry" class="mktoField mktoHasWidth mktoRequired" aria-required="true" style="width: 150px;">
<option value="">Select a country</option>
<option value="United States">United States</option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
<option value="American Samoa">American Samoa</option>
<option value="Andorra">Andorra</option>
<option value="Angola">Angola</option>
<option value="Anguilla">Anguilla</option>
<option value="Antarctica">Antarctica</option>
<option value="Antigua and Barbuda">Antigua and Barbuda</option>
<option value="Argentina">Argentina</option>
<option value="Armenia">Armenia</option>
<option value="Aruba">Aruba</option>
<option value="Ascension Island">Ascension Island</option>
<option value="Australia">Australia</option>
<option value="Austria">Austria</option>
<option value="Azerbaijan">Azerbaijan</option>
<option value="Bahamas">Bahamas</option>
<option value="Bahrain">Bahrain</option>
<option value="Bangladesh">Bangladesh</option>
<option value="Barbados">Barbados</option>
<option value="Belarus">Belarus</option>
<option value="Belgium">Belgium</option>
<option value="Belize">Belize</option>
<option value="Benin">Benin</option>
<option value="Bermuda">Bermuda</option>
<option value="Bhutan">Bhutan</option>
<option value="Bolivia">Bolivia</option>
<option value="Bosnia-Herzegovina">Bosnia-Herzegovina</option>
<option value="Botswana">Botswana</option>
<option value="Bouvet Island">Bouvet Island</option>
<option value="Brazil">Brazil</option>
<option value="Brunei">Brunei</option>
<option value="Bulgaria">Bulgaria</option>
<option value="Burkina Faso">Burkina Faso</option>
<option value="Burundi">Burundi</option>
<option value="Cambodia">Cambodia</option>
<option value="Cameroon">Cameroon</option>
<option value="Canada">Canada</option>
<option value="Cape Verde">Cape Verde</option>
<option value="Cayman Islands">Cayman Islands</option>
<option value="Central African Republic">Central African Republic</option>
<option value="Chad">Chad</option>
<option value="Chile">Chile</option>
<option value="China">China</option>
<option value="Christmas Island">Christmas Island</option>
<option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>
<option value="Colombia">Colombia</option>
<option value="Comoros">Comoros</option>
<option value="Congo, Democratic Republic">Congo, Democratic Republic</option>
<option value="Cook Islands">Cook Islands</option>
<option value="Costa Rica">Costa Rica</option>
<option value="Croatia">Croatia</option>
<option value="Cuba">Cuba</option>
<option value="Curaçao">Curaçao</option>
<option value="Cyprus">Cyprus</option>
<option value="Czech Republic">Czech Republic</option>
<option value="Republic of the Congo">Republic of the Congo</option>
<option value="Denmark">Denmark</option>
<option value="Djibouti">Djibouti</option>
<option value="Dominica">Dominica</option>
<option value="Dominican Republic">Dominican Republic</option>
<option value="Timor-Leste">Timor-Leste</option>
<option value="East Timor Timor-Leste">East Timor Timor-Leste</option>
<option value="Ecuador">Ecuador</option>
<option value="Egypt">Egypt</option>
<option value="El Salvador">El Salvador</option>
<option value="Equatorial Guinea">Equatorial Guinea</option>
<option value="Eritrea">Eritrea</option>
<option value="Estonia">Estonia</option>
<option value="Ethiopia">Ethiopia</option>
<option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option>
<option value="Faroe Islands">Faroe Islands</option>
<option value="Fiji">Fiji</option>
<option value="Finland">Finland</option>
<option value="France">France</option>
<option value="French Guiana">French Guiana</option>
<option value="French Metropolitan">French Metropolitan</option>
<option value="French Polynesia">French Polynesia</option>
<option value="French Southern Territories">French Southern Territories</option>
<option value="Gabon">Gabon</option>
<option value="Gambia">Gambia</option>
<option value="Georgia">Georgia</option>
<option value="Germany">Germany</option>
<option value="Ghana">Ghana</option>
<option value="Gibraltar">Gibraltar</option>
<option value="Greece">Greece</option>
<option value="Greenland">Greenland</option>
<option value="Grenada">Grenada</option>
<option value="Guadeloupe">Guadeloupe</option>
<option value="Guam (USA)">Guam (USA)</option>
<option value="Guatemala">Guatemala</option>
<option value="Guernsey">Guernsey</option>
<option value="Guinea">Guinea</option>
<option value="Guinea Bissau">Guinea Bissau</option>
<option value="Guyana">Guyana</option>
<option value="Haiti">Haiti</option>
<option value="Heard and Mc Donald Islands">Heard and Mc Donald Islands</option>
<option value="Holy See (Vatican City State)">Holy See (Vatican City State)</option>
<option value="Honduras">Honduras</option>
<option value="Hong Kong">Hong Kong</option>
<option value="Hungary">Hungary</option>
<option value="Iceland">Iceland</option>
<option value="India">India</option>
<option value="Indonesia">Indonesia</option>
<option value="Iran">Iran</option>
<option value="Iraq">Iraq</option>
<option value="Ireland">Ireland</option>
<option value="Isle of Man">Isle of Man</option>
<option value="Israel">Israel</option>
<option value="Italy">Italy</option>
<option value="Ivory Coast">Ivory Coast</option>
<option value="Jamaica">Jamaica</option>
<option value="Japan">Japan</option>
<option value="Jersey">Jersey</option>
<option value="Jordan">Jordan</option>
<option value="Kazakhstan">Kazakhstan</option>
<option value="Kenya">Kenya</option>
<option value="Kiribati">Kiribati</option>
<option value="North Korea">North Korea</option>
<option value="Korea, South">Korea, South</option>
<option value="Kuwait">Kuwait</option>
<option value="Kyrgyzstan">Kyrgyzstan</option>
<option value="Laos">Laos</option>
<option value="Latvia">Latvia</option>
<option value="Lebanon">Lebanon</option>
<option value="Lesotho">Lesotho</option>
<option value="Liberia">Liberia</option>
<option value="Libya">Libya</option>
<option value="Liechtenstein">Liechtenstein</option>
<option value="Lithuania">Lithuania</option>
<option value="Luxembourg">Luxembourg</option>
<option value="Macao">Macao</option>
<option value="Macedonia">Macedonia</option>
<option value="Madagascar">Madagascar</option>
<option value="Malawi">Malawi</option>
<option value="Malaysia">Malaysia</option>
<option value="Maldives">Maldives</option>
<option value="Mali">Mali</option>
<option value="Malta">Malta</option>
<option value="Marshall Islands">Marshall Islands</option>
<option value="Martinique">Martinique</option>
<option value="Mauritania">Mauritania</option>
<option value="Mauritius">Mauritius</option>
<option value="Mayotte">Mayotte</option>
<option value="Mexico">Mexico</option>
<option value="Micronesia">Micronesia</option>
<option value="Moldova">Moldova</option>
<option value="Monaco">Monaco</option>
<option value="Mongolia">Mongolia</option>
<option value="Montenegro">Montenegro</option>
<option value="Montserrat">Montserrat</option>
<option value="Morocco">Morocco</option>
<option value="Mozambique">Mozambique</option>
<option value="Myanmar">Myanmar</option>
<option value="Namibia">Namibia</option>
<option value="Nauru">Nauru</option>
<option value="Nepal">Nepal</option>
<option value="Netherlands">Netherlands</option>
<option value="Netherlands Antilles">Netherlands Antilles</option>
<option value="New Caledonia">New Caledonia</option>
<option value="New Zealand">New Zealand</option>
<option value="Nicaragua">Nicaragua</option>
<option value="Niger">Niger</option>
<option value="Nigeria">Nigeria</option>
<option value="Niue">Niue</option>
<option value="Norfolk Island">Norfolk Island</option>
<option value="Northern Mariana Islands">Northern Mariana Islands</option>
<option value="Norway">Norway</option>
<option value="Oman">Oman</option>
<option value="Pakistan">Pakistan</option>
<option value="Palau">Palau</option>
<option value="Panama">Panama</option>
<option value="Papua New Guinea">Papua New Guinea</option>
<option value="Paraguay">Paraguay</option>
<option value="Peru">Peru</option>
<option value="Philippines">Philippines</option>
<option value="Pitcairn">Pitcairn</option>
<option value="Poland">Poland</option>
<option value="Portugal">Portugal</option>
<option value="Puerto Rico">Puerto Rico</option>
<option value="Qatar">Qatar</option>
<option value="Réunion">Réunion</option>
<option value="Romania">Romania</option>
<option value="Russian Federation">Russian Federation</option>
<option value="Rwanda">Rwanda</option>
<option value="Saint Helena">Saint Helena</option>
<option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>
<option value="Saint Lucia">Saint Lucia</option>
<option value="Saint Vincent and Grenadines">Saint Vincent and Grenadines</option>
<option value="Samoa">Samoa</option>
<option value="San Marino">San Marino</option>
<option value="Sao Tome and Principe">Sao Tome and Principe</option>
<option value="Saudi Arabia">Saudi Arabia</option>
<option value="Senegal">Senegal</option>
<option value="Serbia">Serbia</option>
<option value="Seychelles">Seychelles</option>
<option value="Sierra Leone">Sierra Leone</option>
<option value="Singapore">Singapore</option>
<option value="Slovakia">Slovakia</option>
<option value="Slovenia">Slovenia</option>
<option value="Solomon Islands">Solomon Islands</option>
<option value="Somalia">Somalia</option>
<option value="South Africa">South Africa</option>
<option value="South Sudan">South Sudan</option>
<option value="South Georgia and South Sandwich Islands">South Georgia and South Sandwich Islands</option>
<option value="Spain">Spain</option>
<option value="Sri Lanka">Sri Lanka</option>
<option value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option>
<option value="Sudan">Sudan</option>
<option value="Suriname">Suriname</option>
<option value="Svalbard and Jan Mayen">Svalbard and Jan Mayen</option>
<option value="Swaziland">Swaziland</option>
<option value="Sweden">Sweden</option>
<option value="Switzerland">Switzerland</option>
<option value="Syria">Syria</option>
<option value="Taiwan (Republic of China)">Taiwan (Republic of China)</option>
<option value="Tajikistan">Tajikistan</option>
<option value="Tanzania">Tanzania</option>
<option value="Thailand">Thailand</option>
<option value="Togo">Togo</option>
<option value="Tokelau">Tokelau</option>
<option value="Tonga">Tonga</option>
<option value="Trinidad and Tobago">Trinidad and Tobago</option>
<option value="Tunisia">Tunisia</option>
<option value="Turkey">Turkey</option>
<option value="Turkmenistan">Turkmenistan</option>
<option value="Turks and Caicos Islands">Turks and Caicos Islands</option>
<option value="Tuvalu">Tuvalu</option>
<option value="U.S. Minor Outlying Islands">U.S. Minor Outlying Islands</option>
<option value="Uganda">Uganda</option>
<option value="Ukraine">Ukraine</option>
<option value="United Arab Emirates">United Arab Emirates</option>
<option value="United Kingdom">United Kingdom</option>
<option value="United States">United States</option>
<option value="Uruguay">Uruguay</option>
<option value="Uzbekistan">Uzbekistan</option>
<option value="Vanuatu">Vanuatu</option>
<option value="Venezuela">Venezuela</option>
<option value="Vietnam">Vietnam</option>
<option value="Virgin Islands">Virgin Islands</option>
<option value="Wallis and Futuna">Wallis and Futuna</option>
<option value="Western Sahara">Western Sahara</option>
<option value="Yemen">Yemen</option>
<option value="Zambia">Zambia</option>
<option value="Zimbabwe">Zimbabwe</option>
</select><span id="InstructCountry" tabindex="-1" class="mktoInstruction"></span>
<div class="mktoClear"></div>
</div>
<div class="mktoClear"></div>
</div>
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow">
<div class="mktoPlaceholder mktoPlaceholderHtmlText_2018-05-22T18 099Z"></div>
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow">
<div class="mktoPlaceholder mktoPlaceholderblogDigestOptin"></div>
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="initialHTTPReferrer" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="utm_campaign" class="mktoField mktoFieldDescriptor mktoFormCol" value="amer-fy23-q1-nerdlog" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="utm_content" class="mktoField mktoFieldDescriptor mktoFormCol" value="nerdlog" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="utm_source" class="mktoField mktoFieldDescriptor mktoFormCol" value="marketo" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="utm_term" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="utm_medium" class="mktoField mktoFieldDescriptor mktoFormCol" value="email" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="clearbitEnrichedAt" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="clearbitFormStatus" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="clearbitStatus" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="formInitialMedium" class="mktoField mktoFieldDescriptor mktoFormCol" value="email" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="GACLIENTID__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow"><input type="hidden" name="GATRACKID__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="UA-3047412-33" style="margin-bottom: 5px;">
<div class="mktoClear"></div>
</div>
<div class="mktoFormRow">
<div class="mktoPlaceholder mktoPlaceholderHtmlText_2019-08-28T19 736Z"></div>
<div class="mktoClear"></div>
</div>
<div class="mktoButtonRow"><span class="mktoButtonWrap mktoNative" style="margin-left: 110px;"><button type="submit" class="mktoButton">Subscribe</button></span></div><input type="hidden" name="formid" class="mktoField mktoFieldDescriptor"
value="2440"><input type="hidden" name="munchkinId" class="mktoField mktoFieldDescriptor" value="341-XKP-310"><input type="hidden" name="formInquirySource" class="mktoField mktoFieldDescriptor" value="marketo"><input type="hidden"
name="formInquiryMedium" class="mktoField mktoFieldDescriptor" value="email"><input type="hidden" name="formInquiryCampaign" class="mktoField mktoFieldDescriptor" value="amer-fy23-q1-nerdlog"><input type="hidden" name="formInquiryGCLID"
class="mktoField mktoFieldDescriptor" value="false"><input type="hidden" name="formInquiryMPC" class="mktoField mktoFieldDescriptor" value="false"><input type="hidden" name="contentFormPage" class="mktoField mktoFieldDescriptor"
value="https://newrelic.com/blog/nerdlog/k8s-integration-v3?utm_source=marketo&utm_medium=email&utm_campaign=amer-fy23-q1-nerdlog&utm_content=nerdlog&mkt_tok=MzQxLVhLUC0zMTAAAAGEd4lTSVuPSXlFQWRxeXl8vbgm-_puvl4BbrLIauvkReuaXLJ1vTzFK9-KFw8a8MLlMbehozzvkGnkCA7Iph9449HH_FSMpRQAYoVdXkXEFqAg">
</form>
<form class="mktoForm mktoHasWidth mktoLayoutLeft" novalidate="novalidate" style="font-family: inherit; font-size: 13px; color: rgb(51, 51, 51); visibility: hidden; position: absolute; top: -500px; left: -1000px; width: 1600px;"
__bizdiag="1823806126" __biza="WJ__"></form>
Text Content
Skip to main content Live from Las Vegas—the FutureStack keynote Wed. May 18, 9:00 am - 12:00 pm PT. Watch now Search toggle Main navigation menu, 5 items Search * Platform New Relic Put all over the place in its place—monitor your entire stack on a single platform. Explore the platform Explore the platform * 470 integrations pre-built for you Full-stack monitoring * Application Monitoring (APM) * Infrastructure Monitoring * Kubernetes & Pixie * Log Management * Network Monitoring * Browser Monitoring * Mobile Monitoring * Synthetics Monitoring * Serverless Monitoring * Model Performance Monitoring Observability Experiences * CodeStream * Error Tracking * Vulnerability Management * Explorer * AIOps Data Ingest & Insights * Integrations * Dashboards * Alerts * OpenTelemetry * Pricing * Solutions Featured Customers * Bangkok Bank Scales rapidly and seamlessly to meet increased future demand * Workiva Takes observability to a new level * Viewpoint Improves engineering efficiency and customer transparency Read all case studies Read all case studies By use case * DevOps * Cloud Adoption * Tool Consolidation * Digital Customer Experience * Open Source By Industry * Ecommerce and Retail * Healthcare * Media & Entertainment * New Relic for Startups * Nonprofit * Public Sector By Technology * Amazon Web Services * Google Cloud Platform * Microsoft Azure * Pivotal Cloud Foundry * Prometheus Monitoring * Docs * Help Center Quick and easy set up Get more value from your data with hundreds of quickstarts that integrate with just about anything. Be up and running in minutes. Get started Get started Build * Developer Hub Everything you need to build on New Relic * NerdLog Product updates and live demos * Open Source Projects Open source projects we maintain and support Learn * Blog Industry updates, how-tos and best practices * New Relic University Training courses and certifications * Resources eBooks, datasheets, & white papers * Events & Webinars Join us for an upcoming event Community and Support * The Relicans Community of developers * Community Forum Ask a question. Share an answer. * Technical Support Expert support for our global clients * Expert Services Let experts guide you with customized tech support Search toggle Log in Sign up Log in Sign up Observatory blog homepage * How to Relic * Best Practices * Nerd Life * Nerdlog Blog navigation menu, 4 items Toggle blog search * How to Relic * Best Practices * Nerd Life * Nerdlog Observatory blog homepage * How to Relic * Best Practices * Nerd Life * Nerdlog Toggle blog search Log in Sign up Blog navigation menu, 4 items * How to Relic * Best Practices * Nerd Life * Nerdlog Search the blog Submit Log in Sign up Kubernetes Monitoring UPGRADE YOUR K8S MONITORING EXPERIENCE OUR LATEST KUBERNETES INTEGRATION OFFERS MORE CONFIGURATION OPTIONS, ENHANCED LOGS, AND A REDUCED MEMORY FOOTPRINT. Published May 18, 2022 • 7 min read By Paolo Gallina As Kubernetes environments continue to scale, they also get more complex, making it harder to monitor their performance and health. Our updated Kubernetes integration (v3) significantly reduces CPU and memory, adds support for external control planes such as Rancher, and includes improvements to log messages to help identify issues. For instance, in big clusters, our new integration can be configured to request 80% less memory than before. That’s a huge improvement. In this post, I’ll cover the benefits of our new integration as well as some of the challenges we faced with our upgrade to v3. WHY SHOULD YOU UPGRADE YOUR KUBERNETES INTEGRATION? If you’re using an older version of our Kubernetes integration (or even if you’re new to monitoring Kubernetes with New Relic), you’ll get a lot of benefits by using v3. * Reduced memory footprint: Get up to 80% reduction in big clusters, thanks to an improved kube-state-metrics (KSM) scraping component. * Improved troubleshooting: Triage bugs and fix issues easier with enhanced logs and process cycle. * More configurable: Use three individually configurable components, including config files that provide more granular settings for each data source. * Scrape external control planes: Scrape metrics from components outside your clusters. * More flexible scraping intervals: Dial up or dial down data ingest to suit your needs. HOW TO UPGRADE YOUR KUBERNETES INTEGRATION If you’re using v2 and ready to upgrade now, you just need to run this command: helm upgrade --install my-installation newrelic/nri-bundle Copy You don’t need to update your configuration, dashboards, or alerts. For details, see the migration guide. IMPROVING OUR KUBERNETES INTEGRATION BEHIND THE SCENES When we were updating the integration, there were a lot of factors we had to keep in mind. We wanted to make the new integration compatible for our customers using v2, deliver valuable enhancements, and make the upgrade process as easy as possible. We also needed to continuously test the new implementation while the integration’s architecture was changing. With the upgrade to v3, we decided to fully leverage the Kubernetes deployment model and the capabilities that we hadn’t been using yet. To explain what this means, I’m going to get a bit technical. To fully unlock Kubernetes capabilities, we made these improvements: * Moved scraping tasks to separate components to allow the integration to make smarter decisions at scheduling and deployment time, not at runtime. * Switched to a sidecar pattern to move integration and agent processes to different containers, ensuring that the integration follows Kubernetes best practices. * Added functionality to scrape external control planes to add support for solutions such as Rancher and managed apiServers. * Reduced complexity in the cache system by leveraging Kubernetes informers. * Added support for complex data structures in integration configurations such as lists and maps. * Removed hardcoded scraping interval for control planes so you can manually configure the interval to fit your applications’ needs. The next sections dive into the details of each of these improvements. DECOUPLED COMPONENT CONFIGURATION To avoid data duplication while scraping KSM and control plane components from a DaemonSet, we performed locality-based leader election. In version 2, the infra DaemonSet changed its behavior depending on which pods were running in the same node. When designing the new architecture, we divided the different integration tasks into different components to be scheduled as different workloads. Each component has its own separate configuration, resources, annotations, logs, and so on. Moreover, the behavior of the components is no longer changing depending on pods running in the same node. This allows the integration to make smarter decisions at scheduling and deployment time, rather than at runtime, as described in the next section. V3 includes a DaemonSet scraping the Kubelet process running on the node. It also includes separate deployments for scraping kube-state-metrics and Control Plane components /metrics. Note that, depending on your configuration, the Control Plane component could be deployed as well as a DaemonSet. In version 3, increased complexity in the architecture allowed us to reduce the codebase size and improve the user experience. Ultimately, optimizing the integration’s architecture allowed us to reduce the codebase size, which improves the Kubernetes integration experience in New Relic. USING A SIDECAR PATTERN TO REMOVE UNNECESSARY PROCESSES In v2, there were multiple processes per container: The New Relic infrastructure agent triggered the execution of the nri-kubernetes integration as a different process. This approach meant that only failures in the main process of a container surface and trigger a pod restart. In v2, the integration was not the container’s main process, so in the case of a configuration or execution error, the failure didn't surface. There was no automatic pod restart, making it difficult to detect issues. The new implementation in v3 follows a sidecar pattern having the nri-kubernetes scraper container next to an agent running in a separate sidecar. Having a single process per container provides Kubernetes control over the lifecycle of the integration process, ensuring that when an error causes the integration to fail, it sends out a notification, and the Pod is restarted. ADDED FUNCTIONALITY TO SCRAPE EXTERNAL CONTROL PLANES With v2, scraping external control planes wasn’t possible, even if you specified a URL to scrape. With our updated Kubernetes integration v3, you can specify a static endpoint, and if you need to avoid data duplication, deploy the control plane component as a deployment and not as a DaemonSet. Scraping the AWS API server control plane in version 3. You can also specify different authentication methods for each component, including bearer tokens and Mutual Transport Layer Security (MTLS). And thanks to autodiscovery and other configurations added in the defaults, the default configuration supports several Kubernetes flavors, including Kubeadm, kind, and minikube. For flavors that the configuration doesn’t cover, you can configure the integration to use any selector, URL, or auth method. ENVIRONMENT VARIABLES-BASED CONFIGURATION In v2, if you wanted to configure the integration, you could only use environment variables. This approach made it tedious to support complex scenarios because you were limited to key=value configs. For example, since the configuration option was a flat list, we needed to add prefixes to show you which group variables belonged to. That created confusion whenever we needed to add a new parameter in nested configuration groups, so we needed environment variables with different prefixes: DiscoveryCacheTTL, APIServerCacheTTL, APIServerCacheK8SVersionTTL, APIServerCacheK8SVersionTTLJitter. The new integration leverages a YAML config to support more complex data structures such as lists and maps, and it allows customers to configure most of the integration’s parameters. At first glance, the new YAML configuration of the Helm chart seems more complex than the previous configuration. However, the new values.yaml provides additional syntax that is often used in Helm charts. Finally, on configuration changes, the instances are automatically restarted to reload the config file if Helm is used as an installation method. REMOVED HARDCODED SCRAPING INTERVAL CONFIG In v2, the scraping interval config option was hardcoded to 15s, and you might have wished that it was configurable. Now it is! We’ve exposed this parameter so you can set the interval manually between 10 and 40 seconds. By default, the interval is 15s. Selecting lowDataMode automatically changes the interval to 30s, lowering the data fetched. HOW WE CONTINUOUSLY TESTED THE NEW ARCHITECTURE For v3, we added a set of integration tests that leverage our improved discovery and modular approach to feed static, pre-generated data to each component. We improved end-to-end tests with a new approach decoupled from the implementation itself. The tests install a chart in a Kubernetes environment and check to see if all entities are created and all metrics contained in the Kubernetes spec files are reported. These tests are not reliant on a specific architecture, and they test the whole pipeline, so we can run them with any version or implementation of the integration. We were able to run these tests throughout our update from v2 to v3, which led us to discover (and fix) some existing bugs. E2E tests don't rely on a specific architecture. They test the whole pipeline as a black box. HOW WE REDUCED BREAKING CHANGES To make it easier for you to upgrade to v3, we used a compatibility layer in the Helm chart to map old values to the new ones. This way, you receive all the benefits of the latest version of nri-kubernetes without any of the headaches of breaking or configuration changes. A compatibility layer is in place to support version 2 values. NEXT STEPS Get started and monitor your Kubernetes environment by signing up for a free New Relic account. Your free account includes 100 GB/month of free data ingest, one free full-access user, and unlimited free basic users. Learn more about our Kubernetes integration by reading Introduction to the Kubernetes integration. Install the integration with these steps. If you already have nri-kubernetes and would like to upgrade to v3, you just need to run this command: helm upgrade --install my-installation newrelic/nri-bundle RELATED TOPICS Kubernetes Monitoring Observability -------------------------------------------------------------------------------- By Paolo Gallina Paolo Gallina is a Software Engineer at New Relic. He is, together with Coreint team, the maintainer of onHost and Kubernetes integrations. Prior to joining New Relic, he was a Cloud Native Engineer at Harbur Cloud Solutions in Barcelona, Spain. The views expressed on this blog are those of the author and do not necessarily reflect the views of New Relic. Any solutions offered by the author are environment-specific and not part of the commercial solutions or support offered by New Relic. Please join us exclusively at the Explorers Hub (discuss.newrelic.com) for questions and support related to this blog post. This blog may contain links to content on third-party sites. By providing such links, New Relic does not adopt, guarantee, approve or endorse the information, views or products available on such sites. Was this post helpful? Vote for this content. Remove your vote for this content. 0 votes Share this article * Share on Twitter * Share on Reddit * Share on Facebook * Share on LinkedIn In this article * Why should you upgrade your Kubernetes integration? * How to upgrade your Kubernetes integration * Improving our Kubernetes integration behind the scenes * Decoupled component configuration * Using a sidecar pattern to remove unnecessary processes * Added functionality to scrape external control planes * Environment variables-based configuration * Removed hardcoded scraping interval config * How we continuously tested the new architecture * How we reduced breaking changes * Next steps RELATED Kubernetes Monitoring MONITORING COREDNS WITH PROMETHEUS AND NEW RELIC Apr 26, 2022 • 5 min read Read the article Kubernetes Monitoring HOW VIDEO PLATFORM LEADER MOVINGIMAGE RIGHTSIZES KUBERNETES CONTAINERS May 4, 2022 • 4 min read Read the article Cloud INTRODUCING OUR ADD-ON FOR AMAZON EKS BLUEPRINTS Apr 27, 2022 • 1 min read Read the article SUBSCRIBE TO OUR BLOG Find out about the latest articles and nerd out on the regular. * Email: * Country: Select a countryUnited StatesAfghanistanAlbaniaAlgeriaAmerican SamoaAndorraAngolaAnguillaAntarcticaAntigua and BarbudaArgentinaArmeniaArubaAscension IslandAustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBermudaBhutanBoliviaBosnia-HerzegovinaBotswanaBouvet IslandBrazilBruneiBulgariaBurkina FasoBurundiCambodiaCameroonCanadaCape VerdeCayman IslandsCentral African RepublicChadChileChinaChristmas IslandCocos (Keeling) IslandsColombiaComorosCongo, Democratic RepublicCook IslandsCosta RicaCroatiaCubaCuraçaoCyprusCzech RepublicRepublic of the CongoDenmarkDjiboutiDominicaDominican RepublicTimor-LesteEast Timor Timor-LesteEcuadorEgyptEl SalvadorEquatorial GuineaEritreaEstoniaEthiopiaFalkland Islands (Malvinas)Faroe IslandsFijiFinlandFranceFrench GuianaFrench MetropolitanFrench PolynesiaFrench Southern TerritoriesGabonGambiaGeorgiaGermanyGhanaGibraltarGreeceGreenlandGrenadaGuadeloupeGuam (USA)GuatemalaGuernseyGuineaGuinea BissauGuyanaHaitiHeard and Mc Donald IslandsHoly See (Vatican City State)HondurasHong KongHungaryIcelandIndiaIndonesiaIranIraqIrelandIsle of ManIsraelItalyIvory CoastJamaicaJapanJerseyJordanKazakhstanKenyaKiribatiNorth KoreaKorea, SouthKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLuxembourgMacaoMacedoniaMadagascarMalawiMalaysiaMaldivesMaliMaltaMarshall IslandsMartiniqueMauritaniaMauritiusMayotteMexicoMicronesiaMoldovaMonacoMongoliaMontenegroMontserratMoroccoMozambiqueMyanmarNamibiaNauruNepalNetherlandsNetherlands AntillesNew CaledoniaNew ZealandNicaraguaNigerNigeriaNiueNorfolk IslandNorthern Mariana IslandsNorwayOmanPakistanPalauPanamaPapua New GuineaParaguayPeruPhilippinesPitcairnPolandPortugalPuerto RicoQatarRéunionRomaniaRussian FederationRwandaSaint HelenaSaint Kitts and NevisSaint LuciaSaint Vincent and GrenadinesSamoaSan MarinoSao Tome and PrincipeSaudi ArabiaSenegalSerbiaSeychellesSierra LeoneSingaporeSlovakiaSloveniaSolomon IslandsSomaliaSouth AfricaSouth SudanSouth Georgia and South Sandwich IslandsSpainSri LankaSaint Pierre and MiquelonSudanSurinameSvalbard and Jan MayenSwazilandSwedenSwitzerlandSyriaTaiwan (Republic of China)TajikistanTanzaniaThailandTogoTokelauTongaTrinidad and TobagoTunisiaTurkeyTurkmenistanTurks and Caicos IslandsTuvaluU.S. Minor Outlying IslandsUgandaUkraineUnited Arab EmiratesUnited KingdomUnited StatesUruguayUzbekistanVanuatuVenezuelaVietnamVirgin IslandsWallis and FutunaWestern SaharaYemenZambiaZimbabwe Subscribe THANK YOU FOR SUBSCRIBING Thank you for subscribing to Observatory, the New Relic blog. You will receive a weekly blog digest. You can update your subscription preferences any time on our subscription page. Company * About Us * Leadership * Careers * Social Impact * Newsroom * Customers * Partner Program * Investor Relations * Suppliers Portal * Security * ESG * Contact Us Follow Us * * * * * * * Download the New Relic App * Get it on Google Play * * Terms of Service * DMCA Policy * Privacy Policy * Cookie Policy * UK Slavery Act of 2015 * 日本語 * Français * Deutsch * 한국어 ©2008-22 New Relic, Inc. All rights reserved