<?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: Yuvraj Chhetri</title>
    <description>The latest articles on DEV Community by Yuvraj Chhetri (@uvource).</description>
    <link>https://dev.to/uvource</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%2F788135%2F5b87edb7-56d9-4413-895d-ae90967ddf5f.jpeg</url>
      <title>DEV Community: Yuvraj Chhetri</title>
      <link>https://dev.to/uvource</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uvource"/>
    <language>en</language>
    <item>
      <title>What's there in K8s 1.27</title>
      <dc:creator>Yuvraj Chhetri</dc:creator>
      <pubDate>Sun, 04 Jun 2023 15:01:13 +0000</pubDate>
      <link>https://dev.to/uvource/whats-there-in-k8s-127-1i4a</link>
      <guid>https://dev.to/uvource/whats-there-in-k8s-127-1i4a</guid>
      <description>&lt;p&gt;Hey everyone, I hope you're doing great, today we'll be discussing what's there in the newly released Kubernetes 1.27 update. The kubernetes updates is very unique unlike other cloud native tools, the versioning of k8s follow the semantic versioning terminology as &lt;strong&gt;X.Y.Z&lt;/strong&gt; where,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X&lt;/strong&gt; -&amp;gt;  Major version(major updates)&lt;br&gt;
&lt;strong&gt;Y&lt;/strong&gt; -&amp;gt; Minor version(minor updates, this is released every year)&lt;br&gt;
&lt;strong&gt;Z&lt;/strong&gt; -&amp;gt; Patch version(small bug fixes or performance improvement)&lt;/p&gt;

&lt;p&gt;The latest kubernets release is packed with lot of changes including new features, API changes, cleanups, bug fixes and improved documentation. &lt;/p&gt;

&lt;p&gt;Kubernetes releases happens 3 times every year. &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%2Fuploads%2Farticles%2Fsl0ynqxj750tofersmf9.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%2Fuploads%2Farticles%2Fsl0ynqxj750tofersmf9.png" alt="kubernetes versioning lifecycle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Kubernetes has a tradition of selecting a theme for every major release, the theme for Kubernetes 1.25 was &lt;strong&gt;Combiner&lt;/strong&gt; which signifies the importance of individual components for building the project you see today.&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%2Fuploads%2Farticles%2Fap2u4ai4tmcbkwjmgv8t.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%2Fuploads%2Farticles%2Fap2u4ai4tmcbkwjmgv8t.png" alt="kubernetes 1.25 theme image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Kubernetes 1.26 had the theme &lt;strong&gt;Electrifying&lt;/strong&gt; which signifies the diversity of compute resources taking into account for building the kubernetes while creating awareness on the importance of taking the energy consumption footprint into account. &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%2Fuploads%2Farticles%2Fem06rpisryxtj8q1dxii.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%2Fuploads%2Farticles%2Fem06rpisryxtj8q1dxii.png" alt="K8s theme 1.26"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The theme for the current version is &lt;strong&gt;Chill Vibes&lt;/strong&gt; which reflects the calmness of the 1.27 release.&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%2Fuploads%2Farticles%2Fb8nn9xatb5xnt6voxlqs.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%2Fuploads%2Farticles%2Fb8nn9xatb5xnt6voxlqs.png" alt="screenshot of kubernetes version 1.27"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This release is the first release of 2023 which includes 60 enhancements, kubernetes has multi-stage feature relase i.e. alpha, beta, GA or stable. The current release has 9 enhancements which has been promoted to production ready. You can check more about them &lt;a href="https://kubernetes.io/blog/2023/04/11/kubernetes-v1-27-release/#feature-graduations-and-deprecations-in-kubernetes-v1-27" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Kubernetes release comes with enhancements update in a categorized form viz. API change, Feature, Bug or Regression, failing test and other cleanups. &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%2Fuploads%2Farticles%2Fenlo42ggvrdciqm9j9wc.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%2Fuploads%2Farticles%2Fenlo42ggvrdciqm9j9wc.png" alt="k8s changelog 1.27"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have a big list of enhancements in Kubernetes 1.27 as listed in &lt;a href="https://kubernetes.io/releases/#release-v1-27" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; but here we'll be diving into only few of the important enhancements.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The K8s.gcr.io image registry has been Frozen&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As you might be already familiar that Kubernetes relies on custom image registry i.e. gcr.k8s.io which was hosted by Google has been frozen. The new registry i.e. registry.k8s.io has been generally available for several months will be available and is controlled by the community itself.&lt;/p&gt;

