Connect civo k3s Cluster with Azure ARC

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 Image is taken from Azure official blog

civo cloud has created a first-ever managed k3s cluster(you can get access by applying here ). 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:


Let the cluster get created meanwhile let's configure and enable Azure ARC 1) Install Azure CLI - docs

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.

3) Go to Azure Arc in Azure portal

Screenshot 2020-07-08 at 11.32.58 PM.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

you can download the kubeconfig file from the civo cloud ui Screenshot 2020-07-08 at 11.37.27 PM.png

Screen 2 just enter the cluster details Screenshot 2020-07-08 at 11.40.07 PM.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

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

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

Screenshot 2020-07-09 at 8.00.07 AM.png

BOOM all the things get deployed automatically

Screenshot 2020-07-09 at 8.14.39 AM.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   <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   <none>        6379/TCP       14m
azure-vote-front   LoadBalancer   <pending>     80:30823/TCP   14m

Screenshot 2020-07-09 at 8.16.32 AM.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 and polices

Saiyam Pathak [CKA | CKAD | CNCF Ambassador]