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

Form analysis 4 forms found in the DOM

POST /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&amp;utm_medium=email&amp;utm_campaign=amer-fy23-q1-nerdlog&amp;utm_content=nerdlog&amp;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