<?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: Nikith </title>
    <description>The latest articles on Forem by Nikith  (@nikithlive).</description>
    <link>https://forem.com/nikithlive</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%2F1393276%2F7020dcda-453e-4f35-878d-6a236f1577e1.jpeg</url>
      <title>Forem: Nikith </title>
      <link>https://forem.com/nikithlive</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nikithlive"/>
    <language>en</language>
    <item>
      <title>Using a Service Mesh in Kubernetes</title>
      <dc:creator>Nikith </dc:creator>
      <pubDate>Tue, 23 Dec 2025 00:14:26 +0000</pubDate>
      <link>https://forem.com/nikithlive/using-a-service-mesh-in-kubernetes-4dgd</link>
      <guid>https://forem.com/nikithlive/using-a-service-mesh-in-kubernetes-4dgd</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Service meshes can automate the process of providing additional security, reliability, and functionality around your containers. In this tutorial, you will be able to see how a service mesh works up close by exploring how the service mesh interacts with a simple application.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Explore the Linkerd Dashboard
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Copy the public IP address of the Kubernetes server from the lab.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open a new browser Insert the public IP of  Kubernetes server in place of  in the web address below:&lt;/p&gt;

&lt;p&gt;http://&amp;lt;****&amp;gt;:30080&lt;br&gt;
Copy and paste the resulting address into your browser's address bar. This should bring you to the Linkerd dashboard for the Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;Under HTTP Metrics, click default. This should let you see our two deployments, which have not been meshed with Linkerd yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2663u9gy4ag1fwya3j9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2663u9gy4ag1fwya3j9.png" alt="Local Host" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjwnm5ktgsx0dafd4vfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjwnm5ktgsx0dafd4vfz.png" alt="Default" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Mesh the Application with Linkerd
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;access the Kubernetes control plane node.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzccphf2xmflcsi2ecs8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzccphf2xmflcsi2ecs8.png" alt="SSH" width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffep5fiwrsgzfafmuegqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffep5fiwrsgzfafmuegqm.png" alt="info" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Get a list of the deployments in the default Namespace in YAML format, inject Linkerd's configuration into the YAML, and apply those changes using kubectl apply&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get -n default deploy -o yaml | \
  linkerd inject - | \
  kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;This should reconfigure the deployments so that Linkerd can inject the sidecar proxies.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v66yrxxuzlwhtudq8em.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v66yrxxuzlwhtudq8em.png" alt="kubectl" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;changes made&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegh8avm653a221p3ldtr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegh8avm653a221p3ldtr.png" alt="loading" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pods are meshed&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyb5mfmdq4hy2gisdynz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyb5mfmdq4hy2gisdynz5.png" alt="pods" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Explore the Changes to Application Components Made by Linkerd
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;View the list of Pods:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv838rdwnx603whjqaqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv838rdwnx603whjqaqu.png" alt="pods_get" width="800" height="157"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloud_user@k8s-control:~$ kubectl describe pod terrapin-client-dep-666cf6cdfd-ghz29
Name:         terrapin-client-dep-666cf6cdfd-ghz29
Namespace:    default
Priority:     0
Node:         k8s-worker1/10.0.1.102
Start Time:   Mon, 22 Dec 2025 23:55:02 +0000
Labels:       app=terrapin-client
              linkerd.io/control-plane-ns=linkerd
              linkerd.io/proxy-deployment=terrapin-client-dep
              linkerd.io/workload-ns=default
              pod-template-hash=666cf6cdfd
Annotations:  cni.projectcalico.org/containerID: 8e32df1bf505e17d7dd7e84883d6fe56c9c0c5d48eb6df9e1eba7d5dace9b5b0
              cni.projectcalico.org/podIP: 192.168.194.81/32
              cni.projectcalico.org/podIPs: 192.168.194.81/32
              linkerd.io/created-by: linkerd/proxy-injector stable-2.11.1
              linkerd.io/identity-mode: default
              linkerd.io/inject: enabled
              linkerd.io/proxy-version: stable-2.11.1
              viz.linkerd.io/tap-enabled: true
Status:       Running
IP:           192.168.194.81
IPs:
  IP:           192.168.194.81
