Swiftorial Logo
Home
Swift Lessons
Tutorials
Learn More
Career
Resources

Integrating with Kubernetes

Introduction

Kubernetes has become the de facto standard for container orchestration. This tutorial will guide you through integrating Ansible with Kubernetes to automate your deployments. By the end of this tutorial, you will understand how to use Ansible to manage Kubernetes resources and deploy applications seamlessly.

Prerequisites

Before you begin, ensure you have the following:

  • Ansible installed on your machine.
  • Access to a Kubernetes cluster.
  • kubectl installed and configured to interact with your cluster.

Setting Up Ansible for Kubernetes

First, you need to install the necessary Ansible collections for Kubernetes. Run the following command:

$ ansible-galaxy collection install community.kubernetes

Configuring Kubernetes Access

Ensure that your Kubernetes configuration is accessible to Ansible. Typically, this means your ~/.kube/config file should be correctly set up. You can verify your configuration by running:

$ kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
k8s-master     Ready    master   1d    v1.19.3
k8s-worker-1   Ready       1d    v1.19.3
                

Creating an Ansible Playbook

Next, create an Ansible playbook to deploy a simple NGINX application to your Kubernetes cluster. Create a file named deploy_nginx.yml and add the following content:

---
- name: Deploy NGINX to Kubernetes
  hosts: localhost
  tasks:
    - name: Create a namespace
      community.kubernetes.k8s:
        state: present
        definition:
          apiVersion: v1
          kind: Namespace
          metadata:
            name: nginx-namespace

    - name: Deploy NGINX
      community.kubernetes.k8s:
        state: present
        definition:
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: nginx-deployment
            namespace: nginx-namespace
          spec:
            replicas: 2
            selector:
              matchLabels:
                app: nginx
            template:
              metadata:
                labels:
                  app: nginx
              spec:
                containers:
                - name: nginx
                  image: nginx:latest
                  ports:
                  - containerPort: 80
                

Running the Playbook

Now that you have created your playbook, run it using the following command:

$ ansible-playbook deploy_nginx.yml
PLAY [Deploy NGINX to Kubernetes] *******************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************
ok: [localhost]

TASK [Create a namespace] *****************************************************************************************************
changed: [localhost]

TASK [Deploy NGINX] ***********************************************************************************************************
changed: [localhost]

PLAY RECAP ********************************************************************************************************************
localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
                

Verifying the Deployment

Finally, verify that your NGINX application has been successfully deployed. Run the following commands:

$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d
nginx-namespace   Active   5s
                
$ kubectl get deployments -n nginx-namespace
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           10s
                

Conclusion

In this tutorial, you learned how to integrate Ansible with Kubernetes to automate the deployment of applications. This is a powerful combination that can greatly enhance your DevOps workflows. Continue exploring Ansible and Kubernetes to unlock even more automation capabilities.