Logan Gilbert tossed seven impressive innings of four-hit ball as the Mariners won consecutive games for the first time since a four-game winning streak from April 22-26.
Two relievers finished a five-hitter, the first shutout this season for Seattle. Houston was held to three runs or less for the eighth time in 12 games.
Gilbert (5-2) went seven innings for the third successive start, but picked up his first win since May 1 against Miami. In his past three outings, the second-year righty has allowed a total of six earned runs over 21 innings with 18 strikeouts.
"His continued growth, the confidence he has when he takes the mound, it's as high as anybody's in the league right now, and it should be," Seattle manager Scott Servais said. "He's got great stuff, he's got a great idea of what he's doing out there, and he is super aggressive and on the attack. I love watching him pitch."
Gilbert retired his final 11 batters.
"Just trying to get ahead," he said. "That's the main thing we preach here. I did a pretty good job of it. Just get in good counts and mix it up, give them different looks. That was the main thing."
Gilbert's performance was the first time all season a Seattle pitcher has thrown seven shutout innings.
"You get that guy a lead like that, he has a lot of weapons he can throw against you," Houston manager Dusty Baker said. "We hit some balls on the nose and we didn't find any holes. And they found every hole."
After taking a 1-0 lead in the first on J.P. Crawford's RBI single, Seattle added two more runs in the second thanks to a long homer from Lewis that clanked off the front of the left-field bleachers and was projected at 420 feet.
The home run was Lewis' second of the season. His first came on Friday against Justin Verlander, one of four given up by the Astros ace.
"He brings more fear to our lineup," France said. "We've got a good 1 through 9 and having him back, it just helps all of us. We know we've got another guy that can go out at any moment and do damage."
Eugenio Suarez had a sacrifice fly in the fourth inning and the Mariners added two more in the fifth on Ty France's two-run single. France had two hits and extended his hitting streak to 10 games.
"We've been capable of this all year, and it's finally coming together," France said. "I told you guys before we were close, and I think these last few days have showed what kind of team we really are."
Houston starter José Urquidy failed to make it through the fifth after allowing a single to Rodríguez, and was pulled after 4 2/3 innings. The hit was Rodríguez's third of the night and fourth time on base.
Urquidy (4-2) allowed 12 hits and five earned runs with two walks and four strikeouts. It was the second time this season he's given up 12 hits in a game - the other was May 17 against Boston.
Mariners: RHP Ken Giles (finger), whose scheduled rehab outing for Triple-A Tacoma was rained out Saturday, will most likely have four to five outings between Tacoma and Class A Everett before making his season debut. ... RHP Erik Swanson (elbow) threw a bullpen as he works his way back from right elbow inflammation. ... INF Abraham Toro (shoulder) is scheduled to be sent out on a rehab assignment early next week if he continues to progress well from a sprained left shoulder.
Astros: OF Kyle Tucker was removed in the sixth due to discomfort in his foot. Baker said Tucker will have more tests Sunday, but the move was precautionary.
Astros: RHP Luis Garcia (3-3, 3.38 ERA) will try to snap a two-start losing streak. In his last start, Garcia allowed four runs - two earned - and five hits in a 6-1 loss to Cleveland.
Mariners: LHP Marco Gonzales (3-4, 3.74) looks to win his third consecutive start. Gonzales allowed five runs and eight hits in 5 1/3 innings last time out, a 7-6 win against Oakland.
Kyle Lewis clobbers a HR for the second straight day
Kyle Lewis wallops one 420 feet to left field to increase the Mariners' lead over the Astros.