The 23-year-old right-hander went 14-10 with a 3.20 ERA as a rookie last season and tossed seven scoreless innings to beat San Francisco in Game 6 of the World Series.
The announcement was made by Royals manager Ned Yost on Wednesday.
James Shields, the team's No. 1 starter last year, signed with San Diego in the offseason.
Duffy was 9-12 with a 2.53 ERA last season. Kansas City signed Volquez to a two-year contract in December after he went 13-7 with a 3.04 ERA last season for Pittsburgh.