on kubernetes, one can blindly create a resource (such as deployment, service, pods, etc.). the resouce will be created only if there are enough system resources on the kubernetes nodes\cluster.
What you are looking for in (1) is possible with a custom admission controller - but I personally think that is too complex and not a great idea from the user experience point of view.
What would be ideal is that once a resource is created - and if the scheduler sees that there are not enough resources - then the cluster is autoscaled. This is possible with Kubernetes Autoscaler or Escalator. Both of them allow scaling cluster based on certain conditions - but are suited for different use cases.
You can find detailed information on how does the autoscaler adds nodes when it sees that a pod could be not be scheduled here