<?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>DEV Community: Samuel Arogbonlo</title>
    <description>The latest articles on DEV Community by Samuel Arogbonlo (@samuelarogbonlo_64).</description>
    <link>https://dev.to/samuelarogbonlo_64</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%2F317323%2F6c9cf01d-124d-4698-bb69-c72abdc00733.jpg</url>
      <title>DEV Community: Samuel Arogbonlo</title>
      <link>https://dev.to/samuelarogbonlo_64</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samuelarogbonlo_64"/>
    <language>en</language>
    <item>
      <title>Dynamic HTTP Server Configuration in Go with gorealconf</title>
      <dc:creator>Samuel Arogbonlo</dc:creator>
      <pubDate>Thu, 23 Jan 2025 09:55:35 +0000</pubDate>
      <link>https://dev.to/samuelarogbonlo_64/dynamic-http-server-configuration-in-go-with-gorealconf-2hn7</link>
      <guid>https://dev.to/samuelarogbonlo_64/dynamic-http-server-configuration-in-go-with-gorealconf-2hn7</guid>
      <description>&lt;p&gt;Managing configuration changes safely and efficiently is a critical challenge in today's cloud-native world. When building distributed systems, we often need to update configurations without downtime, ensure type safety, and roll out changes gradually. These requirements led me to create &lt;code&gt;gorealconf&lt;/code&gt;, a library that brings robust, type-safe configuration management to Go applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Challenges
&lt;/h2&gt;

&lt;p&gt;Before diving into gorealconf's features, let's understand the core challenges in modern configuration management:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Applications often require restarts to apply configuration changes&lt;/li&gt;
&lt;li&gt;Type safety is frequently sacrificed for flexibility&lt;/li&gt;
&lt;li&gt;Rolling out changes safely across distributed systems is complex&lt;/li&gt;
&lt;li&gt;Validating configuration changes and handling failures gracefully is difficult&lt;/li&gt;
&lt;li&gt;Monitoring and tracking configuration changes becomes unwieldy at scale&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;gorealconf addresses these challenges through thoughtful design and powerful features that make configuration management safer and more efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Features and Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Type Safety Through Go Generics
&lt;/h3&gt;

