<?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: Prashanth N S</title>
    <description>The latest articles on DEV Community by Prashanth N S (@prashanth_ns).</description>
    <link>https://dev.to/prashanth_ns</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%2F716892%2Feb04236e-b8c4-4d43-ab70-de1300c24f09.jpg</url>
      <title>DEV Community: Prashanth N S</title>
      <link>https://dev.to/prashanth_ns</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prashanth_ns"/>
    <language>en</language>
    <item>
      <title>Install OKD OpenShift 4.7 on VMware Bare Metal - User Provisioned Infrastructure(UPI)</title>
      <dc:creator>Prashanth N S</dc:creator>
      <pubDate>Wed, 06 Oct 2021 08:59:01 +0000</pubDate>
      <link>https://dev.to/prashanth_ns/install-okd-openshift-4-7-on-vmware-bare-metal-user-provisioned-infrastructure-upi-37f2</link>
      <guid>https://dev.to/prashanth_ns/install-okd-openshift-4-7-on-vmware-bare-metal-user-provisioned-infrastructure-upi-37f2</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ws8jfYpZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/izbas6bowpxz7zr6pld6.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ws8jfYpZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/izbas6bowpxz7zr6pld6.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Youtube Video - &lt;a href="https://www.youtube.com/watch?v=oqgaK6hsZUM"&gt;https://www.youtube.com/watch?v=oqgaK6hsZUM&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Build a Federation of Multiple Kubernetes Clusters With Kubefed V2</title>
      <dc:creator>Prashanth N S</dc:creator>
      <pubDate>Wed, 06 Oct 2021 08:50:08 +0000</pubDate>
      <link>https://dev.to/prashanth_ns/build-a-federation-of-multiple-kubernetes-clusters-with-kubefed-v2-48kh</link>
      <guid>https://dev.to/prashanth_ns/build-a-federation-of-multiple-kubernetes-clusters-with-kubefed-v2-48kh</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NcPsR00N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txmsr1zab3zjw9b7x458.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NcPsR00N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txmsr1zab3zjw9b7x458.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Youtube Channel  - &lt;a href="https://www.youtube.com/watch?v=Uy1YACvm-is&amp;amp;t=3s"&gt;https://www.youtube.com/watch?v=Uy1YACvm-is&amp;amp;t=3s&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build a Federation of Multiple Kubernetes Clusters With Kubefed V2&lt;br&gt;
A step-by-step guide to building a Kubernetes federation for managing multiple regions’ clusters with KubeFed&lt;br&gt;
image&lt;/p&gt;

&lt;p&gt;What Is KubeFed?&lt;br&gt;
KubeFed (Kubernetes Cluster Federation) allows you to use a single Kubernetes cluster to coordinate multiple Kubernetes clusters. It can deploy multiple-cluster applications in different regions and design for disaster recovery. To learn more about KubeFed: &lt;a href="https://github.com/kubernetes-sigs/kubefed"&gt;https://github.com/kubernetes-sigs/kubefed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;br&gt;
Kubernetes clusters must be up and running: kubernetes v1.13+. In this article, we’ll have three Kubernetes clusters. One is for installing Federation Control Plane as the host cluster (context named zone). The others are for deploying applications named us-west-oregon (context named lab-a) and asia-pacific-tokyo (context named lab-b).&lt;/p&gt;

&lt;p&gt;KubeFed CLI Installation&lt;br&gt;
&lt;a href="https://github.com/kubernetes-sigs/kubefed/releases"&gt;https://github.com/kubernetes-sigs/kubefed/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;wget &lt;a href="https://github.com/kubernetes-sigs/kubefed/releases/download/v0.8.1/kubefedctl-0.8.1-linux-amd64.tgz"&gt;https://github.com/kubernetes-sigs/kubefed/releases/download/v0.8.1/kubefedctl-0.8.1-linux-amd64.tgz&lt;/a&gt;&lt;br&gt;
tar -zxvf kubefedctl-*.tgz&lt;br&gt;
chmod u+x kubefedctl&lt;br&gt;
sudo mv kubefedctl /usr/local/bin/ #make sure the location is in the PATH&lt;br&gt;
You can check your kubefedctl version via:&lt;br&gt;
kubefedctl version&lt;br&gt;
image&lt;/p&gt;

