Franklin Gutierrez drew a one-out walk in the eighth against Aaron Crow (7-5) and Morales hit a 1-2 pitch over the wall in center for the winning runs.
The game had been tied since the fourth, when Kansas City rallied from a four-run deficit to tie it.
Kansas City had won three in a row and the Mariners had dropped three straight.
Lucas Luetge (1-2) retired all six men he faced over the seventh and eighth innings to get the win. It was his third major league victory, the other two having come last year.
Danny Farquhar retired the side in the ninth on nine pitches for his 12th save.
The Royals, part of a tight battle for American League wild card spots, used eight pitchers.