Key derivation functions (KDF): What are? Main purposes? How can they be used? What are KDFs? What are their main purposes? How they can be used, in other words, what's their drill in a cryptography scheme?
The HKDF paper provides as good a summary as any:


  A Key derivation function (KDF) is a basic and essential component of cryptographic systems: Its goal is to take a source of initial keying material, usually containing some good amount of randomness, but not distributed uniformly or for which an attacker has some partial knowledge, and derive from it one or more cryptographically strong secret keys.


Here it's important that you understand how the term "random" is used in probability theory vs. how it's (ab)used by computer people.  Very informally:


When us computer folks say "random" we more often that not implicitly assume that we're talking about a discrete, finite, uniform and independent random variable—one that takes on any value drawn from a finite set with equal probability as all the others, and earlier outcomes do not influence later ones, the way coin flips or dice rolls behave.
When statisticians say random, they aren't assuming as much.  For a statistician, for example, a stereotypical random variable has a normal distribution ("bell curve"), where values cluster around a mean and disperse according to a standard deviation—the way, for example, that inexact physical measurements have random errors that cluster around the true value.


So reading the quote with that in mind, a KDF is a cryptographically strong function that takes input that is random in the statistician's sense and produces output that is pseudorandom in the cryptographer's (preferred) sense.  This is useful in various contexts:


Diffie-Hellman key exchange with randomly selected keys produces a shared secret that is random in the statistician's sense, but its output is not uniformly distributed.  So to use this secret as a symmetric key you pass it through some KDF.
Cryptographic random number generators refresh themselves periodically from the values obtained by measuring random events like network packet timing, mouse movements or key presses.  These are also not uniform, so a KDF can be used to fix that.
Passwords are also not uniform, so to turn passwords into keys we use KDFs.  But in that case we use specialized password-based KDFs that also add a work factor to slow down brute force guesses.