kubernetes - kubectl run vs create and apply

12/28/2017

I'm just getting started with kubernetes and setting up a cluster on AWS using kops. In many of the examples I read (and try), there will be commands like:

kubectl run my-app --image=mycompany/myapp:latest --replicas=1 --port=8080

kubectl expose deployment my=app --port=80 --type=LoadBalancer

This seems to do several things behind the scenes, and I can view the manifest files created using kubectl edit deployment, and so forth However, i see many examples where people are creating the manifest files by hand, and using commands like kubectl create -f or kubectl apply -f

Am I correct in assuming that both approaches accomplish the same goals, but that by creating the manifest files yourself, you have a finer grain of control?

Would I then have to be creating Service, ReplicationController, and Pod specs myself?

Lastly, if you create the manifest files yourself, how do people generally structure their projects as far as storing these files? Are they simply in a directory alongside the project they are deploying?

-- djt
kubernetes

1 Answer

12/29/2017

The fundamental question is how to apply all of the K8s objects into the k8s cluster. There are several ways to do this job.

  • Using Generators (Run, Expose)
  • Using Imperative way (Create)
  • Using Declarative way (Apply)

All of the above ways have a different purpose and simplicity. For instance, If you want to check quickly whether the container is working as you desired then you might use Generators .

If you want to version control the k8s object then it's better to use declarative way which helps us to determine the accuracy of data in k8s objects.

Deployment, ReplicaSet and Pods are different layers which solve different problems.All of these concepts provide flexibility to k8s.

  • Pods: It makes sure that related containers are together and provide efficiency.
  • ReplicaSet: It makes sure that k8s cluster has desirable replicas of the pods
  • Deployment: It makes sure that you can have different version of Pods and provide the capability to rollback to the previous version

Lastly, It depends on use case how you want to use these concepts or methodology. It's not about which is good or which is bad.

-- Suresh Vishnoi
Source: StackOverflow