# Connect civo k3s Cluster with Azure ARC


First of Kubernetes aka k8s is a defacto orchestration engine for everyone now (believe it or not).
Since people are creating kubernetes clusters in multiple clouds, on-premise, and trying to avoid a vendor lock-in kind of scenario there comes a need to manage all the clusters from one place. Now there are a lot of tools that help to do that and today I will be discussing Azure ARC. 

### Azure ARC  
Back in 2019 Azure ARC was announced to closed preview and now it's available for all to experiment with. So what Azure arc lets you do, it helps you to manage infrastructure not running in Azure. Kubernetes clusters running in different cloud vendors or on Premise can leverage the Azure Tech stack for management. 

to Explain how Azure ARC will help consider a scenario that you have 50 clusters spanned across various cloud vendors and on premise, With Azure Arc you will be able to get a unified view for all the clusters and also you will be able to leverage:
- Security 
- Governance
- Gitops
- RBAC 
Major thing I would say is the access control and ability for the developers to deploy applications on all the clusters from a single place with the GitOps model. Which sounds interesting to me. 


![Screenshot 2020-07-08 at 9.50.52 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594225281282/LWssw34eL.png)
Image is taken from [Azure official blog](https://azure.microsoft.com/en-us/blog/azure-arc-enabled-kubernetes-preview-and-new-ecosystem-partners/) 

civo cloud has created a first-ever managed k3s cluster(you can get access by applying  [here](https://www.civo.com/?ref=3a1d41) ). So I will be using the k3s(certified kubernetes distribution) cluster. First login to civo cloud and create a cluster pretty simple and fast in less than 2 minutes as follows:
 
![dd.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594225183370/dQnK3LII1.png)

Let the cluster get created meanwhile let's configure and enable Azure ARC 
1) Install Azure CLI - [docs](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest)

2) Run following commands to enable  azure arc feature 

```
az login 
az feature register --namespace Microsoft.Kubernetes --name previewAccess 
az feature register --namespace Microsoft.KubernetesConfiguration --name sourceControlConfiguration

Verify the enablement by :
az feature list -o table | grep Kubernetes
Microsoft.Kubernetes/previewAccess                                                Registered
Microsoft.KubernetesConfiguration/sourceControlConfiguration                      Registered

``` 
Now Register the providers 

```
az provider register --namespace Microsoft.Kubernetes
az provider register --namespace Microsoft.KubernetesConfiguration

Check if they are completed:
az provider show -n Microsoft.Kubernetes -o table 
az provider show -n Microsoft.KubernetesConfiguration -o table

```
All these commands will take some time to take effect so show some patience here. 

Install kubernetes extensions(either add or update)

```
az extension add --name connectedk8s 
az extension add --name k8sconfiguration

az extension update --name connectedk8s 
az extension update --name k8sconfiguration

```

Install Helm3 as Azure Arc used Helm 3 for installing the agents on the cluster. You can install helm 3 from the [docs](https://helm.sh/docs/intro/install/).

3) Go to Azure Arc in Azure portal 

![Screenshot 2020-07-08 at 11.32.58 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594231733865/3VymWZfbE.png)

Select **Register Cluster** 
**Screen 1 ** will show all the prerequisite steps to be performed out of which I have done all except downloading the kubeconfig file
![Screenshot 2020-07-08 at 11.34.54 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594231711963/l3ftuP8a_.png)

you can download the kubeconfig file from the civo cloud ui
![Screenshot 2020-07-08 at 11.37.27 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594231759727/AGbbXx342.png)

**Screen 2** just enter the cluster details 
![Screenshot 2020-07-08 at 11.40.07 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594231833713/K_8HYZCyE.png)

**Screen3**  Run the commands as shown (point the kubeconfig to the right config file)
![Screenshot 2020-07-08 at 11.42.56 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594232026999/hAe1UrqHc.png)

**Screen4** Verification page shows the cluster is connected and after finishing you can setup gitops, Azure monitoring and Compliance policies.
![Screenshot 2020-07-08 at 11.50.33 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594232647954/3VljYShRU.png)

From the kubectl you can see the components running 
```
kubectl get pods -n azure-arc --kubeconfig config 
NAME                                         READY   STATUS    RESTARTS   AGE
flux-logs-agent-799cb595f5-4qvqf             2/2     Running   0          11m
metrics-agent-784cddf6c6-l6hrg               2/2     Running   0          11m
controller-manager-7d6f9f56b5-8tqxq          3/3     Running   0          11m
resource-sync-agent-d86c6ddd-z7h7c           3/3     Running   0          11m
cluster-metadata-operator-745954d56d-nc5fk   2/2     Running   0          11m
clusteridentityoperator-5497448799-xdv9h     3/3     Running   0          11m
config-agent-57889d49d6-k6g28                3/3     Running   0          11m

```

That's it the cluster is now connected to Azure Arc. Let us try some GitOps now go to configurations and click add configuration and define the git repo from where you want to. have the application deployed on the cluster directly. In this case, I am taking sample git repo by [azure](https://github.com/Azure/arc-k8s-demo)

![Screenshot 2020-07-09 at 8.00.07 AM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594261929603/YnxbjozDI.png)

BOOM all the things get deployed automatically 

![Screenshot 2020-07-09 at 8.14.39 AM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594262698060/EMWWNECjJ.png)

```
kubectl get all -n demo --kubeconfig config2
NAME                             READY   STATUS    RESTARTS   AGE
pod/memcached-86bdf9f56b-r8d96   1/1     Running   0          14s
pod/demom-558478cbcb-kndmd       1/1     Running   0          14s


NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
service/memcached   ClusterIP   192.168.191.38   <none>        11211/TCP   14s


NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/memcached   1/1     1            1           15s
deployment.apps/demom       1/1     1            1           15s

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/memcached-86bdf9f56b   1         1         1       15s
replicaset.apps/demom-558478cbcb       1         1         1       15s
```

you can access the application and the port where the azure-vote-front service is running 
```
kubectl get svc --kubeconfig config2
NAME               TYPE           CLUSTER-IP        EXTERNAL-IP   PORT(S)        AGE
azure-vote-back    ClusterIP      192.168.202.113   <none>        6379/TCP       14m
azure-vote-front   LoadBalancer   192.168.129.104   <pending>     80:30823/TCP   14m

```

![Screenshot 2020-07-09 at 8.16.32 AM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1594262858945/UJUE58Q17.png)

It's pretty easy to connect the cluster and deploy the application onto kubernetes directly using Git. You will also be able to use helm to deploy the application from the configuration. 
Other things that can be done is setting up [azure monitor](https://docs.microsoft.com/en-us/azure/azure-monitor/insights/container-insights-enable-arc-enabled-clusters) and [polices](https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/use-azure-policy)


[Saiyam Pathak](https://twitter.com/saiyampathak)
[CKA | CKAD | CNCF Ambassador]



