As I understand Chef is about pull model, means cookbooks are uploaded to chef server and while running chef-client command on node, cookbooks will be downloaded and installed on chef client.
Rundeck is a push model, means rundeck can be installed on a machine and we can register nodes to that rundeck. Rundeck will run a job on a node based on filter applied.
Now my question is:
If we can install rundeck and push jobs towards nodes then why we need chef?
With rundeck, you execute commands. Chef follows a desired state model and applies that desired state, similar to tools like Puppet, CFEngine and Ansible.
This includes the idea of idempotency: Imagine, you have clean servers and older ones and want to make sure that a certain state is configured on all of them. Running a couple of command with rundeck will now work on the clean nodes, but fail on the older ones, because it has been done a while ago. In contrast, Chef's model would be that it recognizes that the system is already in the desired state and does nothing.
Why will we integrate rundeck with chef?
IMHO you would integrate it to run chef-client on your nodes, i.e., to switch to a more push model instead of waiting for chef-client to start (often in intervals of 30min).
What is the thing which chef can do and rundeck can't?
See above. Rundeck in contrast allows to execute single ad-hoc commands, e.g., "what's the CPU load on my servers". This is not supported by chef.
Does chef also support push jobs?
Kind of, not really. There are Chef Push Jobs, which allow you to run pre-configured commands, e.g., to kick off chef-client
on your nodes. There was a recent blog article explaining that Chef Inc. sees this as the main goal of Chef Push Jobs and does not plan to extend it any further. So you can't run ad-hoc commands with that.