Sunday, May 30, 2021

Docker Service Stack deployment

To work with Docker service stack deployment we should have an orchestrator either Swarm or Kubernetes. Here, in this post, I will be experimenting with the Docker swarm cluster.

Prerequisites

  • Docker installed machine
  • Docker swarm initialized and active

  • Create the manifestation file that describes the task, which will be available in the service definition. We can use the declarative definitions for each service in a YAML file. 

    Docker Swarm Service Stack Deployment
    Docker Swarm Service Stack Deployment



    I read the book: Learn Docker - Fundamentals of Docker 19.x, where I found the nice explanation given in the 


     


    Let's run the docker swarm visualizer container, which will show the Swarm cluster node status, container service status it will be very clear to understand how the orchestrator capabilities work for Docker containers.
    docker run -it –d \
      -p 8080:8080 \
      -v /var/run/docker.sock:/var/run/docker.sock  \   
      dockersamples/visualizer
    
    Alternatively, you can use the docker-compose file as a replacement for the container run command:
    version '3'
    
    services:
      viz:
        image:  dockersamples/visualizer
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        ports:
          - "8080:8080"
    
    You can enhance it's usability with your own parameters to run the containers.

    When no deployments swarm nodes contain empty:

    Initial Swarm Visualization 


    Visualizer shows us the number of master and worker swarm nodes participating in the cluster. The green glow-filled circle indicates the active Node of the Docker Swarm cluster. 

    Docker stack service deployment

    The docker swarm service logs can be viewed in two ways using the parameter as service ID or using service NAME
     
    version: "3.7"
    services:
      whoami:
        image: training/whoami:latest
        networks:
          - test-net
        ports:
          - 81:8000
        deploy:
          replicas: 6
          update_config:
            parallelism: 2
            delay: 10s
          labels:
            app: sample-app
            environment: prod-south
    
    networks:
      test-net:
        driver: overlay
    
    The menifestation tells about the desired state  of the application, where we mentioned what is the port we want to use on the host and corresponding container port. Here 81 is host port, 8000 is container port. This service uses test-net network resource. The deploy section mentioned as replicas: 6, that means 6 containers will be created on Docker Swarm clsuter. You wish to run the multiple containers run parallel on the same node. We can use labels to identify and remove the services in runtime that will help in monitoring the applicaiton, It is also useful to terminate the services by descovering with these labels.

    Run the following docker Stack deployment command as:
    docker stack deploy whoami --compose-file docker-service-whoami.yml
    
    docker stack ls
    
    Stack deployment automatically creates overlay network
    docker network ls
    docker service ls
    docker container ls
    curl http://192.168.33.250:81
    
    The execution will produce output as follows:

    Curl command output from the Docker swarm cluster


    Now let's see the deployment of whoami sample:
    docker service logs whoami_whoami
    docker service logs kiw9ckp68hu5
    
    After the deployment of 'whoami' service see that is distributed amont multiple machines which built-in capability of the Docker swarm.

    Docker Swarm Visualization shows replicas=6 on multi-host deployment

    Docker Cluster Resilience Test case

    Here we can do the test for the resilience two levels:
    • container level
    • node level

    Use case 1: Container level fail-over 

    Step 1: Determine the running containers list
    Step 2: Remove a container from the stack 
    Step 3: The service deployment will automatically create the new container to maintain the DESIRED state as 6 when a container removed ACTUAL State gone to 5, to maintain it Docker Swarm will work to birng up the service.
    docker container ls
      docker container rm -f whoami_whoami.3.selectyourown-container
    docker ps
    


    Use case 1: Remove a container Swarm service recreate the replacement container

    This concludes containers high availability using service deployment using stack on swarm cluster. The actual real usecase that node level will give HA in tne next.

    Use case 2: When the node fails - Service Migration

    Brought down the Machine and see the outcome on the Swarm Visualizer:

    One your Vagrant machines you can stop one of the node to see the impact how it will recover or maintaine the DESIRED State of replicas=6, Here in our example, the service which is running on node1 continue running on available nodes (mstr, node2) by migrating the service to them. This migration will be taken care by the Docker Swarm automatically. We can also define choices in the YAML file. 

    Swarm Visualization of migration of services to other worker: Vagrant node1 halt

    The Visualization tool shows clear picture of how the Docker Swarm capable of migrate the service when there is issue/failure on node.
     
    It will clearly show how High-Availability can be achieved with the Docker Swarm orchestrator.
    Jai Hind!!

    No comments:

    Categories

    Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) create deployment (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)