&lt;p&gt;Google had announced to renew its donation of $3 million and also Amazon has announced a matching donation with Google during the keynote at KubeCon Detroit '22. The new registry will be hosted by Google, Amazon and several other cloud providers, this will bring several benefits including faster downloads, reduced bandwidth costs, etc.&lt;/p&gt;

&lt;p&gt;If you're a maintainer then you will need to update your kubernetes manifests and helm charts to the new registry. You can learn more about it &lt;a href="https://kubernetes.io/blog/2023/04/11/kubernetes-v1-27-release/#freeze-k8s-gcr-io-image-registry" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;SeccompDefault graduates to stable&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Container security is a crucial aspects for any Kubernetes cluster, without proper security measures container might be vulnerable for attacks that can compromise the entire cluster. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seccomp&lt;/strong&gt; short for Secure Computing Mode is a linux kernel feature that restricts the system calls that a process can make. In Kubernetes Seccomp can be used to enhance the security of the containers by limiting their certain privileged operations, so basically Seccomp profile is a set of rules specifies which container is allowed to make system calls reducing the attack surface by limiting the available kernel interfaces. Kubernetes allows you to make a custom Seccomp profile for specifying the system calls or you can use the default Seccomp profile provided by the container runtime for a secure baseline configuration. &lt;/p&gt;

&lt;p&gt;However this was disabled by default, now we can enable it by default giving the kubernetes an extra layer of security. Kubernetes has the option to enable default Seccomp profile using the default commandline flag &lt;code&gt;kubelet --seccomp-enable&lt;/code&gt; where this(default Seccomp profile by runtime) can be used for every node you create inside the cluster. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Node log access via Kubernetes API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this update there is a new API available for accessing the Node Log, a node is control plane or worker machine that's part of the Kubernetes cluster, a Node log is the log data generated by a particular node. A node log can be helpful for identifying the issue with the services running inside the node. A Cluster Administrator may find challenging to identify the problem, typically they need to SSH or RDP into the node to examine the service logs and diagnose the issue. &lt;/p&gt;

&lt;p&gt;With the 1.27 release the node log query feature simplifies this process by enabling the administrator to access logs using the &lt;strong&gt;Kubectl&lt;/strong&gt;, this is helpful when working with windows nodes as the problems like CNI's configurations and other hard to detect issues can prevent containers from starting up. &lt;/p&gt;

&lt;p&gt;To utilize the node log query feature it's important to enable the node log query feature date for the relevant node and ensure that both the enable system log Handler and the enable system lock query options are set to true in the cubelet configuration, once this requirements are met, you can retrieve the node logs. For instance you can retirieve the Kubelet service logs using the following example &lt;code&gt;kubectl get --raw "/api/v1/nodes/node.example/proxy/logs/?query=kubelet"&lt;/code&gt;. Follow the documentation here to query all node logs &lt;a href="https://kubernetes.io/docs/concepts/cluster-administration/system-logs/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Mutable Pod Scheduling Directives goes to beta&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Kubernetes parallel jobs refer to workloads that enable multiple pods to run concurrently in order to complete a task. These parallel jobs are commonly used for computationally intensive tasks or batch processing, where the workload can be divided into smaller pieces and executed in parallel to reduce processing time.&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%2Fuploads%2Farticles%2F810a3rfrzm5rcfbcqx38.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%2Fuploads%2Farticles%2F810a3rfrzm5rcfbcqx38.png" alt="parallel job running architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When running parallel jobs in Kubernetes, it is often necessary to impose specific constraints on the pods. For example, all pods may need to run in the same availability zone or on certain types of hardware, such as GPU model X or Y, but not a mixture of both. To achieve this, Kubernetes utilizes a suspend field that allows custom queue controllers to determine when a job should start. When a job is suspended, it remains idle until the custom queue controller decides to unsuspend it, taking into account various scheduling factors. However, once a job is unsuspended, the actual placement of pods is handled by the Kubernetes scheduler, and the custom kube controller has no influence over where the pods will be allocated.&lt;/p&gt;

