{"id":20697,"date":"2025-07-09T10:17:31","date_gmt":"2025-07-09T10:17:31","guid":{"rendered":"http:\/\/www.devopsschool.com\/blog\/?p=20697"},"modified":"2025-07-09T10:17:31","modified_gmt":"2025-07-09T10:17:31","slug":"kubernetes-replicationcontroller-example-programs","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/kubernetes-replicationcontroller-example-programs\/","title":{"rendered":"Kubernetes: Working with ReplicationController"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"579\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-51-1024x579.png\" alt=\"\" class=\"wp-image-40991\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-51-1024x579.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-51-300x170.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-51-768x434.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-51.png 1386w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Replication <\/strong>&#8211; It can replicate or scale one pod to many<\/li>\n\n\n\n<li><strong>Controller <\/strong>&#8211; It would control the desire number of pods with actual number of pod.<\/li>\n<\/ul>\n\n\n\n<p>A ReplicationController is a Kubernetes controller that ensures that a specified number of pod replicas are running at any one time. In other words, a ReplicationController makes sure that a pod or a homogeneous set of pods is always up and available.<\/p>\n\n\n\n<p>ReplicationControllers are useful for running stateful applications, such as databases and message queues, which need to be highly available. They can also be used to run stateless applications, such as web servers, which need to be scalable.<\/p>\n\n\n\n<p>To create a ReplicationController, you need to specify the desired number of pod replicas and the pod template that you want to use. The pod template defines the pod specification, such as the container image and the resources that the pod needs.<\/p>\n\n\n\n<p>Once you have created a ReplicationController, it will start creating and managing pod replicas. If a pod replica fails, the ReplicationController will create a new replica to replace it.<\/p>\n\n\n\n<p>ReplicationControllers are a powerful tool for managing Kubernetes pods. They can help to ensure that your applications are always up and available, and that they can scale to meet demand.<\/p>\n\n\n\n<p>Here are some examples of how ReplicationControllers can be used:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A production team can use a ReplicationController to ensure that their production pods are always up and available.<\/li>\n\n\n\n<li>A development team can use a ReplicationController to scale their development pods up or down as needed.<\/li>\n\n\n\n<li>A company can use a ReplicationController to run a distributed database cluster.<\/li>\n\n\n\n<li>A website can use a ReplicationController to run a scalable web server farm.<\/li>\n<\/ul>\n\n\n\n<p>ReplicationControllers are an important part of the Kubernetes ecosystem, and they are used by many organizations to manage their Kubernetes pods.<\/p>\n\n\n\n<p>Absolutely! Here\u2019s a <strong>detailed step-by-step tutorial<\/strong> on using Kubernetes <code>ReplicationController<\/code> (RC), covering your sample YAML, key commands, scaling, and how RC manages Pods. This will walk you through the complete workflow, with explanations for every step.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Kubernetes ReplicationController Tutorial<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1. <strong>What is a ReplicationController?<\/strong><\/h2>\n\n\n\n<p>A <strong>ReplicationController<\/strong> ensures that a specified number of pod replicas are running at any one time. If a pod fails or is deleted, the RC automatically creates a new pod to replace it. Although RC is being replaced by <strong>ReplicaSet<\/strong> (used in Deployments), it\u2019s important to understand RC for legacy and interview scenarios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. <strong>Sample ReplicationController YAML<\/strong><\/h2>\n\n\n\n<p>Let\u2019s start with the following <code>rc.yaml<\/code> definition:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">apiVersion: v1\nkind: ReplicationController\nmetadata:\n  name: rajeshrc\nspec:\n  replicas: 5\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: scmgalaxy\/nginx-devopsschoolv1\n<\/code><\/span><\/pre>\n\n\n<p><strong>Key sections:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>replicas:<\/strong> Number of pod copies to run (here, 5)<\/li>\n\n\n\n<li><strong>template:<\/strong> Pod template to use (labels &amp; containers)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. <strong>Step-by-Step Workflow<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1. <strong>Create the YAML file<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">vi rc.yaml\n<span class=\"hljs-comment\"># (Paste the YAML above and save the file)<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3.2. <strong>Create the ReplicationController<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">kubectl<\/span> <span class=\"hljs-selector-tag\">create<\/span> <span class=\"hljs-selector-tag\">-f<\/span> <span class=\"hljs-selector-tag\">rc<\/span><span class=\"hljs-selector-class\">.yaml<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>This will create a ReplicationController named <code>rajeshrc<\/code> and start 5 pods with the nginx image.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.3. <strong>Check the ReplicationController<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> rc\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Expected output:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">NAME       DESIRED   CURRENT   READY   AGE\nrajeshrc   5         5         5       1m\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3.4. <strong>View the Pods managed by RC<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>You\u2019ll see 5 pods with names like <code>rajeshrc-xxxxx<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.5. <strong>Describe a Pod<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">kubectl describe pod <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">pod-name<\/span>&gt;<\/span>\n# Example:\nkubectl describe pod rajeshrc-7tnm4\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Shows detailed info about the pod: events, state, image, logs, etc.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. <strong>Scaling the ReplicationController<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4.1. <strong>Scale Up Pods<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">kubectl scale --replicas=20 rc\/rajeshrc\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>The RC will create additional pods (total 20).<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> rc\nkubectl <span class=\"hljs-keyword\">get<\/span> pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Confirm there are now 20 pods.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4.2. <strong>Scale Down Pods<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">kubectl scale --replicas=2 rc\/rajeshrc\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>The RC will terminate excess pods to reach 2.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> pods\nkubectl <span class=\"hljs-keyword\">get<\/span> rc\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5. <strong>Self-healing Demonstration<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">5.1. <strong>Delete a Pod Managed by RC<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">kubectl delete pod <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">pod-name<\/span>&gt;<\/span>\n# Example:\nkubectl delete pod rajeshrc-n5flj\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RC will immediately create a replacement pod<\/strong> to maintain the desired replica count.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Observe that the number of pods remains the same.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. <strong>Deleting the ReplicationController<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">6.1. <strong>Delete using YAML<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">delete<\/span> -f rc.yaml\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>This deletes the RC and <strong>by default deletes all managed pods<\/strong> as well.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7. <strong>Key Notes<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RC vs ReplicaSet:<\/strong> In modern Kubernetes, prefer ReplicaSet (and use Deployments), but RC is still available for backwards compatibility.<\/li>\n\n\n\n<li><strong>Pod Naming:<\/strong> Pods created by RC have a generated suffix (e.g., <code>rajeshrc-7tnm4<\/code>) for uniqueness.<\/li>\n\n\n\n<li><strong>Self-healing:<\/strong> RC ensures that the number of running pods always matches the <code>replicas<\/code> value.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8. <strong>Common RC Commands Reference<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Action<\/th><th>Command<\/th><\/tr><\/thead><tbody><tr><td>List all ReplicationControllers<\/td><td><code>kubectl get rc<\/code><\/td><\/tr><tr><td>Describe a ReplicationController<\/td><td><code>kubectl describe rc &lt;name&gt;<\/code><\/td><\/tr><tr><td>Get all pods managed by RC<\/td><td><code>kubectl get pods -l app=nginx<\/code><\/td><\/tr><tr><td>Scale ReplicationController<\/td><td><code>kubectl scale --replicas=3 rc\/rajeshrc<\/code><\/td><\/tr><tr><td>Delete a ReplicationController<\/td><td><code>kubectl delete rc rajeshrc<\/code><\/td><\/tr><tr><td>Delete RC using file<\/td><td><code>kubectl delete -f rc.yaml<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9. <strong>Full Example Session (Shell History)<\/strong><\/h2>\n\n\n\n<p>Here\u2019s a replay of the session you shared, annotated:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd rajesh\/               <span class=\"hljs-comment\"># Move to your project directory<\/span>\nvi rc.yaml               <span class=\"hljs-comment\"># Create\/Edit the RC YAML<\/span>\nkubectl get rc           <span class=\"hljs-comment\"># See existing RCs<\/span>\nkubectl create -f rc.yaml    <span class=\"hljs-comment\"># Create new RC<\/span>\nkubectl get rc           <span class=\"hljs-comment\"># Confirm creation<\/span>\nkubectl get pods         <span class=\"hljs-comment\"># See managed pods<\/span>\nkubectl describe pod &lt;pod&gt;   <span class=\"hljs-comment\"># Get pod details<\/span>\nkubectl scale --replicas=<span class=\"hljs-number\">20<\/span> rc\/rajeshrc    <span class=\"hljs-comment\"># Scale up<\/span>\nkubectl get pods\nkubectl scale --replicas=<span class=\"hljs-number\">2<\/span> rc\/rajeshrc     <span class=\"hljs-comment\"># Scale down<\/span>\nkubectl get pods\nkubectl delete pods &lt;pod&gt;   <span class=\"hljs-comment\"># Delete a pod, RC will recreate it<\/span>\nkubectl get pods\nkubectl delete -f rc.yaml   <span class=\"hljs-comment\"># Delete the RC and its pods<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10. <strong>Summary Table<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Command \/ Action<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>Create YAML<\/td><td><code>vi rc.yaml<\/code><\/td><td>Define ReplicationController spec<\/td><\/tr><tr><td>Create RC<\/td><td><code>kubectl create -f rc.yaml<\/code><\/td><td>Launch RC and pods<\/td><\/tr><tr><td>List RCs\/Pods<\/td><td><code>kubectl get rc<\/code>, <code>kubectl get pods<\/code><\/td><td>See running RCs and pods<\/td><\/tr><tr><td>Scale RC<\/td><td><code>kubectl scale --replicas=N rc\/&lt;name&gt;<\/code><\/td><td>Adjust pod count<\/td><\/tr><tr><td>Delete Pod<\/td><td><code>kubectl delete pod &lt;pod&gt;<\/code><\/td><td>Remove a pod, RC will self-heal<\/td><\/tr><tr><td>Delete RC<\/td><td><code>kubectl delete -f rc.yaml<\/code><\/td><td>Remove RC and all managed pods<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">11. <strong>Conclusion<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ReplicationController<\/strong> is fundamental for managing pod replicas and self-healing workloads in Kubernetes.<\/li>\n\n\n\n<li>While you\u2019ll mostly use Deployments and ReplicaSets in production, understanding RC is critical for foundational knowledge and troubleshooting.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Kubernetes Replication Controller Example Programs<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">apiVersion: v1\nkind: ReplicationController\nmetadata:\n  <span class=\"hljs-comment\"># Unique key of the ReplicationController instance<\/span>\n  name: replicationcontroller-example\nspec:\n  <span class=\"hljs-comment\"># 3 Pods should exist at all times.<\/span>\n  replicas: <span class=\"hljs-number\">3<\/span>\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      <span class=\"hljs-comment\"># Run the nginx image<\/span>\n      - name: nginx\n        image: scmgalaxy\/nginx-devopsschoolv1\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">apiVersion: v1\nkind: ReplicationController\nmetadata:\n  <span class=\"hljs-comment\"># Unique key of the ReplicationController instance<\/span>\n  name: replicationcontroller-example\nspec:\n  <span class=\"hljs-comment\"># 3 Pods should exist at all times.<\/span>\n  replicas: <span class=\"hljs-number\">3<\/span>\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      <span class=\"hljs-comment\"># Run the nginx image<\/span>\n      - name: nginx\n        image: nginx:<span class=\"hljs-number\">1.10<\/span>\n\t\t\n<span class=\"hljs-comment\"># rc.yaml<\/span>\napiVersion: v1\nkind: ReplicationController\nmetadata:\n  name: hello-rc\nspec:\n  replicas: <span class=\"hljs-number\">5<\/span>\n  selector:\n    app: hello-world\n  template:\n    metadata:\n      labels:\n        app: hello-world\n    spec:\n      containers:\n      - name: hello-ctr\n        image: nginx\n        ports:\n        - containerPort: <span class=\"hljs-number\">80<\/span>\n\n<span class=\"hljs-comment\">## Sample Replication Controller YAML file used in example :<\/span>\n\t\napiVersion: v1\nkind: ReplicationController\nmetadata:\n  name: hello-rc\nspec:\n  replicas: <span class=\"hljs-number\">10<\/span>\n  selector:\n    app: hello-world\n  template:\n    metadata:\n      labels:\n        app: hello-world\n    spec:\n      containers:\n      - name: hello-ctr\n        image: nigelpoulton\/pluralsight-docker-ci:latest\n        ports:\n        - containerPort: <span class=\"hljs-number\">8080<\/span>\n\n\napiVersion: v1\nkind: ReplicationController\nmetadata:\n  name: hello-rc\nspec:\n  replicas: <span class=\"hljs-number\">3<\/span>\n  selector:\n    app: hello-world\n  template:\n    metadata:\n      labels:\n        app: hello-world\n    spec:\n      containers:\n      - name: hello-ctr\n        image: wardviaene\/k8s-demo\n        ports:\n        - containerPort: <span class=\"hljs-number\">3000<\/span>\n\t\t\napiVersion: v1\nkind: ReplicationController\nmetadata:\n  name: helloworld-controller\nspec:\n  replicas: <span class=\"hljs-number\">2<\/span>\n  selector:\n    app: helloworld\n  template:\n    metadata:\n      labels:\n        app: helloworld\n    spec:\n      containers:\n      - name: k8s-demo\n        image: wardviaene\/k8s-demo\n        ports:\n        - name: nodejs-port\n          containerPort: <span class=\"hljs-number\">3000<\/span>\n\napiVersion: v1\nkind: ReplicationController\nmetadata:\n  name: helloworld-controller\nspec:\n  replicas: <span class=\"hljs-number\">2<\/span>\n  selector:\n    app: helloworld\n  template:\n    metadata:\n      labels:\n        app: helloworld\n    spec:\n      containers:\n      - name: k8s-demo\n        image: wardviaene\/k8s-demo\n        ports:\n        - name: nodejs-port\n          containerPort: <span class=\"hljs-number\">3000<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Use cases of ReplicationController?<\/h2>\n\n\n\n<p>A ReplicationController (often abbreviated as &#8220;RC&#8221;) is a Kubernetes resource that ensures a specified number of replica pods are running at all times. It helps maintain the desired number of pod replicas, automatically replacing failed pods or creating new ones when necessary. ReplicationControllers are part of Kubernetes&#8217; core functionality and have several important use cases:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>High Availability<\/strong>: ReplicationControllers ensure that a specified number of pod replicas are always running. This helps maintain high availability of your application, even if some pods fail or become unavailable due to node failures or other issues.<\/li>\n\n\n\n<li><strong>Scaling<\/strong>: ReplicationControllers can be used to scale your application horizontally. You can increase or decrease the desired replica count, and the ReplicationController will automatically create or terminate pods to meet that count. This is especially useful for handling increased or decreased traffic loads.<\/li>\n\n\n\n<li><strong>Load Balancing<\/strong>: When combined with a Service resource, ReplicationControllers enable load balancing across multiple pod replicas. Requests to the Service are distributed evenly among the pods managed by the ReplicationController, ensuring efficient utilization of resources.<\/li>\n\n\n\n<li><strong>Rolling Updates<\/strong>: ReplicationControllers facilitate rolling updates of your application. You can update the pod template in the ReplicationController specification with a new version of your application, and it will gradually replace old pods with new ones, ensuring zero-downtime deployments.<\/li>\n\n\n\n<li><strong>Rollback<\/strong>: In case an update causes issues, you can easily roll back to a previous version by reverting to the previous pod template specification. This helps in maintaining application stability and mitigating issues quickly.<\/li>\n\n\n\n<li><strong>Fault Tolerance<\/strong>: ReplicationControllers automatically replace failed pods. If a pod crashes or becomes unresponsive, the ReplicationController detects this and replaces it with a new pod, helping to maintain the desired replica count.<\/li>\n\n\n\n<li><strong>Resource Scaling<\/strong>: You can configure autoscaling based on CPU or memory utilization using Horizontal Pod Autoscalers (HPA) in combination with ReplicationControllers. This allows your application to dynamically adapt to changing resource demands.<\/li>\n\n\n\n<li><strong>Testing and Development<\/strong>: ReplicationControllers can be useful in testing and development environments. You can use them to create multiple replicas of your application for testing different scenarios, such as load testing or compatibility testing.<\/li>\n\n\n\n<li><strong>Pod Distribution<\/strong>: If you have multiple nodes in your cluster, ReplicationControllers help distribute pods across nodes to ensure resource utilization and minimize the risk of node-specific failures affecting your application.<\/li>\n\n\n\n<li><strong>Stateless Applications<\/strong>: ReplicationControllers are particularly well-suited for stateless applications where each pod is independent and can handle requests without relying on the state stored in other pods.<\/li>\n<\/ol>\n\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_42042\"><iframe loading=\"lazy\"  id=\"_ytid_46262\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_42042\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>A ReplicationController is a Kubernetes controller that ensures that a specified number of pod replicas are running at any one time. In other words, a ReplicationController makes sure that a&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[4859],"tags":[],"class_list":["post-20697","post","type-post","status-publish","format-standard","hentry","category-kubernetes"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/20697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=20697"}],"version-history":[{"count":12,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/20697\/revisions"}],"predecessor-version":[{"id":49991,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/20697\/revisions\/49991"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=20697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=20697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=20697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}