Controlled By:  ReplicaSet/terrapin-client-dep-666cf6cdfd
Init Containers:
  linkerd-init:
    Container ID:  containerd://0c1e6c79651831846eb35abd56353c8195b74192bab00f0442d4012bac4bb717
    Image:         cr.l5d.io/linkerd/proxy-init:v1.4.0
    Image ID:      cr.l5d.io/linkerd/proxy-init@sha256:60d12fbb0b4a53962a5c2a59b496b3ee20052d26c0c56fd2ee38fd7fae62146e
    Port:          &amp;lt;none&amp;gt;
    Host Port:     &amp;lt;none&amp;gt;
    Args:
      --incoming-proxy-port
      4143
      --outgoing-proxy-port
      4140
      --proxy-uid
      2102
      --inbound-ports-to-ignore
      4190,4191,4567,4568
      --outbound-ports-to-ignore
      4567,4568
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 22 Dec 2025 23:55:04 +0000
      Finished:     Mon, 22 Dec 2025 23:55:04 +0000
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     100m
      memory:  50Mi
    Requests:
      cpu:        10m
      memory:     10Mi
    Environment:  &amp;lt;none&amp;gt;
    Mounts:
      /run from linkerd-proxy-init-xtables-lock (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-q45w2 (ro)
Containers:
  linkerd-proxy:
    Container ID:   containerd://79e2aee1789f786dbe749e0ee200afc8db2d33b46296d2d2c1da39204a44a5a4
    Image:          cr.l5d.io/linkerd/proxy:stable-2.11.1
    Image ID:       cr.l5d.io/linkerd/proxy@sha256:91b53d4b39e4c058e5fc63b72dd7ab6fe7f7051869ec5251dc9c0d8287b2771f
    Ports:          4143/TCP, 4191/TCP
    Host Ports:     0/TCP, 0/TCP
    State:          Running
      Started:      Mon, 22 Dec 2025 23:55:06 +0000
    Ready:          True
    Restart Count:  0
    Liveness:       http-get http://:4191/live delay=10s timeout=1s period=10s #success=1 #failure=3
    Readiness:      http-get http://:4191/ready delay=2s timeout=1s period=10s #success=1 #failure=3
    Environment:
      _pod_name:                                                terrapin-client-dep-666cf6cdfd-ghz29 (v1:metadata.name)
      _pod_ns:                                                  default (v1:metadata.namespace)
      _pod_nodeName:                                             (v1:spec.nodeName)
      LINKERD2_PROXY_LOG:                                       warn,linkerd=info
      LINKERD2_PROXY_LOG_FORMAT:                                plain
      LINKERD2_PROXY_DESTINATION_SVC_ADDR:                      linkerd-dst-headless.linkerd.svc.cluster.local.:8086
      LINKERD2_PROXY_DESTINATION_PROFILE_NETWORKS:              10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16
      LINKERD2_PROXY_POLICY_SVC_ADDR:                           linkerd-policy.linkerd.svc.cluster.local.:8090
      LINKERD2_PROXY_POLICY_WORKLOAD:                           $(_pod_ns):$(_pod_name)
      LINKERD2_PROXY_INBOUND_DEFAULT_POLICY:                    all-unauthenticated
      LINKERD2_PROXY_POLICY_CLUSTER_NETWORKS:                   10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16
      LINKERD2_PROXY_INBOUND_CONNECT_TIMEOUT:                   100ms
      LINKERD2_PROXY_OUTBOUND_CONNECT_TIMEOUT:                  1000ms
      LINKERD2_PROXY_CONTROL_LISTEN_ADDR:                       0.0.0.0:4190
      LINKERD2_PROXY_ADMIN_LISTEN_ADDR:                         0.0.0.0:4191
      LINKERD2_PROXY_OUTBOUND_LISTEN_ADDR:                      127.0.0.1:4140
      LINKERD2_PROXY_INBOUND_LISTEN_ADDR:                       0.0.0.0:4143
      LINKERD2_PROXY_INBOUND_IPS:                                (v1:status.podIPs)
      LINKERD2_PROXY_DESTINATION_PROFILE_SUFFIXES:              svc.cluster.local.
      LINKERD2_PROXY_INBOUND_ACCEPT_KEEPALIVE:                  10000ms
      LINKERD2_PROXY_OUTBOUND_CONNECT_KEEPALIVE:                10000ms
      LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION:  25,587,3306,4444,5432,6379,9300,11211
      LINKERD2_PROXY_DESTINATION_CONTEXT:                       {"ns":"$(_pod_ns)", "nodeName":"$(_pod_nodeName)"}

      _pod_sa:                                                   (v1:spec.serviceAccountName)
      _l5d_ns:                                                  linkerd
      _l5d_trustdomain:                                         cluster.local
      LINKERD2_PROXY_IDENTITY_DIR:                              /var/run/linkerd/identity/end-entity
      LINKERD2_PROXY_IDENTITY_TRUST_ANCHORS:                    -----BEGIN CERTIFICATE-----
                                                                MIIBiDCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
                                                                eS5saW5rZXJkLjAeFw0yNTEyMjIyMzM4NDlaFw0yNjEyMjIyMzM5MDlaMBwxGjAY
                                                                BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
                                                                QgAE94d/0iTwQe7HZkt2fwFwSrietAUlwg9VwgCdeMYlaOrx30cj8+jy/fJJdEvH
                                                                sjsWl5HcG10FPn99fEulz4JmIKNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
                                                                MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
                                                                BBRK/cAaNL05Lrepa6yUQxff49kfGTAKBggqhkjOPQQDAgNIADBFAiEAr1e+6hCh
                                                                kTBROQE6uDal2CRvtkl6rHOjLTOzueKIVPICIBQYOccdiDWTbEi4qWjhrX++aExU
                                                                bg9xL9dtUmhs9EVA
                                                                -----END CERTIFICATE-----

      LINKERD2_PROXY_IDENTITY_TOKEN_FILE:                       /var/run/secrets/kubernetes.io/serviceaccount/token
      LINKERD2_PROXY_IDENTITY_SVC_ADDR:                         linkerd-identity-headless.linkerd.svc.cluster.local.:8080
      LINKERD2_PROXY_IDENTITY_LOCAL_NAME:                       $(_pod_sa).$(_pod_ns).serviceaccount.identity.linkerd.cluster.local
      LINKERD2_PROXY_IDENTITY_SVC_NAME:                         linkerd-identity.linkerd.serviceaccount.identity.linkerd.cluster.local
      LINKERD2_PROXY_DESTINATION_SVC_NAME:                      linkerd-destination.linkerd.serviceaccount.identity.linkerd.cluster.local
      LINKERD2_PROXY_POLICY_SVC_NAME:                           linkerd-destination.linkerd.serviceaccount.identity.linkerd.cluster.local
      LINKERD2_PROXY_TAP_SVC_NAME:                              tap.linkerd-viz.serviceaccount.identity.linkerd.cluster.local
    Mounts:
      /var/run/linkerd/identity/end-entity from linkerd-identity-end-entity (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-q45w2 (ro)
  busybox:
    Container ID:  containerd://4d090b5d52f2ed1ee7b19d4172f203aea60837ae30c8136b9e063550dbd06d29
    Image:         radial/busyboxplus:curl
    Image ID:      sha256:4776f1f7d1f625c8c5173a969fdc9ae6b62655a2746aba989784bb2b7edbfe9b
    Port:          &amp;lt;none&amp;gt;
    Host Port:     &amp;lt;none&amp;gt;
    Command:
      sh
      -c
      while true; do curl -s terrapin-web-svc; sleep 5; done
    State:          Running
      Started:      Mon, 22 Dec 2025 23:55:07 +0000
    Ready:          True
    Restart Count:  0
    Environment:    &amp;lt;none&amp;gt;
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-q45w2 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-q45w2:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       &amp;lt;nil&amp;gt;
    DownwardAPI:             true
  linkerd-proxy-init-xtables-lock:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  &amp;lt;unset&amp;gt;
  linkerd-identity-end-entity:
    Type:        EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:      Memory
    SizeLimit:   &amp;lt;unset&amp;gt;
QoS Class:       Burstable
Node-Selectors:  &amp;lt;none&amp;gt;
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  4m32s  default-scheduler  Successfully assigned default/terrapin-client-dep-666cf6cdfd-ghz29 to k8s-worker1
  Normal  Pulled     4m32s  kubelet            Container image "cr.l5d.io/linkerd/proxy-init:v1.4.0" already present on machine
  Normal  Created    4m30s  kubelet            Created container linkerd-init
  Normal  Started    4m30s  kubelet            Started container linkerd-init
  Normal  Pulled     4m29s  kubelet            Container image "cr.l5d.io/linkerd/proxy:stable-2.11.1" already present on machine
  Normal  Created    4m28s  kubelet            Created container linkerd-proxy
  Normal  Started    4m28s  kubelet            Started container linkerd-proxy
  Normal  Pulled     4m28s  kubelet            Container image "radial/busyboxplus:curl" already present on machine
  Normal  Created    4m27s  kubelet            Created container busybox
  Normal  Started    4m27s  kubelet            Started container busybox
cloud_user@k8s-control:~$ 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;side car attached&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farue03irb6ekbz3yhkid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farue03irb6ekbz3yhkid.png" alt="sidecar" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Kubernetes GitOps with Flux</title>
      <dc:creator>Nikith </dc:creator>
      <pubDate>Mon, 22 Dec 2025 19:45:32 +0000</pubDate>
      <link>https://forem.com/nikithlive/kubernetes-gitops-with-flux-916</link>
      <guid>https://forem.com/nikithlive/kubernetes-gitops-with-flux-916</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvjrpa0m6c94qmdeuc8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvjrpa0m6c94qmdeuc8u.png" alt="GitOps Arc" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a GitHub Personal Access Token
&lt;/h3&gt;

&lt;p&gt;Open a new browser tab or window and navigate to github.com.&lt;br&gt;
Create a new account and password on GitHub, or, if you already have a GitHub account, log in to GitHub.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the upper right corner, click your avatar.&lt;/li&gt;
&lt;li&gt;In the dropdown menu, click Settings.&lt;/li&gt;
&lt;li&gt;In the left-hand menu, click Developer settings.&lt;/li&gt;
&lt;li&gt;Click Personal access tokens.&lt;/li&gt;
&lt;li&gt;Click the Generate a personal access token link.&lt;/li&gt;
&lt;li&gt;If prompted, reenter your password and click Confirm password.&lt;/li&gt;
&lt;li&gt;Under Note, enter a descriptive note for your personal access token (for example, acg-flux-lab).&lt;/li&gt;
&lt;li&gt;Under Select scopes, click the check box next to repo.&lt;/li&gt;
&lt;li&gt;Click Generate token.&lt;/li&gt;
&lt;li&gt;Copy the generated personal access token.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7buypjsi1jsol5o9h5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7buypjsi1jsol5o9h5h.png" alt="Token" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Bootstrap the Git Repository
&lt;/h3&gt;

&lt;p&gt;In the lab's server, bootstrap the Git repository. Be sure to substitute your own GitHub username where it says &lt;/p&gt;

&lt;p&gt;flux bootstrap github --owner= --repository=acg-flux-lab --branch=main --path=./clusters/my-cluster --personal&lt;br&gt;
This will create a new GitHub repository with the name acg-flux-lab.&lt;/p&gt;

&lt;p&gt;When prompted, paste in your personal access token.&lt;/p&gt;

&lt;p&gt;Return to the browser tab or window with GitHub.&lt;/p&gt;

&lt;p&gt;Navigate to the web address github.com//acg-flux-lab. You should see you have a repository here that was created by Flux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfod2cwnqexvs4fmwkf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfod2cwnqexvs4fmwkf3.png" alt="CLI" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvewn79ozluv24op158w0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvewn79ozluv24op158w0.png" alt="REPO" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;YAML MANIFEST&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1r7b7zp8neu7knrxs29b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1r7b7zp8neu7knrxs29b.png" alt="YML" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Create a Deployment via the GitHub Repository Using Flux
&lt;/h3&gt;

&lt;p&gt;In your acg-flux-lab repository in GitHub, click Add files.&lt;/p&gt;

&lt;p&gt;In the dropdown menu, select Create new file.&lt;/p&gt;

&lt;p&gt;Enter clusters to create the file inside the clusters directory.&lt;/p&gt;

&lt;p&gt;Enter my-cluster to create the file inside the clusters/my-cluster directory.&lt;/p&gt;

&lt;p&gt;Enter turtle-deployment.yaml to name the file turtle-deployment.yaml.&lt;/p&gt;

&lt;p&gt;Under Edit new file, put in the following YAML manifest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: turtle-deployment
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: turtle
  template:
    metadata:
      labels:
        app: turtle
    spec: 
      containers:
      - name: nginx
        image: nginx:stable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;!Initial](&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/saq629ut5o4zdq3ak953.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/saq629ut5o4zdq3ak953.png&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Commit&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdhmzbemm6gl2ihchqq3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdhmzbemm6gl2ihchqq3.png" alt="Commmited" width="800" height="736"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;kubectl get pods&lt;br&gt;
kubectl get deployments&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrf96tfosgadb1ese8f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrf96tfosgadb1ese8f0.png" alt="CLI" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/NIK8H/acg-flux-lab" rel="noopener noreferrer"&gt;https://github.com/NIK8H/acg-flux-lab&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://app.pluralsight.com/" rel="noopener noreferrer"&gt;https://app.pluralsight.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Exploring Log and Metric Data in Kubernetes</title>
      <dc:creator>Nikith </dc:creator>
      <pubDate>Mon, 22 Dec 2025 18:50:59 +0000</pubDate>
      <link>https://forem.com/nikithlive/exploring-log-and-metric-data-in-kubernetes-3bmc</link>
      <guid>https://forem.com/nikithlive/exploring-log-and-metric-data-in-kubernetes-3bmc</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Observability is critical to any cloud native application. In this tutorial, you will be able to get hands-on with observability in Kubernetes. You will practice retrieving various kinds of metric data from a Kubernetes cluster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym04rb0xiq9xnq2040zj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym04rb0xiq9xnq2040zj.png" alt="Overview" width="800" height="364"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Welcome to TortoiseCorp! We work to build the future of fruit, lettuce, and heat lamps.

We have an application running in the cluster, and we want to be able to retrieve some data about the application so that we can better understand how it is performing. You will need to retrieve the requested data about the application.

This will help us make some decisions about how we can continue to build and optimize our code!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Collect Logs from a Container
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Collect logs from the container named &lt;em&gt;lettuce&lt;/em&gt; from the Pod named &lt;em&gt;food&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl logs food -c lettuce
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Terminal&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7c41j4yiu8pn3x4yay2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7c41j4yiu8pn3x4yay2.png" alt="Terminal" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  View Metric Data about Compute Resources Used by Pods
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
View metric data about the compute resource usage by the Pods in the default namespace:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;kubectl top pods&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywtbyh5h1ttlzwxk0axc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywtbyh5h1ttlzwxk0axc.png" alt="top pods" width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
From the list of Pods and their CPU usage, identify which Pod has the highest CPU usage by looking at the name of the Pod that has the highest value under CPU(cores).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://app.pluralsight.com/" rel="noopener noreferrer"&gt;https://app.pluralsight.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Deploying a Cloud Resource in AWS with Ansible and Terraform</title>
      <dc:creator>Nikith </dc:creator>
      <pubDate>Fri, 19 Dec 2025 01:44:20 +0000</pubDate>
      <link>https://forem.com/nikithlive/deploying-a-cloud-resource-in-aws-with-ansible-and-terraform-543o</link>
      <guid>https://forem.com/nikithlive/deploying-a-cloud-resource-in-aws-with-ansible-and-terraform-543o</guid>
      <description>&lt;h2&gt;
  
  
  Ansible Approach
&lt;/h2&gt;

&lt;p&gt;In this article, we will use Ansible to launch EC2 instances in different availability zones. The launch_ec2_instances.yml playbook defines three tasks: the first to get the subnet facts, the next to set the subnet IDs and availability zones, and a final task responsible for launching an EC2 instance into two specific subnets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa14xhco73q30nj8m9n3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa14xhco73q30nj8m9n3u.png" alt="Outline" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh cloud_user@&amp;lt;PUBLIC_IP_ADDRESS&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fou8765wixbvj4h05jmtk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fou8765wixbvj4h05jmtk.png" alt="SSH" width="571" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Launch EC2 Instances with YAML Playbook using Ansible
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Launch in us-east-1&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the AMI ID into the image:&amp;lt;******&amp;gt; into the launch_ec2_instances.yml file &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;touch launch_ec2_instances.yml&lt;/code&gt;&lt;br&gt;
&lt;code&gt;vim launch_ec2_instances.yml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- name: Launch EC2 Instances
  hosts: localhost
  gather_facts: false
  vars_files:
    - /home/ansible/keys.yml

  tasks:
    - name: Get Subnet Facts
      ec2_vpc_subnet_info:
        aws_access_key: "{{ AWS_ACCESS_KEY_ID }}"
        aws_secret_key: "{{ AWS_SECRET_ACCESS_KEY }}"
        region: us-east-1
      register: subnet_facts

    - name: Set Subnet IDs and Availability Zones
      set_fact:
        subnet_ids: "{{ subnet_facts.subnets|map(attribute='id')|list }}"
        availability_zones: "{{ subnet_facts.subnets|map(attribute='availability_zone')|list }}"

    - name: Launch EC2 Instances in Each Subnet
      ec2:
        aws_access_key: "{{ AWS_ACCESS_KEY_ID }}"
        aws_secret_key: "{{ AWS_SECRET_ACCESS_KEY }}"
        ec2_region: us-east-1
        instance_type: t2.micro
        image: ami-026ebd4cfe2c043b2
        vpc_subnet_id: "{{ item }}"
        wait: true
      loop: "{{ subnet_ids }}"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Execute the Playbook&lt;br&gt;
&lt;code&gt;ansible-playbook launch_ec2_instances.yml&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since I had 2 subnets Two EC2 instances will be created&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qeqptwb90mj9qzya8pa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qeqptwb90mj9qzya8pa.png" alt="EC2 Running" width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Terraform Approach
&lt;/h2&gt;

&lt;p&gt;I used terraform data source. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You don’t rebuild the building, and you don’t change its structure you simply read where the walls, doors, and wiring already are so your new room fits perfectly. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the same way, a data source lets Terraform look at existing infrastructure (like a VPC, subnet, or AMI) and use that information to safely build something new without disturbing what’s already there.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CONFIGURE AWS WITH CLI&lt;br&gt;
&lt;code&gt;installed packages&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dnf install -y awscli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;USED GITHUB CODESPACES&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash-5.1# cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftevmx71ty9tt9hd02yml.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftevmx71ty9tt9hd02yml.png" alt="CODESPACES" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;main.tf&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-east-1"
}

data "aws_vpc" "selected" {
  id = "vpc-06110468de1ae8d0f"
}

data "aws_subnet" "selected" {
  vpc_id = data.aws_vpc.selected.id
  availability_zone = "us-east-1a"
}

data "aws_ami" "amazon_linux" {
  most_recent = true

  owners = ["amazon"]

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }

  filter {
    name   = "state"
    values = ["available"]
  }
}