&lt;p&gt;One of gorealconf's fundamental strengths is its use of Go generics to ensure type safety at compile time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;DatabaseConfig&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;MaxConnections&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;           &lt;span class="s"&gt;`json:"max_connections"`&lt;/span&gt;
    &lt;span class="n"&gt;ReadTimeout&lt;/span&gt;    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Duration&lt;/span&gt; &lt;span class="s"&gt;`json:"read_timeout"`&lt;/span&gt;
    &lt;span class="n"&gt;WriteTimeout&lt;/span&gt;   &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Duration&lt;/span&gt; &lt;span class="s"&gt;`json:"write_timeout"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// Create a type-safe configuration instance&lt;/span&gt;
&lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;DatabaseConfig&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;
    &lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithValidation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;DatabaseConfig&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;validateConfig&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithRollback&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;DatabaseConfig&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="no"&gt;true&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;p&gt;This approach eliminates runtime type errors while maintaining a clean, intuitive API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-Time Configuration Updates
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;gorealconf&lt;/code&gt; enables zero-downtime configuration changes through its watch mechanism:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Watch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Background&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;newCfg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;range&lt;/span&gt; &lt;span class="n"&gt;changes&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;updateDatabaseConnections&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newCfg&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;p&gt;Changes propagate automatically to all components, ensuring consistency across your application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gradual Rollouts with Safety Controls
&lt;/h3&gt;

&lt;p&gt;One of gorealconf's most powerful features is its support for gradual rollouts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;rollout&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewRollout&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;FeatureConfig&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
    &lt;span class="n"&gt;WithStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewPercentageStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
    &lt;span class="n"&gt;WithValidation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validateFeature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
    &lt;span class="n"&gt;WithRollbackThreshold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// Rollback if error rate exceeds 1%&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows you to safely test configuration changes with a subset of your instances before full deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Applications
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dynamic HTTP Server Configuration
&lt;/h3&gt;

&lt;p&gt;Here's how &lt;code&gt;gorealconf&lt;/code&gt; can manage a production HTTP server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;ServerConfig&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Port&lt;/span&gt;         &lt;span class="kt"&gt;int&lt;/span&gt;           &lt;span class="s"&gt;`json:"port"`&lt;/span&gt;
    &lt;span class="n"&gt;ReadTimeout&lt;/span&gt;  &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Duration&lt;/span&gt; &lt;span class="s"&gt;`json:"read_timeout"`&lt;/span&gt;
    &lt;span class="n"&gt;WriteTimeout&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Duration&lt;/span&gt; &lt;span class="s"&gt;`json:"write_timeout"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ServerConfig&lt;/span&gt;&lt;span class="p"&gt;]()&lt;/span&gt;

    &lt;span class="c"&gt;// Initialize server with configuration&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c"&gt;// Watch for configuration updates&lt;/span&gt;
    &lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Watch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Background&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;handleConfigChanges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c"&gt;// Start server&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&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;
  
  
  Feature Flag Management
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;gorealconf&lt;/code&gt; excels at managing feature flags and A/B testing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;FeatureFlags&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;NewUI&lt;/span&gt;          &lt;span class="kt"&gt;bool&lt;/span&gt;    &lt;span class="s"&gt;`json:"new_ui"`&lt;/span&gt;
    &lt;span class="n"&gt;BetaFeatures&lt;/span&gt;   &lt;span class="kt"&gt;bool&lt;/span&gt;    &lt;span class="s"&gt;`json:"beta_features"`&lt;/span&gt;
    &lt;span class="n"&gt;RolloutPercent&lt;/span&gt; &lt;span class="kt"&gt;float64&lt;/span&gt; &lt;span class="s"&gt;`json:"rollout_percent"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;rollout&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewRollout&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;FeatureFlags&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
    &lt;span class="n"&gt;WithStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewCompositeStrategy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
        &lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewRegionBasedStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regions&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
        &lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gorealconf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewPercentageStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;20&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;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Install &lt;code&gt;gorealconf&lt;/code&gt; using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go get github.com/samuelarogbonlo/gorealconf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The library includes comprehensive examples in the &lt;code&gt;examples/&lt;/code&gt; directory, covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic usage&lt;/li&gt;
&lt;li&gt;Multi-source configuration&lt;/li&gt;
&lt;li&gt;Gradual rollouts&lt;/li&gt;
&lt;li&gt;Complete application setups&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The future roadmap for &lt;code&gt;gorealconf&lt;/code&gt; includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enhanced encryption support&lt;/li&gt;
&lt;li&gt;Additional configuration sources&lt;/li&gt;
&lt;li&gt;Advanced rollout strategies&lt;/li&gt;
&lt;li&gt;Improved observability features&lt;/li&gt;
&lt;li&gt;Others etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Join the Community
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gorealconf&lt;/code&gt; is open source and welcomes contributions. Whether you fix bugs, add features, or improve documentation, your help makes the library better for everyone.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/samuelarogbonlo/gorealconf" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; to get started, and join our community discussions to share your ideas and experiences. Also the package details &lt;a href="https://pkg.go.dev/github.com/samuelarogbonlo/gorealconf" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>http</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Managing Kubernetes Objects: A Comprehensive Guide</title>
      <dc:creator>Samuel Arogbonlo</dc:creator>
      <pubDate>Tue, 03 Dec 2024 10:53:44 +0000</pubDate>
      <link>https://dev.to/samuelarogbonlo_64/managing-kubernetes-objects-a-comprehensive-guide-nff</link>
      <guid>https://dev.to/samuelarogbonlo_64/managing-kubernetes-objects-a-comprehensive-guide-nff</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;Managing Kubernetes Objects: A Comprehensive Guide&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Kubernetes, often abbreviated as K8s, is a powerful platform for orchestrating containers. At its core, Kubernetes operates on the concept of objects, representing your cluster's desired state. To manage these objects effectively, you need to understand their lifecycle, configuration, and the tools available for their manipulation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding Kubernetes Objects&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Kubernetes objects are persistent entities that represent the state of your system. Each object is identified by a unique &lt;strong&gt;name&lt;/strong&gt; and &lt;strong&gt;identifier&lt;/strong&gt; (UID) assigned at creation. This UID remains consistent throughout the object's lifecycle, even if its name changes.&lt;/p&gt;

&lt;p&gt;These objects are defined declaratively in &lt;strong&gt;YAML&lt;/strong&gt; or &lt;strong&gt;JSON&lt;/strong&gt; configuration files, with &lt;strong&gt;YAML&lt;/strong&gt; being the preferred format due to its readability. Storing these files in a version-controlled repository is a best practice, enabling traceability and collaboration.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Components of a Kubernetes Object&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Metadata&lt;/strong&gt;: Includes essential information such as name, namespace, labels, and annotations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spec&lt;/strong&gt;: Defines the desired state of the object.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status&lt;/strong&gt;: Represents the object's actual state, as Kubernetes observes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Labels and Selectors&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Labels are key-value pairs attached to objects. They provide a powerful mechanism for identifying and grouping related resources. For example, you can assign a label like &lt;code&gt;app: nginx&lt;/code&gt; to group all Nginx-related pods. Using &lt;strong&gt;selectors&lt;/strong&gt;, Kubernetes enables operations on subsets of objects matching specific label criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Deploying Workloads with Kubernetes Objects&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Role of Pods&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;At the heart of Kubernetes workloads are &lt;strong&gt;pods&lt;/strong&gt;, the smallest deployable units. A pod encapsulates one or more tightly coupled containers, along with shared storage, networking, and lifecycle. While managing individual pods is possible, it becomes impractical in large-scale systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Controller Objects: Scaling and Managing Pods&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To simplify management, Kubernetes provides &lt;strong&gt;controller objects&lt;/strong&gt; that maintain the desired state of pods. These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployments&lt;/strong&gt;: Ideal for stateless applications, ensuring high availability and scalability by managing the lifecycle of pods. Deployments monitor the desired and current states, recreating pods if they fail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;StatefulSets&lt;/strong&gt;: Designed for stateful applications, ensuring predictable deployment and scaling with persistent identifiers for each pod.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DaemonSets&lt;/strong&gt;: Ensure that a copy of a pod runs on every node, commonly used for tasks like logging or monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jobs and CronJobs&lt;/strong&gt;: Handle batch processing and scheduled tasks, respectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Namespaces: Logical Isolation and Resource Organization&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Namespaces provide logical isolation and resource organization within a cluster. They are particularly useful in multi-team environments, enabling better organization and resource control. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use Cases&lt;/strong&gt;: Different environments (e.g., &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;prod&lt;/code&gt;) or multi-tenancy setups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Practice&lt;/strong&gt;: Avoid hardcoding namespaces in YAML files. Specify them dynamically using the &lt;code&gt;kubectl&lt;/code&gt; CLI to enhance flexibility and enable cluster-wide updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Services: Enabling Communication Between Pods&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Kubernetes services abstract and expose pods to the network, enabling seamless communication between application components. Services work with label selectors to route traffic to the appropriate pods, bypassing the ephemeral nature of pod IPs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Types of Services&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ClusterIP&lt;/strong&gt;: Exposes the service only within the cluster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NodePort&lt;/strong&gt;: Exposes the service on each node’s IP at a static port.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LoadBalancer&lt;/strong&gt;: Integrates with cloud provider load balancers for external exposure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ExternalName&lt;/strong&gt;: Maps a service to an external DNS name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Services also create &lt;strong&gt;endpoint resources&lt;/strong&gt; and assign virtual IP addresses to maintain connectivity.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Managing Storage in Kubernetes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Given the ephemeral nature of pods, handling persistent data is a critical challenge. Kubernetes addresses this with &lt;strong&gt;volumes&lt;/strong&gt;, which provide durable storage for containers.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Types of Volumes&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EmptyDir&lt;/strong&gt;: Temporary storage shared among containers in a pod. Erased when the pod is deleted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PersistentVolumes (PV) and PersistentVolumeClaims (PVC)&lt;/strong&gt;: Abstract external storage systems (e.g., NFS, cloud disks) for durability beyond pod lifecycles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ConfigMap and Secret&lt;/strong&gt;: Store configuration data and sensitive information securely. These can be mounted as volumes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When defining pod specifications, you must explicitly mount volumes for each container. Properly designed volume configurations ensure data integrity and simplify scaling.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Best Practices for Managing Kubernetes Objects&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Version Control Your YAML Files&lt;/strong&gt;: Use Git or similar tools for traceability and collaboration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage Declarative Configurations&lt;/strong&gt;: Use tools like &lt;code&gt;kubectl apply&lt;/code&gt; and GitOps frameworks to maintain desired states.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor and Audit&lt;/strong&gt;: Use tools like Prometheus and Grafana for observability and anomaly detection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Namespaces Wisely&lt;/strong&gt;: Organize resources logically while minimizing complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Resource Limits and Quotas&lt;/strong&gt;: Define CPU, memory, and storage limits to prevent resource contention.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;By mastering Kubernetes objects and adhering to best practices, you can efficiently manage complex workloads, ensure high availability, and scale applications seamlessly. A strong understanding of these principles will make Kubernetes a reliable ally in your infrastructure journey.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>How To Setup Password Hash Synchronization In Microsoft Azure</title>
      <dc:creator>Samuel Arogbonlo</dc:creator>
      <pubDate>Sat, 30 Nov 2024 14:56:34 +0000</pubDate>
      <link>https://dev.to/samuelarogbonlo_64/how-to-setup-password-hash-synchronization-in-microsoft-azure-313h</link>
      <guid>https://dev.to/samuelarogbonlo_64/how-to-setup-password-hash-synchronization-in-microsoft-azure-313h</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%2Fuzxox2wou6npsmyq8cym.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%2Fuzxox2wou6npsmyq8cym.png" alt="Security Face In Cloud" width="720" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Azure is quickly becoming one of the most efficient cloud providers in the space and given that I am a DevOps engineer, I get to explore different cloud tools as related to projects over the years across different companies from FAANG to growing startups.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I have always held the idea that as long as IAM is sorted while dealing with the cloud, you can achieve awesome stuff meanwhile this piece will be on a simple IAM task via Hybrid Identity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are going to address how to synchronize an on-premise Azure Directory with Microsoft Azure, and the synchronization here is called Hybrid Identity. Some organizations do not have an on-premise use case and have to deal solely with the cloud and may not need this hybrid identity. Another possible scenario is with a team where there is an Office 365 setup coupled with the on-premise setup but there are different users that have unique login details which is crazy because as the client base increases then it’ll be difficult to maintain the list. So this is where the SSO and single authentication details come in handy to make the job way easier to implement.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: When you enter a password, it won't be saved as plain text, it goes through a special algorithm or hash process before it gives you access with the unique string. We will synchronize the password with the password hash synchronization method for easy access and control.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand basic IAM analogies in Azure with Office 365 possibly.&lt;/li&gt;
&lt;li&gt;Create an Azure tenant and verify IAM.&lt;/li&gt;
&lt;li&gt;Connect a domain if necessary.&lt;/li&gt;
&lt;li&gt;Have an Azure account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the AD portal via aad.portal.azure.com&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%2Ff4vfck0ug6gmeh3ivwcl.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%2Ff4vfck0ug6gmeh3ivwcl.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sync users and groups from the on-premise directory user AD by selecting the required text as shown below: &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%2Fq7tk3nzdp3r87pld5pap.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%2Fq7tk3nzdp3r87pld5pap.png" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download Azure AD connect and run the setup file with any necessary framework needed to be downloaded&lt;/p&gt;&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%2Fjaf0mew0ygosql2wzkst.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%2Fjaf0mew0ygosql2wzkst.png" width="800" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setup the Azure AD connect software with all required especially domain service credentials&lt;/li&gt;
&lt;li&gt;Install the Azure AD software&lt;/li&gt;
&lt;li&gt;There is a possibility that you encounter a configuration error, don’t panic, get access to your terminal and run
&lt;code&gt;set-execution policy remotesigned&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then go back to the portal and see the reflected users with the major one which is the administrator account.&lt;/p&gt;

&lt;p&gt;Voila, you got it done!&lt;/p&gt;

&lt;p&gt;The essence of authentication is to provide users with a set of credentials, such as a username and password, and to verify that they provide the correct credentials whenever they want access to the application. Hence, we need a way to store these credentials in our database for future comparisons. However, storing passwords on the server side for authentication is a difficult task.&lt;/p&gt;

&lt;p&gt;Now, remember, this article is not only for experts in the software space, even newbies could hop in and learn a lot and that is why I try to make everything clear both in layman's and professional terms, so if you have any questions, shoot or you can also reach out to me on &lt;a href="//github.com/samuelarogbonlo"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading ❤️&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please leave a comment if you have any thoughts about the topic — I am open to learning and knowledge explorations.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I can imagine how helpful this post has been, do leave a clap 👏 below a few times to show your support for the author! Also, if you need a DevOps engineer for consulting and freelancing, I am the guy you are looking for; hire me, and let’s get that project done.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>azure</category>
      <category>aws</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Five-Finger Ways on How To Deploy Application on App Engine - GCP </title>
      <dc:creator>Samuel Arogbonlo</dc:creator>
      <pubDate>Sat, 24 Oct 2020 02:43:53 +0000</pubDate>
      <link>https://dev.to/samuelarogbonlo_64/five-finger-ways-on-how-to-deploy-application-on-app-engine-gcp-4fll</link>
      <guid>https://dev.to/samuelarogbonlo_64/five-finger-ways-on-how-to-deploy-application-on-app-engine-gcp-4fll</guid>
      <description>&lt;p&gt;In using the Google Cloud Platform, it is all about deploying applications and migrating products data to the cloud. This article addresses how to deploy a simple Hello World Python application to the cloud. The major steps used in this process is shown below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new project: The project is created by navigating to the top bar after logging in to the platform. If you are a new user, Google has provided $300 for starting offer so as to get used to the tools on the platform. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WMP2MC0i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kjyd3yyn79dujxafyk16.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WMP2MC0i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kjyd3yyn79dujxafyk16.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Activate google cloud shell - The cloud shell is where the scripting and operations take place and it can be switched on by selecting the icon at the top of the screen as well. To check the list of projects, use this command &lt;em&gt;&lt;strong&gt;gcloud projects list&lt;/strong&gt;&lt;/em&gt; &lt;br&gt;
to see the project details on the platform.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3eYXo3us--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rncrxwgbbo706r2uqc4i.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3eYXo3us--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rncrxwgbbo706r2uqc4i.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable app engine admin API - Navigate to the menu on Dashboard then select APIs and Services. After that, search &lt;strong&gt;“App Engine”&lt;/strong&gt; and enable. The app engine helps to build apps; it is a serverless solution takes care of the backend compute and gives the URL of the app and you do not care about any much resources. Finally, you should navigate to the project from the cloud shell using the command “    “&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fE-0VB5---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/u1rwitan9vcx46lxqm1w.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fE-0VB5---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/u1rwitan9vcx46lxqm1w.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hn1-q0dU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/aag6ps6dcnn0p4ctxssd.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hn1-q0dU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/aag6ps6dcnn0p4ctxssd.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XyYaTKru--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6igvawcfbkt7368q7pq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XyYaTKru--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6igvawcfbkt7368q7pq.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DoJb7J9f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1u2ff6adkbjzayr748he.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DoJb7J9f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1u2ff6adkbjzayr748he.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an app engine by using &lt;em&gt;&lt;strong&gt;“gcloud app create”&lt;/strong&gt;&lt;/em&gt; then select regions as required and finally, you can check the app engine to check the status of the created application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ncvMvpaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lx49qa24hx9ddj76hdps.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ncvMvpaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lx49qa24hx9ddj76hdps.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1eeUQlmU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tobdl02ep9jq2hdsa2dn.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1eeUQlmU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tobdl02ep9jq2hdsa2dn.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy application: Here we first cloned a GitHub repo &lt;em&gt;&lt;strong&gt;“&lt;a href="https://github.com/GoogleCloudPlatform/python-docs-sample%E2%80%9C"&gt;https://github.com/GoogleCloudPlatform/python-docs-sample“&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; then do some authentication then to check the application you use &lt;em&gt;&lt;strong&gt;“cat app.yaml”&lt;/strong&gt;&lt;/em&gt; and the response is &lt;em&gt;&lt;strong&gt;“runtime:python37”&lt;/strong&gt;&lt;/em&gt; then you could check the main python file through “cat main.py” and the details of the application displays. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CJpadCen--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jpzf1xzr15ngnt1zex4h.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CJpadCen--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jpzf1xzr15ngnt1zex4h.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wyo1kleg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lq5sydff9qloq4de61g9.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wyo1kleg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lq5sydff9qloq4de61g9.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The last step is to deploy through &lt;em&gt;&lt;strong&gt;“gcloud app deploy app.yaml”&lt;/strong&gt;&lt;/em&gt; then a response of &lt;strong&gt;Y/N&lt;/strong&gt; shows up while the user types &lt;strong&gt;“Y”&lt;/strong&gt; then deploying continues. As soon as the process has been done, the application can be viewed via the URL and the deploying could take a minimum of 7 minutes and more depending on the intensity of the application. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yhrLWTMX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/um3kzql7lqateyyc11o4.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yhrLWTMX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/um3kzql7lqateyyc11o4.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_psc28_D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vv3ggl72bvdn7wa49dy5.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_psc28_D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vv3ggl72bvdn7wa49dy5.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the application has been deployed, it could be monitored and maintained but you could delete the application from the app engine homepage so as to save unnecessary cost on the platform. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding the roles in Cloud Engineering</title>
      <dc:creator>Samuel Arogbonlo</dc:creator>
      <pubDate>Sat, 24 Oct 2020 01:51:51 +0000</pubDate>
      <link>https://dev.to/samuelarogbonlo_64/understanding-the-roles-in-cloud-engineering-3cpa</link>
      <guid>https://dev.to/samuelarogbonlo_64/understanding-the-roles-in-cloud-engineering-3cpa</guid>
      <description>&lt;p&gt;Cloud Engineering in its entirety has several roles and sections that make the space most profitable. The job is quite easy when the roles are understood and could special career paths for any interested developer or engineer hoping to be part of the cloud computing learning process. There are several roles in cloud engineering as regarding computing but majorly there are three; Cloud Architect, Cloud Developers and Cloud Engineers. Each of these roles could evolve to other sub-roles and administrative functions. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7lpw00naoa2vrhrn3kp3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7lpw00naoa2vrhrn3kp3.jpg" alt="CLoud Engineering in Sketch"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cloud Architect is one of the most lucrative aspects of the cloud computing world as this role allows the holder to structure the architecture of the applications or company’s products. The metrics that help the architect decide how the structure will be implemented include the number of users, privileges needed, type of products, data components, deployment patterns amongst many others. While structuring the architecture, the process involves all the product managers, application developers and any other role involved in building the product so every role is catered for in the diagram that shows what is to be done for the application to be successfully migrated to the cloud. In some organizations, a degree in CS may not be required but in detail, any cloud architect must have an experience building product architecture in a way that the developers and engineers will implement without hassles. &lt;/p&gt;

&lt;p&gt;Cloud developers are developers and software engineers who specialize in building for the cloud and do the bidding pf the architect most of the time. It is expedient that the cloud developers understand cloud systems and how they respond to code and backend languages like Goland, Node.JS and others. They also help in deploying applications with very low downtime. After the migration to the cloud has been completed, the developers are tasked with maintenance and monitoring as regarding the product responses to the cloud architecture, infrastructure and structure. Apart from back-end applications, many cloud developers build full-stack applications, data integration and other deployment tasks. Regarding the skills and learning paths, cloud developers work with backups, storage, Platform as a Service (PAAS), microservices, full-stack languages and Software as a Service (SAAS).&lt;/p&gt;

&lt;p&gt;The last very relevant role in the cloud is the engineer and this more or less with conjunction with the architect as this role demands planning, design and of course building fo webs services for the cloud. Some of the languages used in this role include Python, Java and some other scripting languages. Right after, the architect has done the structuring, the engineer assesses before the migration is confirmed to have a better business solution for the products and save lots of money in the process. &lt;/p&gt;

&lt;p&gt;After understanding all these roles, there are some other interesting roles like System administrators and solutions architect where some interesting jobs are being done as regards the cloud. The world is getting more inclined to the cloud as many companies will be a data company in the coming years - after all, every product needs proper security and networking with proper data processing which is most affordable only through the cloud especially through platforms like Google Cloud Platform (GCP), Microsoft Azure or Amazon Web Services (AWS). In getting ready for these roles, any interested party should get certifications in any of the cloud services, understand application architectures, databases, Linux and possibly application migration processes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9r1nia4nip7u99sx7qhh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9r1nia4nip7u99sx7qhh.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In conclusion, while in some organizations, a person could function in the three roles, some other organizations ensure there are special persons assigned to each role to ensure better outputs and integrations - but definitely, it’s good to be acquainted with the several roles. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Overview of Compute Engine in Google Cloud Platform</title>
      <dc:creator>Samuel Arogbonlo</dc:creator>
      <pubDate>Sat, 24 Oct 2020 00:53:49 +0000</pubDate>
      <link>https://dev.to/samuelarogbonlo_64/overview-of-compute-engine-in-google-cloud-platform-2lki</link>
      <guid>https://dev.to/samuelarogbonlo_64/overview-of-compute-engine-in-google-cloud-platform-2lki</guid>
      <description>&lt;p&gt;In running workloads on physical hardware, several components are required to allow the success of this operation but the most relevant is the Google Compute Engine popularly referred to as GCE. In clear terms, it is defined as an infrastructure as a service platform that gives clients and engineers the ability to process workloads on Google’s physical hardware and has the ability to function as clusters. It is managed by several means but the most preferred is the RESTful API and it is advisable to be conversant with the API building so as to avoid hassles when working with this computing service (GCE). Other managing processes used in GCE includes the command line interface or console provided on the platform.&lt;/p&gt;

&lt;p&gt;In compute engine options; the virtual machine (VM) instances needed networking functionality which is provided by the Virtual Private Cloud (VPC). The Virtual Private Cloud (VPC) is just a service in the cloud space used to create network functionality to other services like the App engine and even the Google Kubernetes Engine (GKE) clusters. Also, Kubernetes can be used in compute engine to run some container functions especially in cases of lift-and-shift migration solutions scenarios - but if you want your data running in containers while google handles the rest then use app engine and in the case of code, then cloud functions will do a better job due to the serverless compatibility as well satisfying business logic.  &lt;/p&gt;

&lt;p&gt;The most obvious advantages of using the compute engine and corresponding products include value increment from applications - lesser pay and better outputs, global scaling of products, migration for virtual machines and the last one which is the very reason for the platform is the ability to easily integrate the service. In migrating to the compute engine, the task could be done in minutes without rewriting the applications, working on images or switching the processes for management in the cloud. But in all these, migrations require that the cloud engineer does the following to be guided through the processes.&lt;br&gt;
 -Set up the environment&lt;br&gt;
 -Migrate from a previous platform (AWS, Azure or any other cloud &lt;br&gt;
  host)&lt;br&gt;
 -Migrate in batches using runbooks and jobs &lt;br&gt;
 -Testing of migration done in the previous step&lt;br&gt;
 -Virtual machines upgrading &lt;br&gt;
 -Monitoring&lt;br&gt;
 -Automating&lt;br&gt;
Each of the steps stated above has to be thoroughly done based on the demand of the business organization but the application can keep running as long as the migration is done in real-time as it has no adverse effects on the application. &lt;/p&gt;

&lt;p&gt;In concluding the overview of Compute engine, it is necessary to understand the requirements needed to go on with compute engine migrations. Some metrics used to set up the requirements include &lt;br&gt;
 -Bandwidth - Min between the source environment and nodes should &lt;br&gt;
 be the larger of 20Mbit/sec symmetric but long term it depends on &lt;br&gt;
 the virtual machines running in the cloud. &lt;br&gt;
 -Operating system&lt;br&gt;
 -Network connectivity and &lt;br&gt;
 -Permissions of the previous cloud host.&lt;/p&gt;

&lt;p&gt;Some other details, qwiklabs and processes can be gotten via  link &lt;a href="https://cloud.google.com/compute"&gt;https://cloud.google.com/compute&lt;/a&gt; &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
