<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Robert Waffen</title>
    <description>The latest articles on Forem by Robert Waffen (@rwaffen).</description>
    <link>https://forem.com/rwaffen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F767518%2F21b02252-a60d-41ba-8214-c17156a06f65.jpeg</url>
      <title>Forem: Robert Waffen</title>
      <link>https://forem.com/rwaffen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rwaffen"/>
    <language>en</language>
    <item>
      <title>How to keep your Puppet modules up to date with Renovate</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Wed, 25 Mar 2026 16:14:50 +0000</pubDate>
      <link>https://forem.com/betadots/how-to-keep-your-puppet-modules-up-to-date-with-renovate-19jn</link>
      <guid>https://forem.com/betadots/how-to-keep-your-puppet-modules-up-to-date-with-renovate-19jn</guid>
      <description>&lt;p&gt;Managing a Puppet control repository with a growing list of dependencies can quickly become a challenge.&lt;br&gt;
Keeping everything up to date manually?&lt;br&gt;
That’s not just tedious — it’s also error-prone.&lt;/p&gt;

&lt;p&gt;Modules are updated frequently, sometimes daily.&lt;br&gt;
With a long list of dependencies, it’s easy to miss important updates.&lt;br&gt;
And let’s be honest: humans are not exactly known for perfect consistency when it comes to repetitive tasks.&lt;/p&gt;

&lt;p&gt;So why not let a bot handle it?&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Renovate?
&lt;/h2&gt;

&lt;p&gt;Renovate is designed to take over exactly this kind of work.&lt;br&gt;
It continuously scans your repositories, detects dependency updates, and automatically creates merge requests for you — including changelogs.&lt;/p&gt;

&lt;p&gt;Instead of manually checking versions, you simply review and merge PRs.&lt;br&gt;
Much cleaner.&lt;br&gt;
Much safer.&lt;/p&gt;
&lt;h2&gt;
  
  
  Assumptions
&lt;/h2&gt;

&lt;p&gt;Before we get started, this setup assumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your repositories are hosted on GitLab&lt;/li&gt;
&lt;li&gt;You are using GitLab CI with runners&lt;/li&gt;
&lt;li&gt;You can run container-based jobs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Setting Up Renovate
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Create a Renovate Runner Repository
&lt;/h3&gt;

&lt;p&gt;Create a dedicated repository in GitLab, for example: renovate-runner&lt;/p&gt;

&lt;p&gt;Inside this repository, create a &lt;code&gt;config.js&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;autodiscover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dependencyDashboard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// We only enable the puppet manager here&lt;/span&gt;
  &lt;span class="c1"&gt;// see all managers: https://docs.renovatebot.com/modules/manager/&lt;/span&gt;
  &lt;span class="na"&gt;enabledManagers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;puppet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="c1"&gt;// GitLab API - update with your instance URL&lt;/span&gt;
  &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://gitlab.example.com/api/v4/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;config:base&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:semanticCommits&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:semanticCommitTypeAll(chore)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;renovate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dependencies&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gitlab&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;prCreation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;immediate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;prHourlyLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;puppet/control-repo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;requireConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;reviewers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@rwaffen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RENOVATE_TOKEN&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration will create one merge request per dependency update.&lt;/p&gt;

&lt;p&gt;If you prefer grouped updates, you can extend it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;packageRules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;matchManagers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;puppet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;groupName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{manager}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add GitLab CI Configuration
&lt;/h3&gt;

&lt;p&gt;Create a .gitlab-ci.yml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;run_renovate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/voxpupuli/renovate:latest&lt;/span&gt;
    &lt;span class="na"&gt;entrypoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;resource_group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
  &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;renovate $RENOVATE_EXTRA_FLAGS&lt;/span&gt;
  &lt;span class="na"&gt;only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;schedules&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;triggers&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
  &lt;span class="c1"&gt;# variables:&lt;/span&gt;
  &lt;span class="c1"&gt;#   LOG_LEVEL: debug&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running Renovate
&lt;/h2&gt;

&lt;p&gt;With everything in place, you can trigger a pipeline in your &lt;code&gt;renovate-runner&lt;/code&gt; repository.&lt;/p&gt;

&lt;p&gt;Once started, Renovate will take over and handle the full update cycle for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It launches the Renovate container&lt;/li&gt;
&lt;li&gt;Authenticates using your configured token&lt;/li&gt;
&lt;li&gt;Scans the defined repositories&lt;/li&gt;
&lt;li&gt;Detects dependency files such as &lt;code&gt;Puppetfile&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resolves current versions and checks for new releases or tags&lt;/li&gt;
&lt;li&gt;Creates merge requests whenever updates are available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, your role shifts from &lt;em&gt;maintainer&lt;/em&gt; to &lt;em&gt;reviewer&lt;/em&gt;:&lt;br&gt;
you simply go through the generated merge requests and decide what to merge.&lt;/p&gt;

&lt;p&gt;To make this process truly hands-off, you should also configure a scheduled pipeline in GitLab.&lt;br&gt;
This ensures Renovate runs regularly and keeps your dependencies continuously up to date — without any manual triggering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication: &lt;code&gt;RENOVATE_TOKEN&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Renovate requires a Personal Access Token (&lt;code&gt;RENOVATE_TOKEN&lt;/code&gt;) to interact with your repositories.&lt;/p&gt;

&lt;p&gt;Required permissions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;api&lt;/li&gt;
&lt;li&gt;write_repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is highly recommended to create this as a group access token, so Renovate can access all relevant repositories — especially important if your Puppetfile includes Git-based modules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right Container Image
&lt;/h2&gt;