resource "aws_instance" "example" {
  ami           = data.aws_ami.amazon_linux.id
  instance_type = "t2.micro"

  subnet_id              = data.aws_subnet.selected.id
  vpc_security_group_ids = [aws_security_group.ec2_sg.id]

  tags = {
    Name = "terraform-ec2"
  }
}


resource "aws_security_group" "ec2_sg" {
  name        = "terraform-ec2-sg"
  description = "Allow SSH"
  vpc_id      = data.aws_vpc.selected.id

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;cli&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash-5.1# terraform apply
data.aws_vpc.selected: Reading...
data.aws_ami.amazon_linux: Reading...
data.aws_vpc.selected: Read complete after 0s [id=vpc-06110468de1ae8d0f]
data.aws_subnet.selected: Reading...
data.aws_subnet.selected: Read complete after 0s [id=subnet-00e24cf4555b3ca63]
data.aws_ami.amazon_linux: Read complete after 0s [id=ami-03f9680ef0c07a3d1]

Terraform used the selected providers to generate
the following execution plan. Resource actions are
indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.example will be created
  + resource "aws_instance" "example" {
      + ami                                  = "ami-03f9680ef0c07a3d1"
      + arn                                  = (known after apply)
      + associate_public_ip_address          = (known after apply)
      + availability_zone                    = (known after apply)
      + disable_api_stop                     = (known after apply)
      + disable_api_termination              = (known after apply)
      + ebs_optimized                        = (known after apply)
      + enable_primary_ipv6                  = (known after apply)
      + force_destroy                        = false
      + get_password_data                    = false
      + host_id                              = (known after apply)
      + host_resource_group_arn              = (known after apply)
      + iam_instance_profile                 = (known after apply)
      + id                                   = (known after apply)
      + instance_initiated_shutdown_behavior = (known after apply)
      + instance_lifecycle                   = (known after apply)
      + instance_state                       = (known after apply)
      + instance_type                        = "t2.micro"
      + ipv6_address_count                   = (known after apply)
      + ipv6_addresses                       = (known after apply)
      + key_name                             = (known after apply)
      + monitoring                           = (known after apply)
      + outpost_arn                          = (known after apply)
      + password_data                        = (known after apply)
      + placement_group                      = (known after apply)
      + placement_group_id                   = (known after apply)
      + placement_partition_number           = (known after apply)
      + primary_network_interface_id         = (known after apply)
      + private_dns                          = (known after apply)
      + private_ip                           = (known after apply)
      + public_dns                           = (known after apply)
      + public_ip                            = (known after apply)
      + region                               = "us-east-1"
      + secondary_private_ips                = (known after apply)
      + security_groups                      = (known after apply)
      + source_dest_check                    = true
      + spot_instance_request_id             = (known after apply)
      + subnet_id                            = "subnet-00e24cf4555b3ca63"
      + tags                                 = {
          + "Name" = "terraform-ec2"
        }
      + tags_all                             = {
          + "Name" = "terraform-ec2"
        }
      + tenancy                              = (known after apply)
      + user_data_base64                     = (known after apply)
      + user_data_replace_on_change          = false
      + vpc_security_group_ids               = (known after apply)

      + capacity_reservation_specification (known after apply)

      + cpu_options (known after apply)

      + ebs_block_device (known after apply)

      + enclave_options (known after apply)

      + ephemeral_block_device (known after apply)

      + instance_market_options (known after apply)

      + maintenance_options (known after apply)

      + metadata_options (known after apply)

      + network_interface (known after apply)

      + primary_network_interface (known after apply)

      + private_dns_name_options (known after apply)

      + root_block_device (known after apply)
    }

  # aws_security_group.ec2_sg will be created
  + resource "aws_security_group" "ec2_sg" {
      + arn                    = (known after apply)
      + description            = "Allow SSH"
      + egress                 = [
          + {
              + cidr_blocks      = [
                  + "0.0.0.0/0",
                ]
              + from_port        = 0
              + ipv6_cidr_blocks = []
              + prefix_list_ids  = []
              + protocol         = "-1"
              + security_groups  = []
              + self             = false
              + to_port          = 0
                # (1 unchanged attribute hidden)
            },
        ]
      + id                     = (known after apply)
      + ingress                = [
          + {
              + cidr_blocks      = [
                  + "0.0.0.0/0",
                ]
              + from_port        = 22
              + ipv6_cidr_blocks = []
              + prefix_list_ids  = []
              + protocol         = "tcp"
              + security_groups  = []
              + self             = false
              + to_port          = 22
                # (1 unchanged attribute hidden)
            },
        ]
      + name                   = "terraform-ec2-sg"
      + name_prefix            = (known after apply)
      + owner_id               = (known after apply)
      + region                 = "us-east-1"
      + revoke_rules_on_delete = false
      + tags_all               = (known after apply)
      + vpc_id                 = "vpc-06110468de1ae8d0f"
    }

Plan: 2 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_security_group.ec2_sg: Creating...
aws_security_group.ec2_sg: Creation complete after 1s [id=sg-09d80c75597b8624d]
aws_instance.example: Creating...
aws_instance.example: Still creating... [00m10s elapsed]
aws_instance.example: Still creating... [00m20s elapsed]
aws_instance.example: Still creating... [00m30s elapsed]
aws_instance.example: Creation complete after 32s [id=i-07e8658ca12915abf]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Fetch VPC-ID&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash-5.1# aws ec2 describe-vpcs
{
    "Vpcs": [
        {
            "OwnerId": "080763862064",
            "InstanceTenancy": "default",
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-assoc-0c2a3ddbd5c6aa364",
                    "CidrBlock": "10.0.0.0/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "IsDefault": false,
            "Tags": [
                {
                    "Key": "aws:cloudformation:logical-id",
                    "Value": "VPC"
                },
                {
                    "Key": "Name",
                    "Value": "LinuxAcademy"
                },
                {
                    "Key": "aws:cloudformation:stack-id",
                    "Value": "arn:aws:cloudformation:us-east-1:080763862064:stack/cfst-4150-d757e6fc0ddc7949940f7ec1f4710dd8b2bdf1fecd5f43946c84cb1649b24e2a/1d83daf0-dc6a-11f0-8dbd-123b45f64b33"
                },
                {
                    "Key": "Network",
                    "Value": "VPC"
                },
                {
                    "Key": "Application",
                    "Value": "cfst-4150-d757e6fc0ddc7949940f7ec1f4710dd8b2bdf1fecd5f43946c84cb1649b24e2a"
                },
                {
                    "Key": "UserId",
                    "Value": "24701544"
                },
                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "cfst-4150-d757e6fc0ddc7949940f7ec1f4710dd8b2bdf1fecd5f43946c84cb1649b24e2a"
                }
            ],
            "BlockPublicAccessStates": {
                "InternetGatewayBlockMode": "off"
            },
            "VpcId": "vpc-0b76c79b6a607cb38",
            "State": "available",
            "CidrBlock": "10.0.0.0/16",
            "DhcpOptionsId": "dopt-079e42f1be6dd68a4"
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;fetch subnet&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "cfst-4150-cf678142718819a066a9339ffe1e112471fc9e300512621571a366cc45a4129d"
                },
                {
                    "Key": "Application",
                    "Value": "cfst-4150-cf678142718819a066a9339ffe1e112471fc9e300512621571a366cc45a4129d"
                },
                {
                    "Key": "Network",
                    "Value": "Public2"
                }
            ],
            "SubnetArn": "arn:aws:ec2:us-east-1:143108796152:subnet/subnet-0dcaed3327867a837",
            "EnableDns64": false,
            "Ipv6Native": false,
            "PrivateDnsNameOptionsOnLaunch": {
                "HostnameType": "ip-name",
                "EnableResourceNameDnsARecord": false,
                "EnableResourceNameDnsAAAARecord": false
            },
            "BlockPublicAccessStates": {
                "InternetGatewayBlockMode": "off"
            },
            "SubnetId": "subnet-0dcaed3327867a837",
            "State": "available",
            "VpcId": "vpc-06110468de1ae8d0f",
            "CidrBlock": "10.0.2.0/24",
            "AvailableIpAddressCount": 251,
            "AvailabilityZone": "us-east-1b",
            "DefaultForAz": false,
            "MapPublicIpOnLaunch": false
        }
    ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Successfully launched EC2 instance with terraform approach &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67f4fryslx313uaz0roi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67f4fryslx313uaz0roi.png" alt="Terraform EC2" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
