Jared McCann had a goal and an assist, and Oliver Bjorkstrand and Yanni Gourde scored for the Kraken (27-23-11), who have won three of their past four.
"It's huge," McCann said. "Huge. It puts us right back in it. We feel like we've been playing well of late and haven't gotten the results, and tonight was a good team effort."
Andrei Kuzmenko scored twice, and Jacob Markstrom made 26 saves for the Flames (30-26-5), who had won nine of 12 (9-3-0).
"It puts more pressure and stress on us now that we have 20 games left in the season," Calgary forward Andrew Mangiapane said. "Each game is important for us. Trying to crawl back here and we need every two points."
Gourde gave Seattle a 1-0 lead on the first shot of the game at 4:04 of the first period. He scored glove side on Markstom after Brandon Tanev's initial shot from the point was blocked in the slot.
Kuzmenko scored on the power play to tie it 1-1 at 7:50 of the second period. He tucked a puck by the pad of a sprawled Grubauer from below the goal line.
Seattle outshot Calgary 11-2 in the first period.
"I love the way we try to battle and claw our way back each game that we play, but I think it's easier obviously in this league to play with the lead, and that starts with better first periods and coming out ready to play," Mangiapane said. "It's on everyone."