&lt;p&gt;Renovate provides official container images, but they come with some trade-offs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large size&lt;/li&gt;
&lt;li&gt;Based on Ubuntu&lt;/li&gt;
&lt;li&gt;Higher number of known vulnerabilities (CVEs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vox Pupuli provides a leaner alternative:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller footprint&lt;/li&gt;
&lt;li&gt;Based on Alpine&lt;/li&gt;
&lt;li&gt;Significantly fewer vulnerabilities
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IMAGE                                 ID             DISK USAGE   CONTENT SIZE   EXTRA
ghcr.io/renovatebot/renovate:latest   0334065a0093       1.87GB          416MB
ghcr.io/voxpupuli/renovate:latest     e354b2af781c        726MB          132MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Vulnerability Scan (grype)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grype ghcr.io/renovatebot/renovate:latest

 ✔ Scanned for vulnerabilities     [297 vulnerability matches]
   ├── by severity: 1 critical, 10 high, 971 medium, 137 low, 15 negligible
   └── by status:   14 fixed, 1120 not-fixed, 837 ignored
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grype ghcr.io/voxpupuli/renovate:latest

 ✔ Scanned for vulnerabilities     [19 vulnerability matches]
   ├── by severity: 0 critical, 15 high, 4 medium, 0 low, 0 negligible
   └── by status:   13 fixed, 6 not-fixed, 0 ignored
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;With Renovate in place, dependency management becomes predictable and automated.&lt;br&gt;
Instead of chasing updates manually, you get a steady stream of structured merge requests — complete with context and changelogs.&lt;br&gt;
In other words: less chaos, more control.&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>renovate</category>
      <category>voxpupuli</category>
      <category>gitlab</category>
    </item>
    <item>
      <title>🧩 Puppet Module Update Process</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Fri, 11 Jul 2025 07:59:30 +0000</pubDate>
      <link>https://forem.com/betadots/puppet-module-update-process-3f54</link>
      <guid>https://forem.com/betadots/puppet-module-update-process-3f54</guid>
      <description>&lt;h2&gt;
  
  
  🔍 1. Identify and Analyze the Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Extract a module name from the &lt;code&gt;Puppetfile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Search for the module on &lt;a href="https://forge.puppet.com" rel="noopener noreferrer"&gt;Puppet Forge&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Compare available versions and identify the latest one.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📝 2. Review Changes in the Module
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Follow the &lt;strong&gt;Project URL&lt;/strong&gt; on the Forge page to the GitHub repository.&lt;/li&gt;
&lt;li&gt;Check recent changes under &lt;strong&gt;Releases&lt;/strong&gt; or in the &lt;strong&gt;Changelog&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forge.puppet.com/modules/puppet/systemd/readme" rel="noopener noreferrer"&gt;Forge: puppet/systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-systemd/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-systemd/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;GitHub Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚠️ 3. Watch for Breaking Changes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Possible breaking changes:

&lt;ul&gt;
&lt;li&gt;Removal of support for EOL software&lt;/li&gt;
&lt;li&gt;API changes&lt;/li&gt;
&lt;li&gt;Renamed parameters or variables&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Note: Not every breaking change will affect your setup.

&lt;ul&gt;
&lt;li&gt;Example: Dropping EL6 support likely doesn’t concern you.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔍 4. Evaluate Other Changes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Linked pull requests (PRs) may offer additional insights.&lt;/li&gt;
&lt;li&gt;Check whether changes are understandable and whether breaking changes apply to your environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌱 5. Integrate into Development Branches
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If the module is considered ready for update:

&lt;ul&gt;
&lt;li&gt;Integrate into a &lt;strong&gt;feature&lt;/strong&gt; or &lt;strong&gt;development&lt;/strong&gt; branch.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌲 6. Control Repo Branch Structure
&lt;/h2&gt;

&lt;p&gt;Typically present:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;development&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;production&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Optionally: &lt;code&gt;staging&lt;/code&gt; before &lt;code&gt;production&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Additionally: 0–n &lt;strong&gt;feature branches&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧪 7. Testing in Development Environment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Test the updated module in a suitable environment (VM, container).&lt;/li&gt;
&lt;li&gt;Observe how it interacts with other modules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Possible findings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependencies on specific module versions&lt;/li&gt;
&lt;li&gt;New facts writing additional data to PuppetDB&lt;/li&gt;
&lt;li&gt;New or modified parameters requiring Hiera data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔄 8. Forward the Change
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Once all adjustments are complete:

&lt;ul&gt;
&lt;li&gt;Pass the change to the next branch for further testing or rollout preparation.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤖 9. Automation with Renovate Bot
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This process is quite detailed and time-consuming.&lt;/li&gt;
&lt;li&gt;With &lt;a href="https://www.mend.io/renovate/" rel="noopener noreferrer"&gt;Renovate Bot&lt;/a&gt;, collecting and reviewing relevant updates becomes much easier.&lt;/li&gt;
&lt;li&gt;Renovate can be integrated into GitLab or GitHub.&lt;/li&gt;
&lt;li&gt;It works similarly to GitHub’s built-in &lt;a href="https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically" rel="noopener noreferrer"&gt;Dependabot&lt;/a&gt;, but is more flexible and configurable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧰 10. Automation with VoxBox
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You can also try using the Vox Pupuli VoxBox to list all dependencies for the entire control repo.

&lt;ul&gt;
&lt;li&gt;This doesn't work with every setup.&lt;/li&gt;
&lt;li&gt;If there are private modules in the Puppetfile, the person running the command must have access to them.&lt;/li&gt;
&lt;li&gt;Example command:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;podman run -it --rm -v $PWD:/repo:Z ghcr.io/voxpupuli/voxbox:latest r10k:dependencies&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;More useful information can be found in the &lt;a href="https://github.com/voxpupuli/container-voxbox" rel="noopener noreferrer"&gt;Vox Pupuli VoxBox documentation&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>puppet</category>
      <category>devops</category>
    </item>
    <item>
      <title>🧩 Puppet Modul Update Prozess</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Fri, 11 Jul 2025 07:58:40 +0000</pubDate>
      <link>https://forem.com/betadots/puppet-modul-update-prozess-3mek</link>
      <guid>https://forem.com/betadots/puppet-modul-update-prozess-3mek</guid>
      <description>&lt;h2&gt;
  
  
  🔍 1. Modul identifizieren und analysieren
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Einen Modulnamen aus dem &lt;code&gt;Puppetfile&lt;/code&gt; entnehmen.&lt;/li&gt;
&lt;li&gt;In der &lt;a href="https://forge.puppet.com" rel="noopener noreferrer"&gt;Puppet Forge&lt;/a&gt; nach dem Modul suchen.&lt;/li&gt;
&lt;li&gt;Verfügbare Versionen vergleichen und die neueste identifizieren.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📝 2. Änderungen im Modul prüfen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Über den Link zur &lt;strong&gt;Project URL&lt;/strong&gt; auf der Forge-Seite zum GitHub-Repository wechseln.&lt;/li&gt;
&lt;li&gt;Dort unter &lt;strong&gt;Releases&lt;/strong&gt; oder im &lt;strong&gt;Changelog&lt;/strong&gt; die letzten Änderungen prüfen:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beispiel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forge.puppet.com/modules/puppet/systemd/readme" rel="noopener noreferrer"&gt;Forge: puppet/systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-systemd/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-systemd/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;GitHub Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚠️ 3. Auf Breaking Changes achten
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mögliche Breaking Changes:

&lt;ul&gt;
&lt;li&gt;Entfernung der Unterstützung für EOL-Software&lt;/li&gt;
&lt;li&gt;Änderungen an der API&lt;/li&gt;
&lt;li&gt;Umbenennung von Variablen&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Hinweis: Nicht jede Breaking Change ist für jedes Setup relevant.

&lt;ul&gt;
&lt;li&gt;Beispiel: Der Entfall von EL6-Support betrifft euch vermutlich nicht.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔍 4. Sonstige Änderungen bewerten
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Auch verlinkte Pull Requests (PRs) können Aufschluss geben.&lt;/li&gt;
&lt;li&gt;Prüfen, ob Änderungen nachvollziehbar sind und keine Breaking Changes enthalten, die euch betreffen.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌱 5. Aufnahme in Entwicklungszweige
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wenn das Modul als updatefähig eingeschätzt wird:

&lt;ul&gt;
&lt;li&gt;Aufnahme in einen &lt;strong&gt;Feature-&lt;/strong&gt; oder &lt;strong&gt;Development-Branch&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌲 6. Branch-Struktur im Control-Repo
&lt;/h2&gt;

&lt;p&gt;Typischerweise vorhanden:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;development&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;staging&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;production&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Zusätzlich: 0–n &lt;strong&gt;Feature-Branches&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧪 7. Tests in Entwicklungsumgebung
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Test des neuen Moduls in geeigneter Umgebung (VM, Container)&lt;/li&gt;
&lt;li&gt;Beobachtung des Zusammenspiels mit anderen Modulen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mögliche Erkenntnisse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abhängigkeit zu anderen Modul-Versionen&lt;/li&gt;
&lt;li&gt;Neue Facts, die zusätzliche Daten in die PuppetDB schreiben&lt;/li&gt;
&lt;li&gt;Neue oder geänderte Parameter, die Hiera-Daten erfordern&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔄 8. Change weiterreichen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Wenn alle Anpassungen erledigt sind:

&lt;ul&gt;
&lt;li&gt;Übergabe des Changes in den nächsten Branch zur weiteren Prüfung oder Vorbereitung für den Rollout.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤖 9. Automatisierung mit Renovate Bot
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dieser Prozess ist sehr kleinteilig und kann zeitaufwendig sein.&lt;/li&gt;
&lt;li&gt;Mit Hilfe von &lt;a href="https://www.mend.io/renovate/" rel="noopener noreferrer"&gt;Renovate Bot&lt;/a&gt; lässt sich das Sichten und Sammeln der relevanten Informationen deutlich erleichtern.&lt;/li&gt;
&lt;li&gt;Renovate ist ein Bot, der sich in GitLab oder GitHub integrieren lässt.&lt;/li&gt;
&lt;li&gt;Er funktioniert ähnlich wie der GitHub-eigene &lt;a href="https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically" rel="noopener noreferrer"&gt;Dependabot&lt;/a&gt;, ist aber deutlich flexibler und konfigurierbarer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧰 10. Automatisierung mit VoxBox
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Man kann auch versuchen mit der Vox Pupuli Voxbox die Abhängigkeiten für das gesamte Control-Repo anzeigen zu lassen.

&lt;ul&gt;
&lt;li&gt;Das klappt nicht bei jedem Setup.&lt;/li&gt;
&lt;li&gt;Wenn im Puppetfile private Module sind, muss der jenige der es ausführt, Zugriff auf diese haben.&lt;/li&gt;
&lt;li&gt;Beispielbefehl:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;podman run -it --rm -v $PWD:/repo:Z ghcr.io/voxpupuli/voxbox:latest r10k:dependencies&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Weitere nützliche Informationen gibt es in der &lt;a href="https://github.com/voxpupuli/container-voxbox" rel="noopener noreferrer"&gt;Vox Pupuli VoxBox Dokumentation&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>puppet</category>
      <category>devops</category>
    </item>
    <item>
      <title>All the Vox Pupuli containers</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Mon, 24 Mar 2025 09:43:36 +0000</pubDate>
      <link>https://forem.com/voxpupuli/all-the-vox-pupuli-containers-4dpo</link>
      <guid>https://forem.com/voxpupuli/all-the-vox-pupuli-containers-4dpo</guid>
      <description>&lt;p&gt;You may have heard about our (now deprecated) &lt;code&gt;puppetserver&lt;/code&gt;/&lt;code&gt;puppetdb&lt;/code&gt; container images?&lt;br&gt;
But did you know that we have a lot more containers available?&lt;br&gt;
We have the brand new OpenVox containers, which replace the old puppetserver and puppetdb containers, and even some more.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenVox containers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  openvoxserver
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/openvoxproject/container-openvoxserver" rel="noopener noreferrer"&gt;&lt;code&gt;openvoxserver&lt;/code&gt;&lt;/a&gt; is a drop-in replacement for the old &lt;code&gt;voxpupuli/puppetserver&lt;/code&gt; container.&lt;/p&gt;

&lt;h3&gt;
  
  
  openvoxdb
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/openvoxproject/container-openvoxdb" rel="noopener noreferrer"&gt;&lt;code&gt;openvoxdb&lt;/code&gt;&lt;/a&gt; is a drop-in replacement for the old &lt;code&gt;voxpupuli/puppetdb&lt;/code&gt; container.&lt;/p&gt;

&lt;h3&gt;
  
  
  openvoxagent
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/openvoxproject/container-openvoxagent" rel="noopener noreferrer"&gt;&lt;code&gt;openvoxagent&lt;/code&gt;&lt;/a&gt; is a drop-in replacement for the old &lt;code&gt;puppet/puppet-agent&lt;/code&gt; container. It is mostly used for testing purposes, as of now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vox Pupuli containers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  voxbox
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/voxpupuli/container-voxbox" rel="noopener noreferrer"&gt;&lt;code&gt;voxbox&lt;/code&gt;&lt;/a&gt; is a container that contains a lot of tools that are useful for OpenVox/Puppet development and testing.&lt;br&gt;
It includes tools like &lt;code&gt;puppet-lint&lt;/code&gt;, &lt;code&gt;modulesync&lt;/code&gt;, &lt;code&gt;onceover&lt;/code&gt;, &lt;code&gt;facter&lt;/code&gt;, &lt;code&gt;yamllint&lt;/code&gt;, &lt;code&gt;rubocop&lt;/code&gt; and the Vox Pupuli testing gems.&lt;/p&gt;

&lt;h3&gt;
  
  
  r10k
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/voxpupuli/container-r10k" rel="noopener noreferrer"&gt;&lt;code&gt;r10k&lt;/code&gt;&lt;/a&gt; is a container that contains r10k, a tool to manage OpenVox/Puppet environments.&lt;/p&gt;

&lt;p&gt;See also: &lt;a href="https://github.com/puppetlabs/r10k" rel="noopener noreferrer"&gt;r10k&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  semantic-release
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/voxpupuli/container-semantic-release" rel="noopener noreferrer"&gt;&lt;code&gt;semantic-release&lt;/code&gt;&lt;/a&gt; is a container that contains the &lt;code&gt;semantic-release&lt;/code&gt; tool, which is used to automatically release new versions of software projects.&lt;/p&gt;

&lt;p&gt;See also: &lt;a href="https://github.com/semantic-release/semantic-release" rel="noopener noreferrer"&gt;semantic-release&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  commitlint
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/voxpupuli/container-commitlint" rel="noopener noreferrer"&gt;&lt;code&gt;commitlint&lt;/code&gt;&lt;/a&gt; is a container that contains the &lt;code&gt;commitlint&lt;/code&gt; tool, which is used to lint commit messages.&lt;/p&gt;

&lt;p&gt;See also: &lt;a href="https://commitlint.js.org/" rel="noopener noreferrer"&gt;commitlint&lt;/a&gt; and &lt;a href="https://www.conventionalcommits.org/" rel="noopener noreferrer"&gt;conventional commits&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  puppet-catalog-diff-viewer
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/voxpupuli/puppet-catalog-diff-viewer" rel="noopener noreferrer"&gt;&lt;code&gt;puppet-catalog-diff-viewer&lt;/code&gt;&lt;/a&gt; is a container that contains the &lt;code&gt;puppet-catalog-diff-viewer&lt;/code&gt; tool, which is used to visualize the differences between two OpenVox/Puppet catalogs.&lt;/p&gt;

&lt;h3&gt;
  
  
  puppetboard
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/voxpupuli/puppetboard" rel="noopener noreferrer"&gt;&lt;code&gt;puppetboard&lt;/code&gt;&lt;/a&gt; is a container that contains the &lt;code&gt;puppetboard&lt;/code&gt; tool, which is a web interface for OpenVoxDB/PuppetDB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So you see, we have a lot of containers available.&lt;br&gt;
If you have any questions or suggestions, feel free to reach out to us on &lt;a href="https://github.com/voxpupuli" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or on our other &lt;a href="https://voxpupuli.org/connect/" rel="noopener noreferrer"&gt;Channels&lt;/a&gt;&lt;br&gt;
If you need help with any of the containers, feel free to open an issue on the respective GitHub repository.&lt;br&gt;
Some examples of how to use the containers can be found in the &lt;a href="https://github.com/voxpupuli/crafty" rel="noopener noreferrer"&gt;CRAFTY&lt;/a&gt; repository.&lt;/p&gt;

</description>
      <category>openvox</category>
      <category>voxpupuli</category>
      <category>puppet</category>
      <category>container</category>
    </item>
    <item>
      <title>New container names for puppetserver and puppetdb</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Fri, 02 Aug 2024 12:57:37 +0000</pubDate>
      <link>https://forem.com/voxpupuli/new-container-names-for-puppetserver-and-puppetdb-3aem</link>
      <guid>https://forem.com/voxpupuli/new-container-names-for-puppetserver-and-puppetdb-3aem</guid>
      <description>&lt;p&gt;Beginning of today we are also releasing our puppetserver and puppetdb containers with shorter names.&lt;/p&gt;

&lt;p&gt;The current names are: &lt;code&gt;voxpupuli/container-puppetserver&lt;/code&gt; and &lt;code&gt;voxpupuli/container-puppetdb&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/orgs/voxpupuli/packages/container/package/container-puppetserver" rel="noopener noreferrer"&gt;https://github.com/orgs/voxpupuli/packages/container/package/container-puppetserver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/orgs/voxpupuli/packages/container/package/container-puppetdb" rel="noopener noreferrer"&gt;https://github.com/orgs/voxpupuli/packages/container/package/container-puppetdb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/voxpupuli/container-puppetserver" rel="noopener noreferrer"&gt;https://hub.docker.com/r/voxpupuli/container-puppetserver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/voxpupuli/container-puppetdb" rel="noopener noreferrer"&gt;https://hub.docker.com/r/voxpupuli/container-puppetdb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The new, shorter names are: &lt;code&gt;voxpupuli/puppetserver&lt;/code&gt; and &lt;code&gt;voxpupuli/puppetdb&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/orgs/voxpupuli/packages/container/package/puppetserver" rel="noopener noreferrer"&gt;https://github.com/orgs/voxpupuli/packages/container/package/puppetserver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/orgs/voxpupuli/packages/container/package/puppetdb" rel="noopener noreferrer"&gt;https://github.com/orgs/voxpupuli/packages/container/package/puppetdb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/voxpupuli/puppetserver" rel="noopener noreferrer"&gt;https://hub.docker.com/r/voxpupuli/puppetserver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/voxpupuli/puppetdb" rel="noopener noreferrer"&gt;https://hub.docker.com/r/voxpupuli/puppetdb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The content is exactly the same, only the name has changed. Only new tags will be pushed to the new names. The old names will also be updated.&lt;/p&gt;

&lt;p&gt;We plan to deprecate the old names in 6 months (2025-02), so please update your scripts and configurations to use the new names.&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>container</category>
      <category>voxpupuli</category>
    </item>
    <item>
      <title>Vox Pupuli Elections voting period</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Wed, 10 Apr 2024 07:41:26 +0000</pubDate>
      <link>https://forem.com/voxpupuli/vox-pupuli-elections-voting-period-52oi</link>
      <guid>https://forem.com/voxpupuli/vox-pupuli-elections-voting-period-52oi</guid>
      <description>&lt;p&gt;After a slight delay, we are opening the voting period for this year’s PMC elections. Votes will be accepted until &lt;strong&gt;May 15 2024 23:59 UTC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Please help us select the Vox Pupuli Project Management Committee for the 2024 year. The people on this committee will help take care of the Code of Conduct and its values, participate in strategic planning, and decision making using lazy consensus, amongst other things.&lt;/p&gt;

&lt;p&gt;New this year, we are also adding two specialized roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The accounting officer will keep track of budget, expenses, and sponsorships.&lt;/li&gt;
&lt;li&gt;The social media officer will coordinate social, blog, and other similar activities. They’re not necessarily responsible for -all- content, but will help facilitate it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These roles will be self selected amongst the committee after the election concludes.&lt;/p&gt;

&lt;p&gt;Visit the page below to read more about the candidates and to make your choices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://civs1.civs.us/cgi-bin/vote.pl?id=E_c3a85d1acd3e9feb&amp;amp;akey=dc65601945c5628c"&gt;Vox Pupuli elections, 2024&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you so much for your help!&lt;br&gt;
(original post from &lt;a class="mentioned-user" href="https://dev.to/binford2k"&gt;@binford2k&lt;/a&gt; at &lt;a href="https://voxpupuli.org/blog/2024/04/09/pmc-elections-voting-period/"&gt;voxpupuli.org&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>voxpupuli</category>
      <category>news</category>
      <category>community</category>
    </item>
    <item>
      <title>What it means to be a PMC member</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Mon, 19 Feb 2024 09:34:36 +0000</pubDate>
      <link>https://forem.com/voxpupuli/what-it-means-to-be-a-pmc-member-169m</link>
      <guid>https://forem.com/voxpupuli/what-it-means-to-be-a-pmc-member-169m</guid>
      <description>&lt;p&gt;The upcoming Project Management Committee (PMC) elections are drawing near, prompting a reflection on the essence of committee membership.&lt;/p&gt;

&lt;p&gt;In essence, being part of the PMC revolves around fostering an environment of excellence and collaboration. TL;DR: Strive to embody these principles and actively contribute to adaptation and enhancement!&lt;/p&gt;

&lt;p&gt;Having served on the PMC for a year now, I've encountered no major issues. But what constitutes a problem, you may wonder? Allow me to elaborate briefly: As a committee member, one of your primary responsibilities is maintaining peace and harmony within our chat rooms and forums. Should tensions arise, your role is to defuse conflicts and, if necessary, take measures such as user bans. Fortunately, such interventions have not been required within the Vox Pupuli community, which prides itself on its serene, inclusive atmosphere. Over my two years of increasing involvement, I've yet to witness a situation necessitating moderator (PMC member) intervention. For guidance on conduct, our &lt;a href="https://voxpupuli.org/coc/"&gt;Code of Conduct&lt;/a&gt; can provide valuable insights.&lt;/p&gt;

&lt;p&gt;In addition to responsibilities, PMC membership also grants certain privileges. One such privilege is administrative access on GitHub. However, as the adage goes, "with great power comes great responsibility!" This access is bestowed upon members to facilitate the migration of others to Vox Pupuli or to manage organizational settings. Tasks may include adding new members on GitHub or implementing changes suggested directly on the platform.&lt;/p&gt;

&lt;p&gt;Curious about the current PMC team? &lt;a href="https://github.com/orgs/voxpupuli/teams/project-maintainers/members"&gt;Meet them here&lt;/a&gt;. These individuals were elected last year. If you're considering joining, you can submit your application via the plumbing repository on GitHub. Simply create a pull request and add yourself or nominate someone else. For example: &lt;a href="https://github.com/voxpupuli/plumbing/pull/283"&gt;My nomination by @tuxmea&lt;/a&gt;. Yes, you read that correctly – you can also nominate others whom you believe would be valuable additions to the PMC.&lt;/p&gt;

&lt;p&gt;For a comprehensive overview of PMC membership duties, refer to our &lt;a href="https://github.com/voxpupuli/plumbing/blob/master/share/governance.md"&gt;Governance Document&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>community</category>
      <category>voxpupuli</category>
      <category>pmc</category>
    </item>
    <item>
      <title>Vox Pupuli is now also on dev.to</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Fri, 16 Feb 2024 12:52:38 +0000</pubDate>
      <link>https://forem.com/voxpupuli/vox-pupuli-is-now-also-on-devto-1o9f</link>
      <guid>https://forem.com/voxpupuli/vox-pupuli-is-now-also-on-devto-1o9f</guid>
      <description>&lt;p&gt;As of today, we've officially joined dev.to, a leading platform for tech and development blogging. In addition to our established blog on &lt;a href="https://voxpupuli.org/posts/"&gt;voxpupuli.org&lt;/a&gt;, we'll be expanding our reach to include dev.to. Stay tuned for upcoming posts, including insights into the Project Management Committee (PMC) election and the significance of being part of the PMC. These initial posts mark the beginning of our journey on both platforms, and we're excited to see where it takes us.&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>community</category>
      <category>voxpupuli</category>
    </item>
    <item>
      <title>Puppet und Kubernetes</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Wed, 09 Aug 2023 14:46:17 +0000</pubDate>
      <link>https://forem.com/betadots/puppet-und-kubernetes-42of</link>
      <guid>https://forem.com/betadots/puppet-und-kubernetes-42of</guid>
      <description>&lt;p&gt;Heute zeigen wir, wie man einen Kubernetes Cluster mit Puppet aufsetzen und verwalten kann.&lt;/p&gt;

&lt;h2&gt;
  
  
  Puppet Modul Auswahl
&lt;/h2&gt;

&lt;p&gt;Es gibt einige Puppet Module auf der &lt;a href="https://forge.puppet.com"&gt;Puppet Forge&lt;/a&gt;, mit denen man Kubernetes verwalten kann.&lt;br&gt;
So findet man unter anderem die Module &lt;a href="https://forge.puppet.com/modules/puppetlabs/kubernetes"&gt;Puppetlabs Kubernetes&lt;/a&gt; und &lt;a href="https://forge.puppet.com/modules/puppet/k8s"&gt;Voxpupuli k8s&lt;/a&gt;.&lt;br&gt;
Alle weiteren Module haben seit geraumer Zeit keine Aktualisierungen mehr erhalten. Daher betrachten wir diese Module als verwaist.&lt;/p&gt;

&lt;p&gt;Hinweis: auf dem &lt;a href="https://cfgmgmtcamp.eu/ghent2023"&gt;CfgMgmtCamp 2023&lt;/a&gt; hat die Puppet Open Source Community mit den Puppet Mitarbeitern geredet und darum gebeten, das puppetlabs-kubernetes Modul zu archivieren. Dieses Modul benötigt für das initiale Setup eine bereits laufende Kubernetes Umgebung und möchte die Konfiguration mit Hilfe eines besonderen Containers auslesen.&lt;/p&gt;

&lt;p&gt;Wir empfehlen dringend, das neue, moderne Voxpupuli k8s Modul zu verwenden.&lt;/p&gt;
&lt;h2&gt;
  
  
  Puppet-K8S Modul
&lt;/h2&gt;

&lt;p&gt;Mit dem Puppet K8S Modul kann man Controller Nodes und Worker Nodes einrichten. Beide benötigen dazu die Klasse &lt;code&gt;k8s&lt;/code&gt;.&lt;br&gt;
Alle Einstellungen können mit Hilfe von Hiera Daten vorgenommen werden. Dabei sind die Parameter über 3 Klassen verteilt:&lt;/p&gt;

&lt;p&gt;Allgemeine Daten: &lt;code&gt;k8s&lt;/code&gt; Klasse&lt;br&gt;
Controller Daten: &lt;code&gt;k8s::server&lt;/code&gt; Klasse&lt;br&gt;
Worker Daten: &lt;code&gt;k8s::node&lt;/code&gt; Klasse&lt;/p&gt;

&lt;p&gt;Ein einfacher Cluster benötigt die folgenden Parameter:&lt;/p&gt;
&lt;h3&gt;
  
  
  Kubernetes controller (apiserver, controller-manager und scheduler)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'server'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'http://controller-0.example.com:6443'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Das Setup der notwendigen etcd Server Instanzen kann auf 2 unterschiedliche Arten vorgenommen werden:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Statische Liste (FQDN)&lt;/li&gt;
&lt;li&gt;Verwendung von PuppetDB
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# PuppetDB&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="c1"&gt;# oder Liste&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::etcd_servers:&lt;/span&gt;
  &lt;span class="s"&gt;- 'https://node1:2379'&lt;/span&gt;
  &lt;span class="s"&gt;- 'https://node2:2379'&lt;/span&gt;
  &lt;span class="s"&gt;- 'https://node3:2379'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Das Erzeugen der für Kubernetes notwendigen Zertifikate kann das Modul übernehmen. Man kann auch bestehende Zertifikate hinterlegen.&lt;br&gt;
Beim Aufsetzen einer geclusterten Control Plane, muss man beachten, dass die Zertifikate des ersten Cluster Control Nodes auf die weiteren Control Nodes verteilt wird. Dies betrifft die folgenden Verzeichnisse:&lt;br&gt;
 &lt;code&gt;/etc/kubernetes/certs&lt;/code&gt; und &lt;code&gt;/var/lib/etcd/certs&lt;/code&gt;.&lt;br&gt;
 Die Verteilung ist noch nicht Bestandteil des Moduls.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::server::etcd::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kubernetes worker (kubelet)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'node'&lt;/span&gt;
&lt;span class="s"&gt;k82::master: 'https://controller-0.example.com:6443'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Beispiel für containerd und bridge networking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Controller
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'server'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt; &lt;span class="c1"&gt;# default&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt;

&lt;span class="s"&gt;k8s::manage_firewall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;    &lt;span class="c1"&gt;# default: false&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# default: false&lt;/span&gt;

&lt;span class="s"&gt;k8s::server::node_on_server: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;# don't use controller as worker&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::etcd::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# bind apiserver to a interface the worker and controller can communicate with&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::apiserver::advertise_address: "%{facts.networking.interfaces.enp0s8.ip}"&lt;/span&gt;

&lt;span class="c1"&gt;# flannel networking is default in the module&lt;/span&gt;
&lt;span class="c1"&gt;# but we want to showcase bridged networking here&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::manage_flannel: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt;

&lt;span class="s"&gt;k8s::service_cluster_cidr: '10.20.0.0/20'&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for cluster services&lt;/span&gt;
&lt;span class="s"&gt;k8s::cluster_cidr: '10.20.16.0/20'&lt;/span&gt;        &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Worker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'node'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt; &lt;span class="c1"&gt;# default&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt;

&lt;span class="s"&gt;k8s::manage_fireall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# the same as in k8s::server::resources::bootstrap::secret but prefixed with "puppet."&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::node_token: "puppet.%{lookup('k8s::server::resources::bootstrap::secret')}"&lt;/span&gt;

&lt;span class="c1"&gt;# for debugging&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::manage_crictl: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::install::crictl::config:&lt;/span&gt;
  &lt;span class="s"&gt;'runtime-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;
  &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;

&lt;span class="s"&gt;k8s::service_cluster_cidr: '10.20.0.0/20'&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for cluster services&lt;/span&gt;
&lt;span class="s"&gt;k8s::cluster_cidr: '10.20.16.0/20'&lt;/span&gt;        &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Shared data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;lookup_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;k8s::server::resources::bootstrap::secret:&lt;/span&gt;
    &lt;span class="s"&gt;convert_to&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Sensitive&lt;/span&gt;

&lt;span class="c1"&gt;# Sensitive[Pattern[/^[a-z0-9]{16}$/]]&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::bootstrap::secret: 'a23456789bcdefgh'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Beispiel für containerd und cilium
&lt;/h2&gt;

&lt;p&gt;Zuerst wird kube-proxy benötigt um ein initiales Setup zu erzeugen.&lt;br&gt;
Danach wird Cilium installiert, welches kube-proxy ersetzt.&lt;br&gt;
Nach der Cilium Installation kann kube-proxy wieder entfernt werden.&lt;/p&gt;
&lt;h3&gt;
  
  
  Controller
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'server'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt; &lt;span class="c1"&gt;# default&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt; &lt;span class="c1"&gt;# default: crio&lt;/span&gt;

&lt;span class="s"&gt;k8s::manage_firewall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;    &lt;span class="c1"&gt;# default: false&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# default: false&lt;/span&gt;

&lt;span class="s"&gt;k8s::server::node_on_server: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;# don't use controller as worker&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::etcd::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;


&lt;span class="c1"&gt;# bind apiserver to a interface the worker and controller can communicate with&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::apiserver::advertise_address: "%{facts.networking.interfaces.enp0s8.ip}"&lt;/span&gt;

&lt;span class="c1"&gt;# we want to showcase cilium here&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::manage_flannel: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Worker
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'node'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt;


&lt;span class="s"&gt;k8s::manage_firewall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# the same as in k8s::server::resources::bootstrap::secret but prefixed with "puppet."&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::node_token: "puppet.%{lookup('k8s::server::resources::bootstrap::secret')}"&lt;/span&gt;

&lt;span class="c1"&gt;# for debugging&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::manage_crictl: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::install::crictl::config:&lt;/span&gt;
  &lt;span class="s"&gt;'runtime-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;
  &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;

&lt;span class="s"&gt;k8s::service_cluster_cidr: '10.20.0.0/20'&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for cluster services&lt;/span&gt;
&lt;span class="s"&gt;k8s::cluster_cidr: '10.20.16.0/20'&lt;/span&gt;        &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Shared data
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;lookup_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;k8s::server::resources::bootstrap::secret:&lt;/span&gt;
    &lt;span class="s"&gt;convert_to&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Sensitive&lt;/span&gt;

&lt;span class="c1"&gt;# Sensitive[Pattern[/^[a-z0-9]{16}$/]]&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::bootstrap::secret: 'a23456789bcdefgh'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Nach dem initialen Setup kann Cilium installiert werden.&lt;/p&gt;
&lt;h3&gt;
  
  
  Initialize cilium
&lt;/h3&gt;

&lt;p&gt;⚠️ Alle hier genannten Schritte müssen auf EINEM der Controller ausgeführt werden!&lt;/p&gt;

&lt;p&gt;Das Cilium Paket muss heruntergeladen werden. Dies ist noch nicht Bestandteil des Moduls. Die notwendige Konfiguration erfolgt in der Datei cilium-values.yaml.&lt;/p&gt;

&lt;p&gt;Installation laut &lt;a href="https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/"&gt;cilium quick installation&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CILIUM_CLI_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"aarch64"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then &lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arm64&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;fi
&lt;/span&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;--fail&lt;/span&gt; &lt;span class="nt"&gt;--remote-name-all&lt;/span&gt; https://github.com/cilium/cilium-cli/releases/download/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CILIUM_CLI_VERSION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz&lt;span class="o"&gt;{&lt;/span&gt;,.sha256sum&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;sha256sum&lt;/span&gt; &lt;span class="nt"&gt;--check&lt;/span&gt; cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz.sha256sum
&lt;span class="nb"&gt;sudo tar &lt;/span&gt;xzvfC cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz /usr/local/bin
&lt;span class="nb"&gt;rm &lt;/span&gt;cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz&lt;span class="o"&gt;{&lt;/span&gt;,.sha256sum&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Die cilium-values.yaml Datei&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;k8sServiceHost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;controller-0.example.com&lt;/span&gt;
&lt;span class="na"&gt;k8sServicePort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6443&lt;/span&gt;
&lt;span class="na"&gt;autoDirectNodeRoutes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;rollOutCiliumPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;kubeProxyReplacement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;strict&lt;/span&gt;
&lt;span class="na"&gt;tunnel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;disabled&lt;/span&gt;
&lt;span class="na"&gt;ipv4NativeRoutingCIDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.20.16.0/20&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;span class="na"&gt;priorityClassName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;system-cluster-critical&lt;/span&gt;
&lt;span class="na"&gt;ipam&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kubernetes&lt;/span&gt;
&lt;span class="na"&gt;nodePort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;directRoutingDevice&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ens192&lt;/span&gt;
&lt;span class="na"&gt;bpf&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;clockProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;masquerade&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;tproxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;loadBalancer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hybrid&lt;/span&gt;
  &lt;span class="na"&gt;algorithm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;maglev&lt;/span&gt;
  &lt;span class="na"&gt;hashSeed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uWul3Twb7mKCmNSN&lt;/span&gt;
&lt;span class="na"&gt;hubble&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;relay&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;rollOutPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;ui&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;rollOutPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rollOutPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;prometheus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;hostPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;ipv4&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;ipv6&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;socketLB&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;prometheus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vor der Cilium Installation muss man prüfen, dass alle Worker Nodes verbunden sind. Diese können auch im Status NotReady sein.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# kubectl get nodes&lt;/span&gt;

NAME                   STATUS     ROLES    AGE   VERSION
worker-1.example.com   NotReady   &amp;lt;none&amp;gt;   83s   v1.26.4
worker-2.example.com   NotReady   &amp;lt;none&amp;gt;   83s   v1.26.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Installation von Cilium:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cilium &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--version&lt;/span&gt; v1.13.2 &lt;span class="nt"&gt;--helm-values&lt;/span&gt; /path/to/cilium-values.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ℹ️  Using Cilium version 1.13.2
🔮 Auto-detected cluster name: default
🔮 Auto-detected datapath mode: tunnel
🔮 Auto-detected kube-proxy has not been installed
ℹ️  Cilium will fully replace all functionalities of kube-proxy
ℹ️  helm template --namespace kube-system cilium cilium/cilium --version 1.13.2 --set autoDirectNodeRoutes=true,bpf.clockProbe=true,bpf.masquerade=true,bpf.tproxy=true,cluster.id=0,cluster.name=default,encryption.nodeEncryption=false,hostPort.enabled=true,hubble.relay.enabled=true,hubble.relay.rollOutPods=true,hubble.ui.enabled=true,hubble.ui.rollOutPods=true,ipam.mode=kubernetes,ipv4.enabled=true,ipv4NativeRoutingCIDR=10.20.16.0/20,ipv6.enabled=true,k8sServiceHost=localhost,k8sServicePort=6443,kubeProxyReplacement=strict,loadBalancer.algorithm=maglev,loadBalancer.hashSeed=uWul3Twb7mKCmNSN,loadBalancer.mode=hybrid,nodePort.directRoutingDevice=enp0s8,nodePort.enabled=true,operator.prometheus.enabled=true,operator.replicas=1,operator.rollOutPods=true,priorityClassName=system-cluster-critical,prometheus.enabled=true,rollOutCiliumPods=true,serviceAccounts.cilium.name=cilium,serviceAccounts.operator.name=cilium-operator,socketLB.enabled=true,tunnel=disabled
ℹ️  Storing helm values file in kube-system/cilium-cli-helm-values Secret
🔑 Created CA in secret cilium-ca
🔑 Generating certificates for Hubble...
🚀 Creating Service accounts...
🚀 Creating Cluster roles...
🚀 Creating ConfigMap for Cilium version 1.13.2...
🚀 Creating Agent DaemonSet...
🚀 Creating Operator Deployment...
⌛ Waiting for Cilium to be installed and ready...
✅ Cilium was successfully installed! Run 'cilium status' to view installation health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nun sollten alle Worker im Ready Status sein:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get nodes

NAME                   STATUS   ROLES    AGE   VERSION
worker-1.example.com   Ready    &amp;lt;none&amp;gt;   5m    v1.26.4
worker-2.example.com   Ready    &amp;lt;none&amp;gt;   5m    v1.26.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cilium status

    /¯¯&lt;span class="se"&gt;\&lt;/span&gt;
 /¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\ &lt;/span&gt;   Cilium:          OK
 &lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/    Operator:        OK
 /¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\ &lt;/span&gt;   Hubble Relay:    disabled
 &lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/    ClusterMesh:     disabled
    &lt;span class="se"&gt;\_&lt;/span&gt;_/

Deployment        cilium-operator    Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet         cilium             Desired: 1, Ready: 1/1, Available: 1/1
Containers:       cilium             Running: 1
                  cilium-operator    Running: 1
Cluster Pods:     1/1 managed by Cilium
Image versions    cilium             quay.io/cilium/cilium:v1.13.2@sha256:85708b11d45647c35b9288e0de0706d24a5ce8a378166cadc700f756cc1a38d6: 1
                  cilium-operator    quay.io/cilium/operator-generic:v1.13.2@sha256:a1982c0a22297aaac3563e428c330e17668305a41865a842dec53d241c5490ab: 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nach der erfolgreichen Installation von Cilium kann kube-proxy deinstalliert werden:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::server::resources::kube_proxy::ensure: absent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Weitere Dokumentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-k8s/blob/master/REFERENCE.md"&gt;Class reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Examples

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-k8s/blob/master/examples/simple_setup/Readme.md"&gt;Simple bridged setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-k8s/blob/master/examples/cilium/Readme.md"&gt;Cilium setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>puppet</category>
      <category>kubernetes</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Puppet and Kubernetes</title>
      <dc:creator>Robert Waffen</dc:creator>
      <pubDate>Wed, 09 Aug 2023 14:44:05 +0000</pubDate>
      <link>https://forem.com/betadots/puppet-and-kubernetes-182e</link>
      <guid>https://forem.com/betadots/puppet-and-kubernetes-182e</guid>
      <description>&lt;p&gt;Within this article we explain how one can make use of Puppet to deploy Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Puppet Module selection
&lt;/h2&gt;

&lt;p&gt;There are several Puppet Modules on the &lt;a href="https://forge.puppet.com"&gt;Puppet Forge&lt;/a&gt; which allow one to manage Kubernetes using Puppet.&lt;br&gt;
You will find the &lt;a href="https://forge.puppet.com/modules/puppetlabs/kubernetes"&gt;Puppetlabs Kubernetes&lt;/a&gt; and the &lt;a href="https://forge.puppet.com/modules/puppet/k8s"&gt;Voxpupuli k8s&lt;/a&gt;module.&lt;br&gt;
All other modules have not received an update for several years. We therefore consider these modules to be unmaintained.&lt;/p&gt;

&lt;p&gt;Sidenote: at &lt;a href="https://cfgmgmtcamp.eu/ghent2023"&gt;CfgMgmtCamp 2023&lt;/a&gt; the Puppet community asked the Puppet staff to please deprecate the puppetlabs-kubernetes module. This module requires to already have a kubernetes instance running and uses a container to read config which you can then use to configure kubernetes. Sounds like a hen-egg problem.&lt;/p&gt;

&lt;p&gt;We highly recommend to make use of the new, modern Voxpupuli Module.&lt;/p&gt;
&lt;h2&gt;
  
  
  Puppet-K8S Module
&lt;/h2&gt;

&lt;p&gt;The Puppet K8S Module is able to install control nodes and worker nodes. Both need the class &lt;code&gt;k8s&lt;/code&gt; within their node classification.&lt;br&gt;
All settings can be configured using hiera. Most parameters are spread over three classes: &lt;code&gt;k8s&lt;/code&gt; main class, &lt;code&gt;k8s::server&lt;/code&gt; and &lt;code&gt;k8s::node&lt;/code&gt; subclasses.&lt;/p&gt;

&lt;p&gt;A simple setup requires the following parameters&lt;/p&gt;
&lt;h3&gt;
  
  
  Kubernetes controller (apiserver, controller-manager and scheduler)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'server'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'http://controller-0.example.com:6443'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The setup of the etcd server instances is controlled via two different ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;provide a static list of etcd server fqdn&lt;/li&gt;
&lt;li&gt;use PuppetDB for etcd server discovery.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="c1"&gt;# or&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::etcd_servers:&lt;/span&gt;
  &lt;span class="s"&gt;- 'https://node1:2379'&lt;/span&gt;
  &lt;span class="s"&gt;- 'https://node2:2379'&lt;/span&gt;
  &lt;span class="s"&gt;- 'https://node3:2379'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you don't have pre-existing tls certificates you can use the generate features. This will auto generate all needed certificates for a cluster. On a single controller this is all you need. If you have a clustered control plane you need to somehow transfer the generated certs from the first controller from &lt;code&gt;/etc/kubernetes/certs&lt;/code&gt; and &lt;code&gt;/var/lib/etcd/certs&lt;/code&gt; to the other controllers. The cert distribution in a clustered setup is not part of the module yet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::server::etcd::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kubernetes worker (kubelet)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'node'&lt;/span&gt;
&lt;span class="s"&gt;k82::master: 'https://controller-0.example.com:6443'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example for containerd as cri and bridge networking as cni
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Controller
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'server'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt; &lt;span class="c1"&gt;# default&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt;

&lt;span class="s"&gt;k8s::manage_firewall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;    &lt;span class="c1"&gt;# default: false&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# default: false&lt;/span&gt;

&lt;span class="s"&gt;k8s::server::node_on_server: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;# don't use controller as worker&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::etcd::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# bind apiserver to a interface the worker and controller can communicate with&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::apiserver::advertise_address: "%{facts.networking.interfaces.enp0s8.ip}"&lt;/span&gt;

&lt;span class="c1"&gt;# flannel networking is default in the module&lt;/span&gt;
&lt;span class="c1"&gt;# but we want to showcase bridged networking here&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::manage_flannel: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt;

&lt;span class="s"&gt;k8s::service_cluster_cidr: '10.20.0.0/20'&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for cluster services&lt;/span&gt;
&lt;span class="s"&gt;k8s::cluster_cidr: '10.20.16.0/20'&lt;/span&gt;        &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Worker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'node'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt; &lt;span class="c1"&gt;# default&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt;

&lt;span class="s"&gt;k8s::manage_fireall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# the same as in k8s::server::resources::bootstrap::secret but prefixed with "puppet."&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::node_token: "puppet.%{lookup('k8s::server::resources::bootstrap::secret')}"&lt;/span&gt;

&lt;span class="c1"&gt;# for debugging&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::manage_crictl: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::install::crictl::config:&lt;/span&gt;
  &lt;span class="s"&gt;'runtime-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;
  &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;

&lt;span class="s"&gt;k8s::service_cluster_cidr: '10.20.0.0/20'&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for cluster services&lt;/span&gt;
&lt;span class="s"&gt;k8s::cluster_cidr: '10.20.16.0/20'&lt;/span&gt;        &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Shared data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;lookup_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;k8s::server::resources::bootstrap::secret:&lt;/span&gt;
    &lt;span class="s"&gt;convert_to&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Sensitive&lt;/span&gt;

&lt;span class="c1"&gt;# Sensitive[Pattern[/^[a-z0-9]{16}$/]]&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::bootstrap::secret: 'a23456789bcdefgh'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example data for containerd as cri and cilium as cni
&lt;/h2&gt;

&lt;p&gt;In the first place we need kube-proxy to get an initial setup working.&lt;br&gt;
After this we will install cilium, which will completly replace kube-proxy.&lt;br&gt;
After the installation of cilium we can remove kube-proxy.&lt;/p&gt;
&lt;h3&gt;
  
  
  Controller
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'server'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt; &lt;span class="c1"&gt;# default&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt; &lt;span class="c1"&gt;# default: crio&lt;/span&gt;

&lt;span class="s"&gt;k8s::manage_firewall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;    &lt;span class="c1"&gt;# default: false&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# default: false&lt;/span&gt;

&lt;span class="s"&gt;k8s::server::node_on_server: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;# don't use controller as worker&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::etcd::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::generate_ca: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;


&lt;span class="c1"&gt;# bind apiserver to a interface the worker and controller can communicate with&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::apiserver::advertise_address: "%{facts.networking.interfaces.enp0s8.ip}"&lt;/span&gt;

&lt;span class="c1"&gt;# we want to showcase cilium here&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::manage_flannel: &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Worker
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::role: 'node'&lt;/span&gt;
&lt;span class="s"&gt;k8s::master: 'https://controller-0.example.com:6443'&lt;/span&gt;
&lt;span class="s"&gt;k8s::container_manager: 'containerd'&lt;/span&gt;


&lt;span class="s"&gt;k8s::manage_firewall: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::puppetdb_discovery: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# the same as in k8s::server::resources::bootstrap::secret but prefixed with "puppet."&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::node_token: "puppet.%{lookup('k8s::server::resources::bootstrap::secret')}"&lt;/span&gt;

&lt;span class="c1"&gt;# for debugging&lt;/span&gt;
&lt;span class="s"&gt;k8s::node::manage_crictl: &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;k8s::install::crictl::config:&lt;/span&gt;
  &lt;span class="s"&gt;'runtime-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;
  &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image-endpoint'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unix:///run/containerd/containerd.sock'&lt;/span&gt;

&lt;span class="s"&gt;k8s::service_cluster_cidr: '10.20.0.0/20'&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for cluster services&lt;/span&gt;
&lt;span class="s"&gt;k8s::cluster_cidr: '10.20.16.0/20'&lt;/span&gt;        &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Shared data
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;lookup_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;k8s::server::resources::bootstrap::secret:&lt;/span&gt;
    &lt;span class="s"&gt;convert_to&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Sensitive&lt;/span&gt;

&lt;span class="c1"&gt;# Sensitive[Pattern[/^[a-z0-9]{16}$/]]&lt;/span&gt;
&lt;span class="s"&gt;k8s::server::resources::bootstrap::secret: 'a23456789bcdefgh'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If this setup is deployed like that, we can now deploy cilium.&lt;/p&gt;
&lt;h3&gt;
  
  
  Initialize cilium
&lt;/h3&gt;

&lt;p&gt;⚠️ All steps here are done on one of the controllers.&lt;/p&gt;

&lt;p&gt;Download the cilium binary. This is not included in the module yet. Most likely you also need some configuration then for cilium. So create a cilium-values.yaml&lt;/p&gt;

&lt;p&gt;Taken from the &lt;a href="https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/"&gt;cilium quick installation&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CILIUM_CLI_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"aarch64"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then &lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arm64&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;fi
&lt;/span&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;--fail&lt;/span&gt; &lt;span class="nt"&gt;--remote-name-all&lt;/span&gt; https://github.com/cilium/cilium-cli/releases/download/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CILIUM_CLI_VERSION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz&lt;span class="o"&gt;{&lt;/span&gt;,.sha256sum&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;sha256sum&lt;/span&gt; &lt;span class="nt"&gt;--check&lt;/span&gt; cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz.sha256sum
&lt;span class="nb"&gt;sudo tar &lt;/span&gt;xzvfC cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz /usr/local/bin
&lt;span class="nb"&gt;rm &lt;/span&gt;cilium-linux-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLI_ARCH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.tar.gz&lt;span class="o"&gt;{&lt;/span&gt;,.sha256sum&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The cilium-values.yaml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;k8sServiceHost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;controller-0.example.com&lt;/span&gt;
&lt;span class="na"&gt;k8sServicePort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6443&lt;/span&gt;
&lt;span class="na"&gt;autoDirectNodeRoutes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;rollOutCiliumPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;kubeProxyReplacement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;strict&lt;/span&gt;
&lt;span class="na"&gt;tunnel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;disabled&lt;/span&gt;
&lt;span class="na"&gt;ipv4NativeRoutingCIDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.20.16.0/20&lt;/span&gt; &lt;span class="c1"&gt;# overlay network for the pods in the cluster&lt;/span&gt;
&lt;span class="na"&gt;priorityClassName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;system-cluster-critical&lt;/span&gt;
&lt;span class="na"&gt;ipam&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kubernetes&lt;/span&gt;
&lt;span class="na"&gt;nodePort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;directRoutingDevice&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ens192&lt;/span&gt;
&lt;span class="na"&gt;bpf&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;clockProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;masquerade&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;tproxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;loadBalancer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hybrid&lt;/span&gt;
  &lt;span class="na"&gt;algorithm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;maglev&lt;/span&gt;
  &lt;span class="na"&gt;hashSeed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uWul3Twb7mKCmNSN&lt;/span&gt;
&lt;span class="na"&gt;hubble&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;relay&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;rollOutPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;ui&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;rollOutPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rollOutPods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;prometheus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;hostPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;ipv4&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;ipv6&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;socketLB&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;prometheus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before running the cilium install, check if all worker nodes are connected to the cluster. They may be in a NotReady state, but this is okay for now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# kubectl get nodes&lt;/span&gt;

NAME                   STATUS     ROLES    AGE   VERSION
worker-1.example.com   NotReady   &amp;lt;none&amp;gt;   83s   v1.26.4
worker-2.example.com   NotReady   &amp;lt;none&amp;gt;   83s   v1.26.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Installing cilium with the values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cilium &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--version&lt;/span&gt; v1.13.2 &lt;span class="nt"&gt;--helm-values&lt;/span&gt; /path/to/cilium-values.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ℹ️  Using Cilium version 1.13.2
🔮 Auto-detected cluster name: default
🔮 Auto-detected datapath mode: tunnel
🔮 Auto-detected kube-proxy has not been installed
ℹ️  Cilium will fully replace all functionalities of kube-proxy
ℹ️  helm template --namespace kube-system cilium cilium/cilium --version 1.13.2 --set autoDirectNodeRoutes=true,bpf.clockProbe=true,bpf.masquerade=true,bpf.tproxy=true,cluster.id=0,cluster.name=default,encryption.nodeEncryption=false,hostPort.enabled=true,hubble.relay.enabled=true,hubble.relay.rollOutPods=true,hubble.ui.enabled=true,hubble.ui.rollOutPods=true,ipam.mode=kubernetes,ipv4.enabled=true,ipv4NativeRoutingCIDR=10.20.16.0/20,ipv6.enabled=true,k8sServiceHost=localhost,k8sServicePort=6443,kubeProxyReplacement=strict,loadBalancer.algorithm=maglev,loadBalancer.hashSeed=uWul3Twb7mKCmNSN,loadBalancer.mode=hybrid,nodePort.directRoutingDevice=enp0s8,nodePort.enabled=true,operator.prometheus.enabled=true,operator.replicas=1,operator.rollOutPods=true,priorityClassName=system-cluster-critical,prometheus.enabled=true,rollOutCiliumPods=true,serviceAccounts.cilium.name=cilium,serviceAccounts.operator.name=cilium-operator,socketLB.enabled=true,tunnel=disabled
ℹ️  Storing helm values file in kube-system/cilium-cli-helm-values Secret
🔑 Created CA in secret cilium-ca
🔑 Generating certificates for Hubble...
🚀 Creating Service accounts...
🚀 Creating Cluster roles...
🚀 Creating ConfigMap for Cilium version 1.13.2...
🚀 Creating Agent DaemonSet...
🚀 Creating Operator Deployment...
⌛ Waiting for Cilium to be installed and ready...
✅ Cilium was successfully installed! Run 'cilium status' to view installation health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now all worker nodes should be in a Ready state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get nodes

NAME                   STATUS   ROLES    AGE   VERSION
worker-1.example.com   Ready    &amp;lt;none&amp;gt;   5m    v1.26.4
worker-2.example.com   Ready    &amp;lt;none&amp;gt;   5m    v1.26.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cilium status

    /¯¯&lt;span class="se"&gt;\&lt;/span&gt;
 /¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\ &lt;/span&gt;   Cilium:          OK
 &lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/    Operator:        OK
 /¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\ &lt;/span&gt;   Hubble Relay:    disabled
 &lt;span class="se"&gt;\_&lt;/span&gt;_/¯¯&lt;span class="se"&gt;\_&lt;/span&gt;_/    ClusterMesh:     disabled
    &lt;span class="se"&gt;\_&lt;/span&gt;_/

Deployment        cilium-operator    Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet         cilium             Desired: 1, Ready: 1/1, Available: 1/1
Containers:       cilium             Running: 1
                  cilium-operator    Running: 1
Cluster Pods:     1/1 managed by Cilium
Image versions    cilium             quay.io/cilium/cilium:v1.13.2@sha256:85708b11d45647c35b9288e0de0706d24a5ce8a378166cadc700f756cc1a38d6: 1
                  cilium-operator    quay.io/cilium/operator-generic:v1.13.2@sha256:a1982c0a22297aaac3563e428c330e17668305a41865a842dec53d241c5490ab: 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After successfully installing cilium, we can now disable kube-proxy. We don't need it anymore. Therefor set on the controller the following key and value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;k8s::server::resources::kube_proxy::ensure: absent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-k8s/blob/master/REFERENCE.md"&gt;Class reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Examples

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-k8s/blob/master/examples/simple_setup/Readme.md"&gt;Simple bridged setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/voxpupuli/puppet-k8s/blob/master/examples/cilium/Readme.md"&gt;Cilium setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>puppet</category>
      <category>kubernetes</category>
      <category>automation</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
