Home / Articles / Devops / kubernetes / 1.23.6 / deployments-using-cli

Kubernetes Deployments using CLI

Create New Deployment

  • Create a new deployment with nginx docker image
  • In this example:
    Deployment Name : nginx-app
    Docker Image : nginx - Image will be downloaded from Docker Hub
    Replica Count : 3

    # kubectl create deployment nginx-app --image=nginx --replicas=3 deployment.apps/nginx-app created

Check Deployment Status

  • Check the details of newly created deployment
  • # kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-app 0/3 3 0 9s
  • Check detailed configuration of deployment
  • Setting to note here are:
    Selector : app=nginx-app - This value is used find which pods are associated with this deployment.
    Replicas : This show how many replicas are desired and what is the current status
    StrategyType : RollingUpdate - This is default value and defines the container update strategy.

    # kubectl describe deployment nginx-app Name: nginx-app Namespace: default CreationTimestamp: Fri, 29 Apr 2022 23:58:49 -0400 Labels: app=nginx-app Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx-app Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx-app Containers: nginx: Image: nginx Port: Host Port: Environment: Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: NewReplicaSet: nginx-app-7f6fdf9556 (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 6m14s deployment-controller Scaled up replica set nginx-app-7f6fdf9556 to 3
  • Check the details of pods associated with deployment nginx-app
  • # kubectl get pods -l app=nginx-app NAME READY STATUS RESTARTS AGE nginx-app-7f6fdf9556-bp7pf 1/1 Running 0 3m20s nginx-app-7f6fdf9556-m8tf7 1/1 Running 0 3m20s nginx-app-7f6fdf9556-rmj4b 1/1 Running 0 3m20s

Scaling Replicas

  • Scale the replica count from 3 to 5 in the nginx-app deployment
  • # kubectl scale deployment nginx-app --replicas=5 deployment.apps/nginx-app scaled
  • Check the details of scaled deployment
  • # kubectl get deployment nginx-app NAME READY UP-TO-DATE AVAILABLE AGE nginx-app 5/5 5 5 15m
    # kubectl get pods

    Replica count is now changed from 3 to 5

    NAME READY STATUS RESTARTS AGE nginx-app-7f6fdf9556-46nxx 1/1 Running 0 2m16s nginx-app-7f6fdf9556-bp7pf 1/1 Running 0 15m nginx-app-7f6fdf9556-m8tf7 1/1 Running 0 15m nginx-app-7f6fdf9556-nzmhd 1/1 Running 0 2m16s nginx-app-7f6fdf9556-rmj4b 1/1 Running 0 15m

Create Services

  • Create service for the nginx-app deployment
  • Service Type : Load Balancer
    Exposing service : Port 8080 (LoadBalancer) to port 80 (nginx container)
    No we can use LoadBalancer IP:8080 to connect to nginx containers

    # kubectl expose deployment nginx-app --type=LoadBalancer --port=8080 --target-port=80 service/nginx-app exposed
  • Check the details of service
  • # kubectl get services nginx-app NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-app LoadBalancer 10.99.180.191 8080:32290/TCP 111s
    # kubectl describe service nginx-app Name: nginx-app Namespace: default Labels: app=nginx-app Annotations: Selector: app=nginx-app Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.99.180.191 IPs: 10.99.180.191 Port: 8080/TCP TargetPort: 80/TCP NodePort: 32290/TCP Endpoints: 172.17.0.3:80,172.17.0.4:80,172.17.0.5:80 + 2 more... Session Affinity: None External Traffic Policy: Cluster Events:

Accessing NGINX Container Web Services

    Note: When using minikube, kubernetes IPs are internal and not accessible from outside. But we can login to the kubernetes cluster server and access nginx web pages from there as a test.

  • Login to minikube cluster server
  • # minikube ssh
  • Access nginx webpage
  • # curl http://10.99.180.191:8080