Pluralsight Hands-on Lab – AWS / Cloud Infrastructure Lab
&lt;a href="https://app.pluralsight.com/hands-on/labs/4dd1d104-d54e-4351-bc6c-bc8be053ec42" rel="noopener noreferrer"&gt;https://app.pluralsight.com/hands-on/labs/4dd1d104-d54e-4351-bc6c-bc8be053ec42&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>7-Star Review: Switching from Windows to Mac Trackpad Review (With Real 16-Week Experience)</title>
      <dc:creator>Nikith </dc:creator>
      <pubDate>Sun, 07 Dec 2025 03:31:17 +0000</pubDate>
      <link>https://forem.com/nikithlive/7-star-review-switching-from-windows-to-mac-trackpad-review-with-real-16-week-experience-17n5</link>
      <guid>https://forem.com/nikithlive/7-star-review-switching-from-windows-to-mac-trackpad-review-with-real-16-week-experience-17n5</guid>
      <description>&lt;p&gt;Switching from Windows to Mac was something I expected to be simple, but I had no idea that the biggest upgrade wouldn’t be the UI, the apps, or even the ecosystem — it would be the trackpad.&lt;/p&gt;

&lt;p&gt;In this honest, real-world Switching from Windows to Mac trackpad review, I’ll walk you through my 16-week experience, why I completely stopped using a mouse, and how the Mac trackpad became the most enjoyable part of my workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;My 16-Week Experience After Switching to Mac&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I have used Windows laptops for years, so when I first touched the Mac trackpad, I had a feeling it would be different — but I didn’t expect it to be this different.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1. I No Longer Needed a Mouse&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After about three to four weeks, something surprising happened:&lt;br&gt;
I realized I hadn’t touched my mouse at all.&lt;/p&gt;

