Monday, July 11, 2022

Google Cloud Platform - Compute Services

 Google App Engine (GAE):

A managed service provided by GCP. Easiest way to deploy your application.

GAE helps in auto scaling, load balancing as well as health check monitoring.

In simplest terms, GAE provided end to end application management. 

A very important feature provided by GAE is traffic management (splitting) between different application versions.

Please don't be confused between GAE and Compute Engine. GAE comes under PaaS and Compute Engine under IaaS. Have a look at the diagram below (taken from google cloud via Internet) which depicts the responsibility of the owner from IaaS, PaaS and SaaS.



With Compute Engine, being IaaS, one has more flexibility but comes with more responsibility.

In GAE, being PaaS, there is less responsibility but less flexibility. It's Server-less.

Google Kubernetes Engine (GKE)

GKE is a very popular open source container orchestration tool. Its a managed service offered by GCP.

  • Provides cluster management for the VMs that one wants to deploy.
  • All these VMs can be of different types.
  • GKE provides all of the below
    • Auto scaling
    • Health check and self heal (replace)
      • Auto repair and auto upgrade
    • Load balance
    • Support for SSD disks (local) 
    • Support for persistent disks
    • Zero downtime deployments
    • Cloud Logging
    • Cloud Monitoring
  • Uses container optimized OS (from Google)
Steps:
  1. Create a new project (optional) or use an existing project
  2. Connect to the project using Cloud shell [gcloud config set project <Project ID>]
  3. In the console, go to "Kubernetes Engine" and enable the APIs.
  4. In the console, go to "Kubernetes Engine" and create "Kubernetes cluster"
    1. Cluster options
      1. Standard - User takes ownership of the cluster
      2. Auto Pilot - As the name suggests, GKE will take ownership of the cluster.
    2. Alternatively use cloud shell to create cluster [gcloud container clusters create]
  5. Connect to the cluster using Cloud shell  [gcloud container clusters get-credentials <clustername> --zone <selected zone> --project <project ID>  
    1. Get the above command from the cluster console 
  6. Deploy microservice
    1. kubectl create deployment <deployment name> --image <image name>
    2. kubectl get deployment (to see deployment details)
    3. To access this deployment, expose it externally
      1. kubectl expose deployment <deployment name> --type=LoadBalancer --port=<port#>
      2. Kubernetes service gets created from the above command
      3. To view the service
        1. kubectl get services
        2. You can see the cluster IP, External IP, Type and Name
    4. Once you have the external ID, you can connect to it 
      1. curl IP_address:port#
      2. Use the above IP to access via browser with the micro service name
  7. Scaling the deployment
    1. While connected to the cloud shell and the cluster
      1. kubectl scale deployment <deployment name> --replicas=n
      2. As mentioned in 6.2, use kubectl get deployment to get details and see if it's scaled.
      3. These instances are called as "pod"
        1. kubectl get pods to see details
      4. If we need to scale to a higher value, we need to first scale up the # of nodes in the cluster
        1. gcloud container clusters resize <cluster name> --node-pool <node pool name> --num-nodes=x --zone=<zone name>
          1. Get the node pool name from the console (go to cluster and node)
          2. Get the zone name from the console (go to cluster)
        2. The same applies when we want to reduce the # of nodes
      5. But why not auto-scale?
        1. kubectl autoscale deployment <deployment name> --max=mx_n --cpu-percent=X
        2. To see this, we need to find if the pods were autoscaled horizontally
          1. kubectl get hpa
      6. But shouldn't we auto scale cluster as well?
        1. gcloud container clusters update <cluster name> --enable-autoscaling --min-nodes=min_x --max-nodes=max_x
      7. All good? Lets also learn how to delele?
        1. Delete microservice? kubectl delete service <microservice-name>
        2. Delete deployment? kubectl delete deployment <deployment name>
        3. Delete cluster? gcloud containers clusters delete <cluster name> --zone <zone name>
But, I have a container to deploy? Is that possible?

Yes, of course. Use Google Cloud Run (GCR)

Google Cloud Run is "Container to production in seconds"
Pre-req: A container image or a repository from where new versions of containers can be picked.
  • We get options to choose from:
    • Charge for CPU usage only when a request is processed (invocation)
    • Charge for entire lifecycle of the container instance
  • Auto scaling configuration option is provided. 
  • Authentication option is also provided
GCR is built on top of KNative.

It's a server less platform for applications based on containers (No Infra management).




No comments:

Post a Comment