# Kubernetes NGINX Deployment using CLI and YAML Overview: This will be a two-part write-up where we will first use the CLI to create a deployment that runs the NGINX image. We will display the details of the deployment, check logs, and then delete the deployment. In the section part, we will be creating the same deployment using a yaml file but with 4 nginx containers and then verifying via the command line. We will first create the deployment using the following command. jmbargallo@eva00:~ $ kubectl create deployment nginx-project --image=nginx deployment.apps/nginx-project created jmbargallo@eva00:~ $ To describe the deployment we can use the following command. jmbargallo@eva00:~ $ kubectl describe deployment nginx-project Name: nginx-project Namespace: default CreationTimestamp: Fri, 16 Feb 2024 14:37:25 +0100 Labels: app=nginx-project Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx-project Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx-project Containers: nginx: Image: nginx Port: Host Port: Environment: Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: NewReplicaSet: nginx-project-6858bdb67c (1/1 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 5m12s deployment-controller Scaled up replica set nginx-project-6858bdb67c to 1 jmbargallo@eva00:~ $ To get the logs, we can run the following command. jmbargallo@eva00:~ $ kubectl logs deployment/nginx-project /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perfo rm configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-defau lt.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d /default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf .d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.s h /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.s h /docker-entrypoint.sh: Configuration complete; ready for start up 2024/02/16 13:37:28 [notice] 1#1: using the "epoll" event method 2024/02/16 13:37:28 [notice] 1#1: nginx/1.25.4 2024/02/16 13:37:28 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 2024/02/16 13:37:28 [notice] 1#1: OS: Linux 6.1.21-v8+ 2024/02/16 13:37:28 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2024/02/16 13:37:28 [notice] 1#1: start worker processes 2024/02/16 13:37:28 [notice] 1#1: start worker process 29 2024/02/16 13:37:28 [notice] 1#1: start worker process 30 2024/02/16 13:37:28 [notice] 1#1: start worker process 31 2024/02/16 13:37:28 [notice] 1#1: start worker process 32 jmbargallo@eva00:~ $ Now we need to delete our deployment. jmbargallo@eva00:~ $ kubectl delete deployment nginx-project deployment.apps "nginx-project" deleted We have deleted our deployment and continue to the second part. To create what we had previously but with 4 containers, I’ll be using the following yaml file. apiVersion: v1 kind: Service metadata: name: nginx-project spec: type: LoadBalancer ports: - port: 80 selector: app: nginx-project --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-project spec: replicas: 4 selector: matchLabels: app: nginx-project template: metadata: labels: app: nginx-project spec: containers: - name: nginx image: nginx:1.17.3 ports: - containerPort: 80 Save to a file and run the following command: jmbargallo@eva00:~ $ kubectl apply -f nginx.yaml deployment.apps/nginx-project created Now let’s do another describe. jmbargallo@eva00:~ $ kubectl describe deployment nginx-project Name: nginx-project Namespace: default CreationTimestamp: Fri, 16 Feb 2024 14:56:14 +0100 Labels: Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx-project Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx-project Containers: nginx: Image: nginx:1.17.3 Port: 80/TCP Host Port: 0/TCP Environment: Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: NewReplicaSet: nginx-project-78b94b9cc8 (4/4 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 5m49s deployment-controller Scaled up replica set nginx-project-78b94b9cc8 to 4 jmbargallo@eva00:~ $ We can see that it has been scaled to 4. We can also get specific information relating to the pods themselves, the deployments, and the services by running the following commands respectively. jmbargallo@eva00:~ $ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-project-78b94b9cc8-t829l 1/1 Running 0 8m17s nginx-project-78b94b9cc8-6j7cj 1/1 Running 0 8m17s nginx-project-78b94b9cc8-phsll 1/1 Running 0 8m17s nginx-project-78b94b9cc8-2ff27 1/1 Running 0 8m17s jmbargallo@eva00:~ $ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE nginx-project 4/4 4 4 8m30s jmbargallo@eva00:~ $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 443/TCP 25h nginx-project LoadBalancer 10.43.171.236 80:30557/TCP 41m jmbargallo@eva00:~ $ Now let’s delete our deployment. kubectl delete deployment nginx-project We have successfully created containers with Kubernetes using the command line and using yaml.