&lt;p&gt;The Mac trackpad was so responsive and accurate that everything from coding, writing documents to extensive chrome usage became almost effortless.&lt;/p&gt;

&lt;p&gt;It wasn’t just usable…&lt;br&gt;
It was enjoyable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;2. The Seamless Feel&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first thing I noticed?&lt;br&gt;
The trackpad feels butterly smooth (yes, I had to practice muscle memory with my fingers).&lt;/p&gt;

&lt;p&gt;Gliding my fingers across it felt like sliding across polished glass with zero resistance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;3. Faster Than Expected&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;By week 16, I was navigating faster than ever before.&lt;br&gt;
Gestures became second nature, especially:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Three-finger swipe to switch full-screen apps&lt;/li&gt;
&lt;li&gt;Four-finger swipe for Mission Control&lt;/li&gt;
&lt;li&gt;Pinch to zoom like using a smartphone&lt;/li&gt;
&lt;li&gt;It made everything feel intuitive and natural.&lt;/li&gt;
&lt;li&gt;The Magical Feel of the Mac Trackpad&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Apple’s mac trackpad isn’t just a surface; it’s a precision tool.&lt;br&gt;
The build and responsiveness create a satisfying “almost physical” feel because of the Haptic Engine underneath.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;No moving parts (unlike most Windows laptops)&lt;/li&gt;
&lt;li&gt;Uniform click sensation anywhere on the pad&lt;/li&gt;
&lt;li&gt;Smooth, friction-balanced surface&lt;/li&gt;
&lt;li&gt;Almost zero input delay&lt;/li&gt;
&lt;li&gt;This explains why designers, programmers, and editors swear by it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Gesture Controls That Changed My Daily Workflow
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Two-Finger Pinch to Zoom&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is easily my favorite gesture.&lt;br&gt;
It works exactly like a smartphone — pinch in, pinch out, effortlessly zooming photos, web pages, PDFs, or design layouts.&lt;/p&gt;

