Skip to content

Commit 98a1a9b

Browse files
committed
Deploy Puppet on Google Cloud C4A (Arm-based Axion VMs)
Signed-off-by: odidev <[email protected]>
1 parent e4b7f5a commit 98a1a9b

File tree

8 files changed

+452
-0
lines changed

8 files changed

+452
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
title: Deploy Puppet on Google Cloud C4A (Arm-based Axion VMs)
3+
4+
minutes_to_complete: 30
5+
6+
who_is_this_for: This learning path is intended for software developers deploying Puppet on Linux/Arm64 environments, specifically using Google Cloud C4A virtual machines powered by Axion processors.
7+
8+
learning_objectives:
9+
- Provision an Arm-based SUSE SLES virtual machine on Google Cloud (C4A with Axion processors)
10+
- Install Puppet on a SUSE Arm64 (C4A) instance
11+
- Verify Puppet by applying a test manifest and confirming successful resource creation on Arm64
12+
- Benchmark Puppet by measuring catalog compile time, apply speed, and resource usage on Arm64
13+
14+
prerequisites:
15+
- A [Google Cloud Platform (GCP)](https://cloud.google.com/free) account with billing enabled
16+
- Basic familiarity with [Puppet](https://www.puppet.com/)
17+
18+
author: Pareena Verma
19+
20+
##### Tags
21+
skilllevels: Introductory
22+
subjects: Performance and Architecture
23+
cloud_service_providers: Google Cloud
24+
25+
armips:
26+
- Neoverse
27+
28+
tools_software_languages:
29+
- Puppet
30+
- Ruby
31+
- Facter
32+
- Hiera
33+
34+
operatingsystems:
35+
- Linux
36+
37+
# ================================================================================
38+
# FIXED, DO NOT MODIFY
39+
# ================================================================================
40+
further_reading:
41+
- resource:
42+
title: Google Cloud documentation
43+
link: https://cloud.google.com/docs
44+
type: documentation
45+
46+
- resource:
47+
title: Puppet documentation
48+
link: https://www.puppet.com/docs/index.html
49+
type: documentation
50+
51+
weight: 1
52+
layout: "learningpathall"
53+
learning_path_main_page: "yes"
54+
---
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
# ================================================================================
3+
# FIXED, DO NOT MODIFY THIS FILE
4+
# ================================================================================
5+
weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation.
6+
title: "Next Steps" # Always the same, html page title.
7+
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
8+
---
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
title: Getting started with Puppet on Google Axion C4A (Arm Neoverse-V2)
3+
4+
weight: 2
5+
6+
layout: "learningpathall"
7+
---
8+
9+
## Google Axion C4A Arm instances in Google Cloud
10+
11+
Google Axion C4A is a family of Arm-based virtual machines built on Google’s custom Axion CPU, which is based on Arm Neoverse-V2 cores. Designed for high-performance and energy-efficient computing, these virtual machines offer strong performance for modern cloud workloads such as CI/CD pipelines, microservices, media processing, and general-purpose applications.
12+
13+
The C4A series provides a cost-effective alternative to x86 virtual machines while leveraging the scalability and performance benefits of the Arm architecture in Google Cloud.
14+
15+
To learn more about Google Axion, refer to the [Introducing Google Axion Processors, our new Arm-based CPUs](https://cloud.google.com/blog/products/compute/introducing-googles-new-arm-based-cpu) blog.
16+
17+
## Puppet
18+
19+
[Puppet](https://puppet.com/) is an **open-source configuration management and automation tool** designed to help system administrators and DevOps teams **manage infrastructure as code**. Developed by [Puppet Labs](https://puppet.com/company/), it automates the provisioning, configuration, and management of servers and services across large-scale environments.
20+
21+
Puppet uses a **declarative language** to define system configurations, ensuring that every machine’s state matches the desired setup described in its manifests. It supports both **agent-based** and **agentless** architectures, making it flexible for diverse deployment needs.
22+
23+
Known for its **scalability**, **reliability**, and **idempotent behavior**, Puppet continuously enforces configurations, reducing manual effort and configuration drift. It integrates well with major platforms like **Linux**, **Windows**, **macOS**, and cloud providers such as **AWS**, **Azure**, and **GCP**.
24+
25+
Common use cases include **automating server configuration**, **applying security policies**, **software installation**, and **infrastructure auditing**. Puppet is widely used in enterprises for managing **hybrid and multi-cloud environments** efficiently.
26+
27+
To learn more, visit the [official Puppet website](https://puppet.com/).
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
---
2+
title: Puppet Baseline Testing on Google Axion C4A Arm Virtual Machine
3+
weight: 5
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
9+
## Puppet Baseline Testing on GCP SUSE VMs
10+
In this guide, you will perform baseline testing of Puppet on a GCP SUSE Arm64 VM to verify that the installation works correctly. You will check Puppet and Facter versions, run basic Puppet commands, apply a simple manifest, and confirm that system facts are collected accurately.
11+
12+
### Verify Puppet Installation
13+
Check that Puppet and Facter are correctly installed and respond to version checks:
14+
15+
```console
16+
puppet --version
17+
facter --version
18+
ruby -v
19+
```
20+
### Run a Simple Puppet Command
21+
Check that Puppet responds to commands by running puppet help. Seeing the help menu confirms that Puppet is working properly.
22+
23+
```console
24+
puppet help
25+
```
26+
27+
Output:
28+
29+
```console
30+
Usage: puppet <subcommand> [options] <action> [options]
31+
32+
Available subcommands:
33+
34+
Common:
35+
agent The puppet agent daemon
36+
apply Apply Puppet manifests locally
37+
config Interact with Puppet's settings.
38+
help Display Puppet help.
39+
lookup Interactive Hiera lookup
40+
module Creates, installs and searches for modules on the Puppet Forge.
41+
resource The resource abstraction layer shell
42+
43+
44+
Specialized:
45+
catalog Compile, save, view, and convert catalogs.
46+
describe Display help about resource types
47+
device Manage remote network devices
48+
doc Generate Puppet references
49+
epp Interact directly with the EPP template parser/renderer.
50+
facts Retrieve and store facts.
51+
filebucket Store and retrieve files in a filebucket
52+
generate Generates Puppet code from Ruby definitions.
53+
node View and manage node definitions.
54+
parser Interact directly with the parser.
55+
plugin Interact with the Puppet plugin system.
56+
script Run a puppet manifests as a script without compiling a catalog
57+
ssl Manage SSL keys and certificates for puppet SSL clients
58+
59+
See 'puppet help <subcommand> <action>' for help on a specific subcommand action.
60+
See 'puppet help <subcommand>' for help on a specific subcommand.
61+
Puppet v8.10.0
62+
```
63+
64+
### Test a Simple Puppet Manifest
65+
Create and run a basic Puppet script to make sure Puppet can apply configurations. If it successfully creates the test file, your Puppet agent functions as expected.
66+
67+
```bash
68+
cat <<EOF > test.pp
69+
file { '/tmp/puppet_test.txt':
70+
ensure => file,
71+
content => "Hello from Puppet on SUSE ARM64!\n",
72+
}
73+
EOF
74+
```
75+
```console
76+
puppet apply test.pp
77+
```
78+
79+
You should see an output similar to:
80+
```output
81+
Notice: Compiled catalog for lpprojectsusearm64.c.imperial-time-463411-q5.internal in environment production in 0.01 seconds
82+
Notice: Applied catalog in 0.01 seconds
83+
```
84+
85+
**Then verify:**
86+
87+
Open the file created by Puppet to confirm the content matches your script. This step validates that Puppet executed your manifest correctly.
88+
89+
```console
90+
cat /tmp/puppet_test.txt
91+
```
92+
93+
Output:
94+
```output
95+
Hello from Puppet on SUSE ARM64!
96+
```
97+
98+
### Check Facter Integration
99+
Run `facter` commands to verify that it collects accurate system details like OS and CPU type. This ensures Puppet can gather the facts it needs for automation decisions.
100+
101+
```console
102+
facter os
103+
facter architecture
104+
facter processors
105+
```
106+
107+
Output:
108+
```output
109+
{
110+
architecture => "aarch64",
111+
distro => {
112+
codename => "n/a",
113+
description => "SUSE Linux Enterprise Server 15 SP6",
114+
id => "SUSE",
115+
release => {
116+
full => "15.6",
117+
major => "15",
118+
minor => "6"
119+
}
120+
},
121+
family => "Suse",
122+
hardware => "aarch64",
123+
name => "SLES",
124+
release => {
125+
full => "15.6",
126+
major => "15",
127+
minor => "6"
128+
},
129+
selinux => {
130+
enabled => false
131+
}
132+
}
133+
$ facter architecture
134+
aarch64
135+
$facter processors
136+
{
137+
cores => 4,
138+
count => 4,
139+
extensions => [
140+
"aarch64"
141+
],
142+
isa => "aarch64",
143+
models => [
144+
145+
],
146+
physicalcount => 1,
147+
threads => 1
148+
}
149+
```
150+
151+
With these checks complete, proceed to the Puppet benchmarking section to run workload‑focused tests on the GCP SUSE VMs.
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
---
2+
title: Puppet Benchmarking
3+
weight: 6
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
9+
10+
## Puppet Benchmark on GCP SUSE Arm64 VM
11+
12+
This guide explains how to perform a **Puppet standalone benchmark** on a **Google Cloud Platform (GCP) SUSE Linux Arm64 VM**.
13+
It measures Puppet’s local execution performance without requiring a Puppet Master.
14+
15+
16+
### Prerequisites
17+
Ensure Puppet is installed and working:
18+
19+
```console
20+
puppet --version
21+
```
22+
23+
### Create a Benchmark Manifest
24+
Create a directory and a simple manifest file:
25+
26+
```console
27+
mkdir -p ~/puppet-benchmark
28+
cd ~/puppet-benchmark
29+
vi benchmark.pp
30+
```
31+
32+
Add the following content to the `benchmark.pp`:
33+
34+
```puppet
35+
notify { 'Benchmark Test':
36+
message => 'Running Puppet standalone benchmark.',
37+
}
38+
```
39+
40+
- **notify** is a built-in Puppet resource type that displays a message during catalog application (like a print or log message).
41+
- **'Benchmark Test'** is the title of the resource — a unique identifier for this notify action.
42+
- **message => 'Running Puppet standalone benchmark.'** specifies the text message Puppet will print when applying the manifest.
43+
44+
### Run the Benchmark Command
45+
This step runs Puppet in standalone mode using the `apply` command to execute the benchmark manifest locally while measuring execution time and performance statistics.
46+
47+
```console
48+
time puppet apply benchmark.pp --verbose
49+
```
50+
This executes the manifest locally and outputs timing statistics.
51+
52+
You should see an output similar to:
53+
```output
54+
Notice: Compiled catalog for ########arm64.c.imperial-time-463411-q5.internal in environment production in 0.01 seconds
55+
Info: Using environment 'production'
56+
Info: Applying configuration version '1762160712'
57+
Notice: Running Puppet standalone benchmark.
58+
Notice: /Stage[main]/Main/Notify[Benchmark Test]/message: defined 'message' as 'Running Puppet standalone benchmark.'
59+
Notice: Applied catalog in 0.01 seconds
60+
61+
real 0m1.175s
62+
user 0m0.779s
63+
sys 0m0.385s
64+
```
65+
66+
### Benchmark Metrics Explanation
67+
68+
- **Compiled catalog** → Puppet compiled your manifest into an execution plan.
69+
- **Applied catalog** → Puppet executed the plan on your system.
70+
- **real** → Total elapsed wall time (includes CPU + I/O).
71+
- **user** → CPU time spent in user-space.
72+
- **sys** → CPU time spent in system calls.
73+
74+
### Benchmark summary on x86_64
75+
To compare the benchmark results, the following results were collected by running the same benchmark on a `x86 - c4-standard-4` (4 vCPUs, 15 GB Memory) x86_64 VM in GCP, running SUSE:
76+
77+
| Metric | Result |
78+
|---------|---------|
79+
| Compiled catalog | 0.01 seconds |
80+
| Environment | production |
81+
| Configuration version | 1762165786 |
82+
| Applied catalog | 0.01 seconds |
83+
| real | 0m1.072s |
84+
| user | 0m0.834s |
85+
| sys | 0m0.213s |
86+
87+
### Benchmark summary on Arm64
88+
Results from the earlier run on the `c4a-standard-4` (4 vCPU, 16 GB memory) Arm64 VM in GCP (SUSE):
89+
90+
| **Metric / Log** | **Output** |
91+
|-------------------|------------|
92+
| Compiled catalog | 0.01 seconds |
93+
| Environment | production |
94+
| Configuration version | 1762160712 |
95+
| Applied catalog | 0.01 seconds |
96+
| real | 0m1.175s |
97+
| user | 0m0.779s |
98+
| sys | 0m0.385s |
99+
100+
### Puppet benchmarking comparison on Arm64 and x86_64
101+
102+
- **Catalog compilation:** Completed in just **0.01 seconds**, showing excellent processing speed on **Arm64**.
103+
- **Environment:** Executed smoothly under the **production** environment.
104+
- **Configuration version:** Recorded as **1762160712**, confirming successful version tracking.
105+
- **Catalog application:** Finished in **0.01 seconds**, demonstrating very low execution latency.
106+
- **Real time:** Total runtime of **1.175 seconds**, reflecting efficient end.
261 KB
Loading

0 commit comments

Comments
 (0)