&lt;p&gt;KubeFed Installation&lt;br&gt;
KubeFed installation uses Helm chart for deployment. In the host cluster, you can use the following command to install Helm CLI Helm v3&lt;br&gt;
wget -O helm.tar.gz &lt;a href="https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz"&gt;https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz&lt;/a&gt;&lt;br&gt;
tar -zxvf helm.tar.gz&lt;br&gt;
sudo mv linux-amd64/helm /usr/local/bin/helm&lt;br&gt;
helm&lt;br&gt;
helm repo add stable &lt;a href="https://charts.helm.sh/stable"&gt;https://charts.helm.sh/stable&lt;/a&gt;&lt;br&gt;
Install KubeFed v0.8.1 in kube-federation-system namespace (default) with the following command:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/kubernetes-sigs/kubefed.git"&gt;https://github.com/kubernetes-sigs/kubefed.git&lt;/a&gt;&lt;br&gt;
cd kubefed/charts/kubefed/&lt;br&gt;
kubectl create namespace kube-federation-system&lt;br&gt;
helm install  kubefed  . --namespace kube-federation-system&lt;/p&gt;

&lt;p&gt;kubectl get pod  -n kube-federation-system&lt;br&gt;
image&lt;/p&gt;

&lt;p&gt;Cluster Registration&lt;br&gt;
In the host cluster, set up Kubectl config for lab-a and lab-b, so we’ll be able to access those clusters via a context switch and use the context to join the federation:&lt;/p&gt;

&lt;p&gt;Refer - &lt;a href="https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/"&gt;https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/&lt;/a&gt; and follow the steps&lt;/p&gt;

&lt;p&gt;(OR)&lt;/p&gt;

&lt;h1&gt;
  
  
  Replace CLUSTERNAME, CLUSTERIP, USERNAME, TOKEN, CONTEXTNAME
&lt;/h1&gt;

&lt;p&gt;kubectl config set-cluster CLUSTERNAME --server=CLUSTERIP&lt;br&gt;
kubectl config set-credentials USERNAME --token="TOKEN"&lt;br&gt;
kubectl config set-context CONTEXTNAME --cluster=CLUSTERNAME --user=USERNAME&lt;br&gt;
Check the contexts for all clusters:&lt;br&gt;
kubectl config get-contexts&lt;br&gt;
kubectl config use-context &lt;br&gt;
image&lt;/p&gt;

&lt;p&gt;Use kubefedctl join to register clusters into the host cluster:&lt;/p&gt;

&lt;h1&gt;
  
  
  Replace JOINED_CLUSTER_NAME, HOST_CLUSTER_NAME, HOST_CLUSTER_CONTEXT, JOINED_CLUSTER_CONTEXT
&lt;/h1&gt;

&lt;p&gt;kubefedctl join JOINED_CLUSTER_NAME --host-cluster-name=HOST_CLUSTER_NAME --host-cluster-context=HOST_CLUSTER_CONTEXT --cluster-context=JOINED_CLUSTER_CONTEXT&lt;/p&gt;

&lt;p&gt;example:&lt;br&gt;
kubefedctl join us-west-oregon --host-cluster-name=host-cluster --host-cluster-context=zone --cluster-context=lab-a&lt;br&gt;
kubefedctl join asia-pacific-tokyo --host-cluster-name=host-cluster --host-cluster-context=zone --cluster-context=lab-b&lt;br&gt;
After you’ve joined clusters, you can check the status via the below command:&lt;br&gt;
kubectl -n kube-federation-system get kubefedclusters&lt;br&gt;
image&lt;/p&gt;

&lt;p&gt;Awesome!! Your federation clusters are ready now.&lt;/p&gt;

&lt;p&gt;Deploy Nginx Service&lt;br&gt;
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -&lt;br&gt;
apiVersion: v1&lt;br&gt;
kind: Namespace&lt;br&gt;
metadata:&lt;br&gt;
  name: test-namespace&lt;br&gt;
EOF&lt;br&gt;
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -&lt;br&gt;
apiVersion: types.kubefed.io/v1beta1&lt;br&gt;
kind: FederatedNamespace&lt;br&gt;
metadata:&lt;br&gt;
  name: test-namespace&lt;br&gt;
  namespace: test-namespace&lt;br&gt;
spec:&lt;br&gt;
  placement:&lt;br&gt;
    clusters:&lt;br&gt;
    - name: us-west-oregon&lt;br&gt;
    - name: asia-pacific-tokyo&lt;br&gt;