&lt;p&gt;It feels so natural that switching back to a Windows laptop made me miss it instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two-Finger Tap → Extra Options&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This simple gesture brings up extra options just like a right-click…&lt;br&gt;
Except it's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Softer&lt;/li&gt;
&lt;li&gt;Faster&lt;/li&gt;
&lt;li&gt;More reliable&lt;/li&gt;
&lt;li&gt;No awkward pressure or clicking involved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Smooth Scrolling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mac scrolling feels alive.&lt;br&gt;
Windows scrolling feels mechanical.&lt;/p&gt;

&lt;p&gt;There’s no contest.&lt;/p&gt;
&lt;h3&gt;
  
  
  More Customizable Gestures in Trackpad Settings
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;macOS makes gesture customization incredibly easy:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Three-finger drag&lt;/li&gt;
&lt;li&gt;Two-finger horizontal navigation&lt;/li&gt;
&lt;li&gt;App Exposé&lt;/li&gt;
&lt;li&gt;Desktop switching&lt;/li&gt;
&lt;li&gt;Notification Center&lt;/li&gt;
&lt;li&gt;Launchpad access&lt;/li&gt;
&lt;li&gt;Force Click shortcuts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The menu is so simple that the customization takes seconds, not minutes.&lt;/p&gt;

&lt;p&gt;Compared to Windows, where gesture menus vary by brand (Dell vs. HP vs. Lenovo), macOS is clean and consistent.&lt;/p&gt;
&lt;h3&gt;
  
  
  Force Touch Trackpads: Pressure Sensitivity That Windows Lacks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Mac trackpad isn't just a multi-gesture tool it’s a pressure-sensitive device.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Apple’s Force Touch can detect different pressure levels, enabling:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hard-press dictionary lookup&lt;/li&gt;
