Given a Hamiltonian, H, it will have a complete othonormal set of eigenvectors and associated real eigenvalues.
Quantum numbers (which can be symbols as well as numbers) are a classification scheme for the eigenvectors.
The idea is that for any given operator, there is a unique way of turning a quantum number into the eigenvalue of that operator. Eg, for total angular momentum, if the quantum number is \ell, experienced physicists automatically recognise that the eigenvalue is \ell(\ell+1)\hbar^2. So associated with an observable is a set of quantum numbers which have a one-to-one mapping onto the set of eigenvalues, which themselves have a one-to-many mapping onto eigenstates. (Due to the possibility of degeneracy). A "good" quantum number means the operator commutes with the hamiltonian, ie. is a conserved quantity.
How do we classify eigenvectors of H using good quantum numbers then?
Choose some operator (eg, A) which commutes with H: it follows that eigenvectors of A are also eigenvectors of H.
Label the eigenvectors of H by the A quantum numbers.
If there are eigenvectors of H with the same label, find another operator B, which commutes both with A, and with H.
In addition to the A-quantum number, add a B-quantum number label.
Keep going with C,D, etc until no two states have the same set of quantum numbers.
eg Hydrogen:
1)Choose A as the hamiltonian itself.
States are labelled by 'n'. Still some degeneracy.
2)Choose B as total orbital angular momentum.
States are labelled by n\ell. Still some degeneracy.
3)Choose C as azimuthal angular momentum
States are labelled by n\ell m_\ell. Still some degeneracy.
4)Choose D as azimuthal spin angular momentum.
States are labelled by n\ell m_\ell m_s. No degeneracy.
The procedure is not unique, it boils down to identifying a maximally commuting set of observables and in general there are many of these.
In the presence of perturbations, the states might no longer be eigenstates of H, but they provide a useful basis to do perturbative calculations with.