Manchester City's Premier League title defence began with a 2-0 win at West Ham United on Sunday.
Erling Haaland silenced his early critics to score a brace on his league debut for City, who enjoyed the lion's share of possession and were made to work through a dogged West Ham team.
The hosts made a fast start with Aaron Cresswell crossing for Michail Antonio, but his near-post flick deflected behind for a corner and he headed over from a cross following the resulting set piece.
Kevin De Bruyne dragged a shot from 18 yards wide as the visitors struggled to break down their stubborn hosts, while Haaland couldn't get a solid enough contact on a dangerous Phil Foden cross.
City had the ball in the net after 27 minutes when Ilkay Gundogan squared for De Bruyne to tap in, but the flag was raised for a clear offside against the German.
Substitute goalkeeper Alphonse Areola conceded a penalty soon after replacing the injured Lukasz Fabianski when he brought down Haaland, who stepped up and rolled his spot kick into the far left corner to open the scoring.
A rare error from Gundogan led to Declan Rice getting a shot off, but his 20-yard strike sailed harmlessly over the top.
David Moyes brought new signing Gianluca Scamacca and Said Benrahma into the fold to try and capitalise on this faint upward trajectory, with the Algerian forcing Ederson into a save soon after his introduction.
But City hit West Ham on the break to double their lead as De Bruyne quickly turned and slipped through Haaland to grab his brace.
The gangly Norwegian was desperate to grab a hat-trick and nearly did so when he rose highest to meet Jack Grealish's pacy cross, but he couldn't keep his header down.
A powerful header from Scamacca brought a top stretching save out of Ederson, but he was several yards offside when Vladimir Coufal crossed for him.
Rodri and Grealish dragged shots wide as City went in search of a third, but they had to settle for just the two goals.
West Ham United vs Manchester City player ratings
1. West Ham United (4-2-3-1)
GK: Lukasz Fabianski - N/A - Substituted after 28 minutes with injury.
RB: Vladimir Coufal - 5/10 - Tucked inside a lot to let Grealish have free reign of the wing.
CB: Ben Johnson - 4/10 - Lost the run of Haaland leading up to the opener, though obviously you can't expect him to match that kind of pace.
CB: Kurt Zouma - 5/10 - Got his head on many City crosses.
LB: Aaron Cresswell - 5/10 - Like Coufal spent a lot of the game acting as another centre-back.
CM: Declan Rice - 5/10 - At least tried to get on the ball and play through City.
CM: Tomas Soucek - 5/10 - Rarely called for the ball and didn't provide much in the physical battle.
RM: Jarrod Bowen - 5/10 - Very quiet and didn't make the most of the scraps he was feeding off. Looked slightly more threatening when moved centrally.
AM: Manuel Lanzini - 4/10 - Barely even noticed that the Argentine was on the pitch.
LM: Pablo Fornals - 5/10 - Worked hard but he too was a peripheral figure.
CF: Michail Antonio - 5/10 - Made himself an outlet and used his physicality well but didn't get enough service.
Manager: David Moyes - 3/10 - Tried to change the game but the energy was already too flat for his substitutes to really galvanise the team.
SUB: Alphonse Areola (28' for Fabianski) - 3/10 - Gave away a penalty to undo his side's good defensive work within minutes of coming on.
SUB: Gianluca Scamacca (57' for Antonio) - 5/10 - A decent target man but West Ham needed more than just that to get back into the match.
SUB: Said Benrahma (57' for Lanzini) - 5/10 - Got on the ball a lot and tried to make things happen.
SUB: Flynn Downes (90' for Bowen) - N/A
SUB: Conor Coventry (90' for Fornals) - N/A
2. Manchester City (4-3-3)
GK: Ederson - 5/10 - Picked up an early knock but soldiered on. Not that he had much to do, mind.
RB: Kyle Walker - 6/10 - Often leant his services in midfield to help City pass their way through.
CB: Ruben Dias - 6/10 - Didn't have a lot of work to do but still made a meal of things sometimes.
CB: Nathan Ake - 6/10 - Largely untroubled and progressed the ball nicely.
LB: Joao Cancelo - 6/10 - Had some garish moments but equally made life difficult for West Ham.
DM: Rodri - 7/10 - Controlled the game flawlessly. Hardly his fault that City played with lethargy.
CM: Kevin De Bruyne - 7/10 - Lacked his usual cutting edge and dynamism, but still aided City's dominance and grabbed an assist.
CM: Ilkay Gundogan - 8/10 - Pressed well and was often the one playing City's most incisive passes, including the one leading to Haaland's penalty.
RW: Phil Foden - 5/10 - Played well in bursts but not enough for City to rely on him as a consistent outlet today.
CF: Erling Haaland - 8/10 - Didn't have too many touches but he was always asking questions of West Ham's defence and pulling them apart.
LW: Jack Grealish - 6/10 - Walked around in a strop and mostly attacked without conviction or courage, though did come up with the odd moment of inspiration.
Manager: Pep Guardiola - 6/10 - West Ham's tactics meant that Guardiola could essentially manage the game in cruise control.
SUB: Julian Alvarez (78' for Haaland) - N/A
SUB: Bernardo Silva (78' for Gundogan) - N/A
SUB: Cole Palmer (88' for De Bruyne) - N/A
SUB: Riyad Mahrez (88' for Foden) - N/A
SUB: Kalvin Phillips (88' for Rodri) - N/A