Skip to content

Instantly share code, notes, and snippets.

@jasdeepkhalsa
Last active February 27, 2021 18:13
Show Gist options
  • Select an option

  • Save jasdeepkhalsa/11cc116d94671562deea6f711725dbf3 to your computer and use it in GitHub Desktop.

Select an option

Save jasdeepkhalsa/11cc116d94671562deea6f711725dbf3 to your computer and use it in GitHub Desktop.

Revisions

  1. jasdeepkhalsa revised this gist Feb 27, 2021. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions gcp.sh
    Original file line number Diff line number Diff line change
    @@ -18,6 +18,9 @@ gcloud compute instances create nucleus-jumphost --machine-type f1-micro --zone
    # Create a Kubernetes cluster with a specific machine-type (if --num-nodes are omitted, defaults to 3)
    gcloud container clusters create my-cluster --machine-type n1-standard-1 --zone us-east1-b --num-nodes 2

    # Get info on the cluster, control plane IP, KubeDNS, metrics etc.
    kubectl cluster-info

    # Authenticate the Kubernetes cluster
    gcloud container clusters get-credentials my-cluster --zone us-east1-b

  2. jasdeepkhalsa revised this gist Feb 27, 2021. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gcp.sh
    Original file line number Diff line number Diff line change
    @@ -15,8 +15,8 @@ gcloud config set compute/zone us-east1-b
    gcloud compute instances create nucleus-jumphost --machine-type f1-micro --zone us-east1-b

    ## Create a Kubernetes service cluster
    # Create a Kubernetes cluster with a specific machine-type
    gcloud container clusters create my-cluster --machine-type n1-standard-1 --zone us-east1-b
    # Create a Kubernetes cluster with a specific machine-type (if --num-nodes are omitted, defaults to 3)
    gcloud container clusters create my-cluster --machine-type n1-standard-1 --zone us-east1-b --num-nodes 2

    # Authenticate the Kubernetes cluster
    gcloud container clusters get-credentials my-cluster --zone us-east1-b
  3. jasdeepkhalsa revised this gist Feb 27, 2021. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions gcp.sh
    Original file line number Diff line number Diff line change
    @@ -46,6 +46,9 @@ kubectl rollout status deployment/<deployment>
    # View the rollout history
    kubectl rollout history deployment/<deployment>

    # See which version of a deployment is in use
    curl -ks https://`kubectl get svc <frontend> -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version

    # See which version of a container image is deployed to a pod
    kubectl get pods -o jsonpath --template='{range .items[*]}{.metadata.name}{"\t"}{"\t"}{.spec.containers[0].image}{"\n"}{end}'

  4. jasdeepkhalsa revised this gist Feb 27, 2021. 1 changed file with 22 additions and 0 deletions.
    22 changes: 22 additions & 0 deletions gcp.sh
    Original file line number Diff line number Diff line change
    @@ -27,6 +27,28 @@ kubectl create deployment hello-server --image gcr.io/google-samples/hello-app:2
    # Expose the Kubernetes Service to the outside world
    kubectl expose deployment hello-server --type LoadBalancer --port 8080

    # Get pods, services, replicaSets and deployments running
    kubectl get pods
    kubectl get services
    kubectl get replicasets
    kubectl get deployments

    # Increase the number of replica pods of a deployment
    kubectl scale deployment <deployment> --replicas=3

    # Trigger, pause, resume, undo and view status of a rolling update on a deployment
    kubectl edit deployment <deployment>
    kubectl rollout pause deployment/<deployment>
    kubectl rollout resume deployment/<deployment>
    kubectl rollout undo deployment/<deployment>
    kubectl rollout status deployment/<deployment>

    # View the rollout history
    kubectl rollout history deployment/<deployment>

    # See which version of a container image is deployed to a pod
    kubectl get pods -o jsonpath --template='{range .items[*]}{.metadata.name}{"\t"}{"\t"}{.spec.containers[0].image}{"\n"}{end}'

    # Create an interactive shell inside a pod
    kubectl exec <pod> --stdin --tty -c <pod> /bin/sh

  5. jasdeepkhalsa revised this gist Feb 22, 2021. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions gcp.sh
    Original file line number Diff line number Diff line change
    @@ -27,6 +27,9 @@ kubectl create deployment hello-server --image gcr.io/google-samples/hello-app:2
    # Expose the Kubernetes Service to the outside world
    kubectl expose deployment hello-server --type LoadBalancer --port 8080

    # Create an interactive shell inside a pod
    kubectl exec <pod> --stdin --tty -c <pod> /bin/sh

    # Check that the service has been exposed
    kubectl get service

  6. jasdeepkhalsa revised this gist Feb 14, 2021. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions gcp.sh
    Original file line number Diff line number Diff line change
    @@ -30,6 +30,11 @@ kubectl expose deployment hello-server --type LoadBalancer --port 8080
    # Check that the service has been exposed
    kubectl get service

    kubectl get # list resources
    kubectl describe # show detailed information about a resource
    kubectl logs # print the logs from a container in a pod
    kubectl exec # execute a command on a container in a pod

    # Get list of compute images
    gcloud compute images list

  7. jasdeepkhalsa created this gist Feb 14, 2021.
    138 changes: 138 additions & 0 deletions gcp.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,138 @@
    ## General commands
    # Get active account name
    gcloud auth list

    # List the project ID
    gcloud config list project

    # Find default zone
    gcloud compute project-info describe --project <GCP Project ID>

    # Set default zone
    gcloud config set compute/zone us-east1-b

    # Create server / compute instance with a specific machine type in a specific zone
    gcloud compute instances create nucleus-jumphost --machine-type f1-micro --zone us-east1-b

    ## Create a Kubernetes service cluster
    # Create a Kubernetes cluster with a specific machine-type
    gcloud container clusters create my-cluster --machine-type n1-standard-1 --zone us-east1-b

    # Authenticate the Kubernetes cluster
    gcloud container clusters get-credentials my-cluster --zone us-east1-b

    # Deploy an application to the cluster
    kubectl create deployment hello-server --image gcr.io/google-samples/hello-app:2.0

    # Expose the Kubernetes Service to the outside world
    kubectl expose deployment hello-server --type LoadBalancer --port 8080

    # Check that the service has been exposed
    kubectl get service

    # Get list of compute images
    gcloud compute images list

    ## Set up an HTTP load balancer
    # Create a startup script
    cat << EOF > startup.sh
    #! /bin/bash
    apt-get update
    apt-get install -y nginx
    service nginx start
    sed -i -- 's/nginx/Google Cloud Platform -'"\$HOSTNAME"'/'
    /var/www/html/index.nginx-debian.html
    EOF

    # Create an instance template
    gcloud compute instance-templates create lb-backend-template \
    --region us-east1 \
    --network default \
    --machine-type f1-micro \
    --subnet default \
    --tags allow-health-check \
    --image-family debian-9 \
    --image-project debian-cloud \
    --metadata-from-file startup-script=startup.sh

    # Create a target pool
    gcloud compute target-pools create lb-pool

    # Create a managed instance group with a target pool,
    # that should receive incoming traffic from forwarding rules
    gcloud compute instance-groups managed create lb-backend-group \
    --template lb-backend-template \
    --size 2 \
    --zone us-east1-b \
    --target-pool lb-pool

    # Check computer instances
    gcloud compute instances list

    # Create a simple firewall
    gcloud compute firewall-rules create fw-allow-health-check --allow tcp:80
    # Or a more explicit firewall
    gcloud compute firewall-rules create fw-allow-health-check \
    --network default \
    --action allow \
    --direction ingress \
    --source-ranges 130.211.0.0/22,35.191.0.0/16 \
    --target-tags allow-health-check \
    --rules tcp:80

    # Create a forwarding rule from the outside world to the target pool
    gcloud compute forwarding-rules create nginx-lb \
    --region us-east1 \
    --ports 80 \
    --target-pool lb-pool

    # Create a reserved IPv4 address (optional)
    gcloud compute addresses create lb-ipv4-1 \
    --ip-version IPV4 \
    --global

    # Get the IPv4 address (optional)
    gcloud compute addresses describe lb-ipv4-1 \
    --format "get(address)" \
    --global

    # Create a HTTP health check
    gcloud compute http-health-checks create http-basic-check --port 80

    # Ensure the health check service can reach the instance-group on http port 80
    # See gcloud compute instance-groups set-named-ports --help for more information
    gcloud compute instance-groups managed set-named-ports lb-backend-group \
    --named-ports http:80

    # Create a backend service...
    gcloud compute backend-services create web-backend-service \
    --protocol HTTP \
    --http-health-checks http-basic-check \
    --global

    # ...and attach the managed instance group
    gcloud compute backend-services add-backend web-backend-service \
    --instance-group lb-backend-group \
    --instance-group-zone us-east1-b \
    --global

    # Create a URL map
    gcloud compute url-maps create web-map-http --default-service web-backend-service

    # Target the HTTP proxy to route requests to your URL map
    gcloud compute target-http-proxies create http-lb-proxy --url-map web-map-http

    # Create a global forwarding rule from outside world to lb-proxy
    gcloud compute forwarding-rules create http-content-rule \
    --global \
    --target-http-proxy http-lb-proxy \
    --ports 80
    # --address lb-ipv4-1

    # Check the forwarding rule is active
    gcloud compute forwarding-rules list

    # Undo/Delete all of the created above
    gcloud compute forwarding-rules delete http-content-rule --global && gcloud compute target-http-proxies delete http-lb-proxy && gcloud compute url-maps delete web-map-http && gcloud compute backend-services delete web-backend-service --global
    gcloud compute health-checks delete http http-basic-check
    gcloud compute firewall-rules delete fw-allow-health-check && gcloud compute instance-groups managed delete lb-backend-group && gcloud compute instance-templates delete lb-backend-template