&lt;li&gt;Force-click previews&lt;/li&gt;
&lt;li&gt;Link previews in Safari&lt;/li&gt;
&lt;li&gt;Timeline scrubbing in video apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;But here’s something even cooler:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An open-source macOS app called TrackWeight can read the pressure sensitivity — and display it in grams.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes, the trackpad can literally measure how hard you press.&lt;br&gt;
Windows laptops simply don’t have an equivalent.&lt;/p&gt;

&lt;p&gt;Windows trackpads have improved with Precision Drivers — but they’re still far behind.&lt;/p&gt;

&lt;p&gt;How the Mac Trackpad Boosted My Productivity&lt;/p&gt;

&lt;p&gt;Throughout my 16-week journey, the Mac trackpad helped me work faster:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Zooming instantly during editing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Switching desktops with gestures&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dragging files with three fingers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Browsing with soft two-finger taps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigating spreadsheets effortlessly&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It removed the constant “move, click, reposition” dance that mice require.&lt;/p&gt;
&lt;h3&gt;
  
  
  My Favorite Gestures (Daily Use)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Two-finger zoom → For PDFs, design, browsing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Three-finger drag → For files and text selection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Four-finger swipe → Mission Control&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Two-finger swipe → Back/forward in Safari&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Force click → Quick previews&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These gestures alone saved countless seconds every day.&lt;/p&gt;
