Matthias Ginter put them ahead in the 20th minutes after good work from Antonio Rudiger, and Leon Goretzka pounced on a mistake by Ukraine keeper Georgiy Bushchan to head in their second goal four minutes after the restart.
Despite having the rested Bayern Munich and RB Leipzig players back in the lineup, the Germans were far from their best and a 77th minute Ruslan Malinovskyi penalty woke up the 20,000 large crowd in the Ukrainian capital's Olympic stadium.
The Germans, who conceded equalisers in each of their last three games to settle for draws, managed to protect their lead on Saturday despite desperate late attacks from the hosts to bag their first three points in the competition.
In a sloppy first half they repeatedly lost possession, allowing Ukraine to quickly counter attack before Ginter's goal settled their nerves.
But Bushchan had a good day making a string of saves before he let the ball slip out of his hands, allowing Goretzka to score in the 49th.
He then again was on hand to stop them scoring, superbly palming a Serge Gnabry shot wide.
"Obviously I am happy we won but we could have been leading 3-0 or 4-0," Germany coach Joachim Low said.
"In some cases we gave up the ball too easily. When we were 2-0 up they were tired and we should have played more counter attacks maybe. But overall we were solid and did not allow them too many chances."