The new deal will pay $6.75 million over each of the next two seasons.
Reynolds and the Pirates were scheduled to go to arbitration after failing to come to an agreement on a one-year deal for 2022. Reynolds asked for $4.9 million, with Pittsburgh countering with $4.25 million.
"I always hoped this would be the outcome and it was the outcome, so I'd say this was a win-win,'' Reynolds said. "I don't think anybody ever wants to go to a hearing. For me, personally, I love Pittsburgh. I love my teammates and everything like that. To knock it out quickly like we did and to land where we're at, I think it worked out really well.''
Reynolds, 27, has blossomed with the Pirates after coming over in the January 2018 trade that sent center fielder Andrew McCutchen to the San Francisco Giants. Reynolds reached the majors in 2019 and moved to center field in 2021, hitting .302 with 24 homers and 90 RBIs while becoming an above-average defender.
Reynolds is batting .227 with one home run in five games this season for Pittsburgh. The Pirates are off to a 2-3 start heading into Thursday night's game against Washington.
The agreement comes two days after Pittsburgh signed third baseman Ke'Bryan Hayes to an eight-year, $70 million contract.
Hayes was happy to see Reynolds' contract situation get resolved.
"It's awesome,'' Hayes said. "That's part of the reason I signed. I feel like we're moving in the right direction. It's amazing to have a guy like that, middle of the order-type of guy. He's expressed that he wants to stay here. It's awesome to get a guy like that, keep him here for two years.''
The Associated Press contributed to this report.