&lt;p&gt;This is where the new feature of mutable scheduling directives for jobs comes into play. This feature enables the updating of a job's scheduling directives before it begins. Essentially, it allows custom queue controllers to influence pod placement without needing to directly handle the assignment of pods to nodes themselves. To learn more about this check out the Kubernetes Enhancement Proposal &lt;a href="https://github.com/kubernetes/enhancements/issues/2926" rel="noopener noreferrer"&gt;2926&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;ReadWriteOncePod PersistentVolume access mode goes to beta&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Persistent volumes in Kubernetes offer various access modes that you may already be familiar with. These modes include "Read-Only Many," where the volume can be mounted as read-only by multiple nodes; "Read-Write Many", allowing the volume to be mounted as read-write by multiple nodes; and "Read-Write Once", which permits the volume to be mounted as read-write by a single node. However, it does allow multiple pods to access the volume when those pods are running on the same node.&lt;/p&gt;

&lt;p&gt;A recent addition to Kubernetes, starting from version 1.22, is the introduction of a new access mode called "Read-Write Once Pod". This access mode restricts volume access to a single pod within the cluster. This approach ensures that only one pod at a time can write to the volume, making it particularly beneficial for stateful applications that require exclusive access to storage. More details about this feature can be found in the provided link.&lt;/p&gt;

&lt;p&gt;As of Kubernetes 1.27 and later, the "Read-Write Once Pod" beta feature is enabled by default. It's important to note that this feature is exclusively supported for CSI (Container Storage Interface) volumes. To enable this feature, simply include the "ReadWriteOncePod" mode when creating the Persistent Volume Claim (PVC).&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%2Fuploads%2Farticles%2Foefaq4w0prfs39bmxqr1.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%2Fuploads%2Farticles%2Foefaq4w0prfs39bmxqr1.png" alt="Yaml file for creating PVC &amp;amp; ReadWriteOncepod"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Overall, the addition of the "Read-Write Once Pod" feature to Kubernetes provides enhanced control over volume access, catering to the needs of stateful applications that rely on exclusive storage access.&lt;/p&gt;

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

&lt;p&gt;This is it for now, I have only discussed few of them but you can learn more about other enhancements &lt;a href="https://kubernetes.io/blog/2023/04/11/kubernetes-v1-27-release" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;For more insights and updates, feel free to follow me on &lt;a href="https://twitter.com/uvource" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. Additionally, you can find more of my articles on &lt;a href="//yuvichh.hashnode.dev"&gt;Hashnode&lt;/a&gt; and Dev Community. Stay connected for further discussions on Kubernetes, cloud computing, and other exciting topics.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Synthetic.ai: A Content Generator using AI✨</title>
      <dc:creator>Yuvraj Chhetri</dc:creator>
      <pubDate>Tue, 23 May 2023 11:16:43 +0000</pubDate>
      <link>https://dev.to/uvource/syntheticai-a-content-generator-using-ai-45jl</link>
      <guid>https://dev.to/uvource/syntheticai-a-content-generator-using-ai-45jl</guid>
      <description>&lt;p&gt;One fateful day😃, as I logged into the Dev Community, I found myself captivated by a post discussing about the new &lt;strong&gt;GitHub + DEV 2023 Hackathon&lt;/strong&gt;. Excitement filled me as I realized that I had the perfect opportunity💡 to combine my familiarity with GitHub Codespaces and GitHub Actions with the newly acquired OpenAI API key.&lt;/p&gt;