&lt;h3&gt;
  
  
  Downsides &amp;amp; Learning Curve
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Even with all the positives, there were a few hurdles:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One issue I noticed during my Switching from Windows to Mac trackpad review was the challenge of accurately selecting text using the traditional click-and-drag gesture. When I click and hold at the start of a sentence and slide my finger to highlight, the selection often jumps too far, starts in the wrong spot, or triggers a multi-page scroll. This makes it hard to select text with precision, especially when dealing with long paragraphs or code lines. To avoid mistakes, I often have to drag very slowly, which interrupts workflow and feels less efficient than using a traditional mouse. While macOS gestures are usually fluid and intuitive, text selection remains one of the few areas where the Mac trackpad still feels slightly unpredictable&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;It took about 1–2 weeks to adjust&lt;/li&gt;
&lt;li&gt;Accidental gestures at first&lt;/li&gt;
&lt;li&gt;Some apps don’t support Force Touch&lt;/li&gt;
&lt;li&gt;Sensitivity tweaks needed early on&lt;/li&gt;
&lt;li&gt;But everything became natural quickly.&lt;/li&gt;
&lt;li&gt;Who Should Switch to the Mac Trackpad?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you belong to any of these groups, the Mac trackpad will feel life-changing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Students&lt;/li&gt;
&lt;li&gt;Video/photo editors&lt;/li&gt;
&lt;li&gt;Writers&lt;/li&gt;
&lt;li&gt;Office professionals&lt;/li&gt;
&lt;li&gt;Web developers&lt;/li&gt;
&lt;li&gt;Creatives&lt;/li&gt;
&lt;li&gt;Productivity enthusiasts&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;TrackWeight is open-source; you can find it on GitHub.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Example external reference: https://github.com/ahkohd/TrackWeight
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Switching from Windows to Mac changed how I work, but the biggest and most pleasant surprise was the trackpad. It’s not just more comfortable — it’s an entirely different interaction method.&lt;/p&gt;

&lt;p&gt;From buttery-smooth gestures to pressure sensitivity and full customization, this trackpad proved itself to be more than a tool; it became my favorite part of the Mac experience.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Day I Realized More Data Isn’t Better Data: Takeaways From Cribl’s SRE Webinar</title>
      <dc:creator>Nikith </dc:creator>
      <pubDate>Wed, 19 Nov 2025 03:05:02 +0000</pubDate>
      <link>https://forem.com/nikithlive/the-day-i-realized-more-data-isnt-better-data-takeaways-from-cribls-sre-webinar-214e</link>
      <guid>https://forem.com/nikithlive/the-day-i-realized-more-data-isnt-better-data-takeaways-from-cribls-sre-webinar-214e</guid>
      <description>&lt;p&gt;&lt;strong&gt;"3 Ways to Optimize Uptime, Observability Costs &amp;amp; Sanity"&lt;/strong&gt;&lt;br&gt;
 &lt;br&gt;
It was a webinar hosted by Cribl discussing why most engineering teams struggle with data noise, slow insights, and rising telemetry costs, and how to fix it.&lt;br&gt;
 &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Reliability isn’t about more data; it’s about the right data in motion.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alert fatigue is real. SRE and OPS teams are drowning in low-value alerts, false positives, and noisy telemetry that hides critical signals.&lt;br&gt;
 &lt;br&gt;
Too many tools/products result in more problems. Platform teams juggle monitoring stacks with inconsistent formats, fragile pipelines, and more misconfigurations to chase.&lt;br&gt;
 &lt;br&gt;
Infra/App teams run lean. With limited staff and tight budgets, gaps or delays in telemetry directly threaten uptime and SLA performance.&lt;br&gt;
 &lt;br&gt;
SRE Team Approach&lt;br&gt;
(SRE at Cribl) shared how they stay focused on meaningful signals using:&lt;br&gt;
 &lt;br&gt;
·      Early filtering &amp;amp; drop rules to cut volumes before they reach costly storage&lt;br&gt;
 &lt;br&gt;
·      Aggregation &amp;amp; rollup metrics to match destination intervals&lt;br&gt;
 &lt;br&gt;
·      Sampling to reduce 80–99% of unnecessary logs&lt;br&gt;
 &lt;br&gt;
·      On-demand enrichment &amp;amp; routing via a central control plane&lt;br&gt;
 &lt;br&gt;
·      Real-time toggling of pipelines during incidents without re-deploys&lt;br&gt;
 &lt;br&gt;
·     Edge agents to collect only the data that matters, exactly when needed.&lt;/p&gt;

&lt;p&gt;The SRE Team also mentioned the importance of Cribl Edge for smarter metrics collection. &lt;br&gt;
 &lt;br&gt;
Cribl SRE team uses &lt;strong&gt;&lt;em&gt;Cribl Edge&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://cribl.io/blog/how-the-cribl-sre-team-uses-cribl-edge-to-collect-metrics/" rel="noopener noreferrer"&gt;&lt;em&gt;Crible Edge&lt;/em&gt;&lt;/a&gt; to simplify and scale metrics collection. It’s a great example of modern observability done right by following principles such as One agent for everything, Prometheus without the overhead, Logs &amp;amp; APIs become metrics. &lt;br&gt;
&lt;strong&gt;&lt;em&gt;Cribl Edge&lt;/em&gt;&lt;/strong&gt; gives SREs &amp;amp; Platform Engineers a scalable, cost-efficient way to control observability data without modifying applications or deploying dozens of exporters.&lt;/p&gt;

</description>
      <category>cribl</category>
      <category>sre</category>
      <category>observability</category>
      <category>telemetry</category>
    </item>
  </channel>
</rss>
