The agreement was struck earlier this week and announced Thursday. He can earn $3 million in performance bonuses, with half based on games started and half on plate appearances.
The 33-year-old hit .215 with 15 homers and 60 RBIs in 101 games last year for the New York Mets, who traded him to Pittsburgh on Aug. 27. He batted .292 with two RBIs in nine games for the Pirates.
Buck hit 63 homers over the last four seasons, fifth-most among catchers. Before joining the Mets, he played for Miami, Toronto and Kansas City.
With the Mariners, he'll be in the mix with Jesus Sucre and Humberto Quintero to back up Mike Zunino.
Seattle designated outfielder Carlos Peguero for assignment to clear a spot on its 40-man roster.