&lt;p&gt;With this newfound inspiration, I set out on a journey to develop Synthetic AI. Leveraging the collaborative power of GitHub and the automation capabilities of GitHub Actions, I dedicated myself to creating an application that would help in  content creation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built🤔
&lt;/h2&gt;

&lt;p&gt;Synthetic.ai is an application that utilizes the capabilities of artificial intelligence to automate content generation. The app consists of a frontend built with React and a backend powered by Flask, enabling users to effortlessly generate high-quality content tailored to their needs. &lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Let me tell you a fun little story about how Synthetic.ai came to be. So, I've always been super interested in GitHub Actions and how they can automate all sorts of cool stuff. And around the same time, I got my hands on an OpenAI API key. Now, those two things may not seem related, but trust me, they led me on an incredible journey.&lt;/p&gt;

&lt;p&gt;I started tinkering with GitHub Actions, exploring how they can make deployments and continuous integration a breeze. But being the curious soul that I am, I couldn't resist diving into the world of artificial intelligence. And that's when the idea for Synthetic.ai struck me – an app that combines GitHub Actions and AI to automate content generation.&lt;/p&gt;

&lt;p&gt;Now, here's the fun part: Synthetic.ai fits into not just one, but two categories! It's my take on DIY Deployments, where I showcase the power of GitHub Actions in streamlining deployment processes. And at the same time, it falls into the Wacky Wildcards category because, let's face it, an AI-powered content generator is pretty wild and whimsical.&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://syn-fron.vercel.app/"&gt;https://syn-fron.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Landing Page
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o6OGzIIg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/22h2kqc0lyi8nolcduei.png" alt="syntheic landing page 1" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HLzqd6ib--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8026k5mtnp7c9jmnpxqj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HLzqd6ib--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8026k5mtnp7c9jmnpxqj.png" alt="syntheic landing page 2" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Home Page&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WYGFkj0h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ccmx8a49egxaf75ncs6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WYGFkj0h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ccmx8a49egxaf75ncs6k.png" alt="syntheticai home page" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Let's Generate a Twitter Thread😲&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--awQGrQt4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m706t8w3knnkx6or8rwp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--awQGrQt4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m706t8w3knnkx6or8rwp.png" alt="syntheticai generating twitter thread" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There you go!😃 Generated💯&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g38F2ciC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zqsznejjx7xrpxkc644d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g38F2ciC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zqsznejjx7xrpxkc644d.png" alt="syntheticai twitter thread generated" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch this Tutorial if you want to learn more&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/CnJJDx8bJhI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Description👇
&lt;/h3&gt;

&lt;p&gt;Synthetic.ai is a cutting-edge application that brings together the power of React and Flask to revolutionize content generation. With Synthetic.ai, you can effortlessly generate high-quality content tailored to your needs, making it a go-to tool for writers, marketers, and content creators.&lt;/p&gt;

&lt;p&gt;Using Synthetic.ai is a breeze! Simply visit the app link and you'll be greeted with a sleek user interface. From there, you can select the type of content you want to generate from a handy dropdown menu. Whether it's blog posts, social media captions, or even product descriptions, Synthetic.ai has got you covered.&lt;/p&gt;

&lt;p&gt;But here's the cool part: I took things a step further by building Synthetic.ai using GitHub Codespaces. Instead of relying on traditional local environments, I harnessed the power of Codespaces to develop and test the application. This not only reduced the strain on my local resources but also provided a seamless and efficient development experience.&lt;/p&gt;

&lt;p&gt;And guess what? I didn't stop there. I automated the entire deployment process using GitHub Actions. With a CI/CD pipeline in place, every time I make changes to the app, it automatically gets deployed to DigitalOcean. It's like having my own personal deployment assistant, saving me time and effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code🤓
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: &lt;a href="https://github.com/i-am-yuvi/synthetic.ai-frontend.git"&gt;https://github.com/i-am-yuvi/synthetic.ai-frontend.git&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Backend: &lt;a href="https://github.com/i-am-yuvi/synthetic.ai-backend.git"&gt;https://github.com/i-am-yuvi/synthetic.ai-backend.git&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;Synthetic.ai is licensed under the MIT License, granting users the freedom to use, modify, and distribute the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background✍️
&lt;/h2&gt;