EOF&lt;br&gt;
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -&lt;br&gt;
apiVersion: types.kubefed.io/v1beta1&lt;br&gt;
kind: FederatedDeployment&lt;br&gt;
metadata:&lt;br&gt;
  name: test-deployment&lt;br&gt;
  namespace: test-namespace&lt;br&gt;
spec:&lt;br&gt;
  template:&lt;br&gt;
    metadata:&lt;br&gt;
      labels:&lt;br&gt;
        app: nginx&lt;br&gt;
    spec:&lt;br&gt;
      replicas: 3&lt;br&gt;
      selector:&lt;br&gt;
        matchLabels:&lt;br&gt;
          app: nginx&lt;br&gt;
      template:&lt;br&gt;
        metadata:&lt;br&gt;
          labels:&lt;br&gt;
            app: nginx&lt;br&gt;
        spec:&lt;br&gt;
          containers:&lt;br&gt;
          - image: nginx&lt;br&gt;
            imagePullPolicy: IfNotPresent&lt;br&gt;
            name: nginx&lt;br&gt;
  placement:&lt;br&gt;
    clusters:&lt;br&gt;
    - name: us-west-oregon&lt;br&gt;
    - name: asia-pacific-tokyo&lt;br&gt;
EOF&lt;br&gt;
After deployment, you will be able to see the nginx deployments are up and running in both clusters.&lt;/p&gt;

&lt;h1&gt;
  
  
  Check for lab-a
&lt;/h1&gt;

&lt;p&gt;kubectl get deployment -n test-namespace -owide --context lab-a  &lt;/p&gt;

&lt;h1&gt;
  
  
  Check for lab-b
&lt;/h1&gt;

&lt;p&gt;kubectl get deployment -n test-namespace -owide --context lab-b&lt;br&gt;
image&lt;/p&gt;

&lt;p&gt;You can also override application deployment version, etc., for specific clusters only via defining overrides in the YAML file :&lt;br&gt;
cat &amp;lt;&amp;lt; EOF | kubectl apply -f -&lt;br&gt;
apiVersion: types.kubefed.io/v1beta1&lt;br&gt;
kind: FederatedDeployment&lt;br&gt;
metadata:&lt;br&gt;
  name: test-deployment&lt;br&gt;
  namespace: test-namespace&lt;br&gt;
spec:&lt;br&gt;
  template:&lt;br&gt;
    metadata:&lt;br&gt;
      labels:&lt;br&gt;
        app: nginx&lt;br&gt;
    spec:&lt;br&gt;
      replicas: 3&lt;br&gt;
      selector:&lt;br&gt;
        matchLabels:&lt;br&gt;
          app: nginx&lt;br&gt;
      template:&lt;br&gt;
        metadata:&lt;br&gt;
          labels:&lt;br&gt;
            app: nginx&lt;br&gt;
        spec:&lt;br&gt;
          containers:&lt;br&gt;
          - image: nginx&lt;br&gt;
            name: nginx&lt;br&gt;
  placement:&lt;br&gt;
    clusters:&lt;br&gt;
    - name: us-west-oregon &lt;br&gt;
    - name: asia-pacific-tokyo&lt;br&gt;
  overrides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clusterName: asia-pacific-tokyo
clusterOverrides:

&lt;ul&gt;
&lt;li&gt;path: "/spec/replicas"
value: 5&lt;/li&gt;
&lt;li&gt;path: "/spec/template/spec/containers/0/image"
value: "nginx:1.17.0-alpine"&lt;/li&gt;
&lt;li&gt;path: "/metadata/annotations"
op: "add"
value:
foo: bar&lt;/li&gt;
&lt;li&gt;path: "/metadata/annotations/foo"
op: "remove"
EOF
After deployment, you’ll be able to see that the nginx deployment’s replicas, image version, etc., in lab-a are now modified.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Check for lab-a
&lt;/h1&gt;

&lt;p&gt;kubectl get deployment -n test-namespace -owide --context lab-a  &lt;/p&gt;

&lt;h1&gt;
  
  
  Check for lab-b
&lt;/h1&gt;

&lt;p&gt;kubectl get deployment -n test-namespace -owide --context lab-b&lt;br&gt;
That’s all for the application deployment testing. Now you’ll be able to use the federation to manage your clusters and application!&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>kubefed</category>
      <category>multicluster</category>
    </item>
  </channel>
</rss>