&lt;p&gt;As I explored into Dev Community and the possibilities of GitHub Codespaces and GitHub Actions, I couldn't help but be captivated by the endless opportunities they presented. The &lt;strong&gt;GitHub + DEV 2023 Hackathon&lt;/strong&gt; served as the catalyst for my decision to embark on this particular app-building journey. It was a chance to merge my passion for technology, my familiarity with GitHub, and my curiosity about artificial intelligence.&lt;/p&gt;

&lt;p&gt;What truly inspired me was the immense potential of AI in content creation. I saw an opportunity to harness the power of AI algorithms and create an application that would streamline and enhance the content generation process. The idea of leveraging AI to assist in crafting high-quality, tailored content was both exciting and groundbreaking. I wanted to provide a tool that would empower users to unleash their creativity and save valuable time in the content creation process.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it?👨‍💻
&lt;/h3&gt;

&lt;p&gt;I wanted to streamline the deployment process and ensure that every time I make changes to the app, it gets automatically deployed to my DigitalOcean Kubernetes cluster. So, I harnessed the power of GitHub Actions and created a robust CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;Now, whenever I push code to the master or development branch of the repository, the GitHub workflow kicks in and starts the deployment process. It automatically builds the container image, pushes it to the Dockerhub Registry, updates the deployment configuration with the latest image tag, and applies the changes to the Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;By utilizing the Kubernetes cluster, I ensured seamless communication between the frontend and backend components of Synthetic.ai. The frontend, built with React, runs on port 3000, while the backend, powered by Flask, operates on port 5000. Thanks to the &lt;a href="https://kubernetes.io/docs/concepts/services-networking/service/"&gt;Kubernetes service&lt;/a&gt;, these two components can effortlessly communicate with each other, allowing for a smooth user experience.&lt;/p&gt;

&lt;p&gt;Deploying Synthetic.ai on DigitalOcean's Kubernetes cluster. &lt;strong&gt;Now, what if there is a sudden high traffic in my application?🤔 So, to address this issue I have created a loadbalancer which will balance the traffic in all the 3-nodes improving this application scalability and high availability during the peak times&lt;/strong&gt;. It also maintains consistent performance. Additionally, it allows for efficient resource utilization and easy management of the application's containers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kFcxnH_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c91ghpyekuhuabflpylj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kFcxnH_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c91ghpyekuhuabflpylj.png" alt="synthetic ai architecture" width="492" height="721"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This automated workflow has made my life so much easier. I no longer have to manually handle the deployment process or worry about missing any steps. With just a push to the repository, my changes are seamlessly deployed to the Kubernetes cluster, ensuring that the latest version of my app is always up and running.&lt;/p&gt;

&lt;p&gt;So, whether it's a small bug fix or a major feature update, I can trust that my changes will be deployed to the Kubernetes cluster effortlessly, thanks to the power of GitHub Actions and DigitalOcean. It has truly transformed the way I develop and deploy my app, making the entire process smoother and more efficient.&lt;/p&gt;

&lt;p&gt;So, give Synthetic.ai a try and experience the seamless communication between the frontend and backend components, all made possible by the power of GitHub Actions and Github Codespaces, also Kubernetes. Start generating high-quality content with ease and enjoy the convenience of automated deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info➕
&lt;/h3&gt;

&lt;p&gt;For more information about Synthetic.ai and the technologies used, please visit the project's documentation or reach out to me directly at &lt;a href="mailto:yuvichh01@gmail.com"&gt;yuvichh01@gmail.com&lt;/a&gt;. Get ready to unlock the potential of automated content generation with Synthetic.ai!&lt;/p&gt;

</description>
      <category>githubhack23</category>
      <category>cicd</category>
      <category>devops</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
