After an emotional show of support to the people of Ukraine before the kick-off, both sides began with real energy, pressing high amid raucous support from the home fans.
Predictably, City dominated possession and had the bigger share of the half-chances in the first 45 minutes, but Everton defended admirably and regularly reminded the visitors of their threat on the counter-attack, although clear-cut opportunities were at a real premium for both sides.
Kevin De Bruyne's long-range strike on the half-hour mark, which was comfortably saved by Jordan Pickford, was the first time either goalkeeper was really asked to get involved.
Straight after, Jonjoe Kenny found himself in the City box but couldn't steer his effort inside the posts, crashing his effort into the side netting.
Richarlison followed suit soon after as a ricochet in the box made its way to the feet of the Brazilian, but he was forced to rush his strike and could only thunder it right at the grateful Ederson.
The first half ended with a vicious free-kick from Anthony Gordon, whose effort was never getting past Ederson but still had the crowd on their feet as it hit the side netting.
The second half began at the same tempo. Phil Foden and Joao Cancelo both stung the gloves of Pickford in the first ten minutes but neither really asked any major questions of the England goalkeeper.
De Bruyne and Bernardo Silva each threatened Everton's goal after the break as well, but Pickford made two brilliant saves to keep the pair out.
City began to take control of things as the clock ticked on, with Everton's focus more on defending than anything else, and that invited a wave of pressure for a fascinating final 20 minutes.
A goal always felt like it was coming, and in the 82nd minute, it did.
Some sloppy defending from Michael Keane allowed Foden to nip in and control a deflected cross, and the Englishman bundled home a scrappy goal to give City a lead.
Pep Guardiola's men had to survive a late VAR check against Rodri, whose handball in the box eventually went unpunished, allowing City to see out a nervy victory.
Everton player ratings
1. Goalkeeper & defenders
Jordan Pickford (GK) - 8/10 - Made a number of impressive saves to keep City out. Helpless for the goal.
Seamus Coleman (RB) - 6/10 - Had a good battle with Sterling and Silva. Shared the victories, which is no mean feat.
Mason Holgate (CB) - 5/10 - Looked a bit shaky on the ball but fortunately got away with it.
Michael Keane (CB) - 5/10 - Was largely solid in the air but froze in time for the goal. Lost all concentration and cost his side.
Jonjoe Kenny (LB) - 7/10 - Flew up and down the left wing all game long. Would've done ever better if he actually had a left foot.
Allan (DM) - 8/10 - Pressed City into oblivion. His energy in the press was unstoppable and infectious.
Abdoulaye Doucoure (CM) - 7/10 - Far too physical for City's midfield. Relentless with his press. Made such a difference.
Donny van de Beek (CM) - 7/10 - Not as creative as you would have liked but was really in sync with the rest of his team-mates. Contributed a lot to their press.
Alex Iwobi (RW) - 5/10 - Ran a lot but didn't get particularly involved.
Richarlison (ST) - 7/10 - Put himself about a lot and was a real menace. Perhaps offside with his great chance in the first half but deserved that bit of luck.
Anthony Gordon (LW) - 7/10 - Really nice on the ball. Looked dangerous whenever he got running at John Stones.
Dele Alli - 6/10
Demarai Gray - 6/10
Anwar El Ghazi - N/A
Man City player ratings
5. Goalkeeper & defenders
Ederson (GK) - 6/10 - Had a few saves to make but always looked comfortable.
John Stones (RB) - 5/10 - Struggled against Gordon and didn't offer enough going forwards. In his defence, he's not a right-back.
Ruben Dias (CB) - 5/10 - Didn't always keep up with Richarlison but did ensure nothing dangerous got through him.
Aymeric Laporte (CB) - 6/10 - Some nice progressive passing to try and get City moving forwards.
Joao Cancelo (LB) - 7/10 - Got into some nice positions going forwards and kept Iwobi quiet throughout.
Rodri (DM) - 5/10 - Didn't shield the defence with his usual grace. Recovered possession a lot but also lost it a lot. Got away with a major handball shout against him.
Kevin De Bruyne (CM) - 4/10 - Really found it tough in midfield. Everton's energy was too much for him and he couldn't get control of the ball.
Ilkay Gundogan (CM) - 5/10 - Only started to get good as he was about to be substituted.
Phil Foden (RW) - 7/10 - City's danger man throughout. Always looked like being the man to get the goal. One of the worst he'll ever score but he won't care at all.
Bernardo Silva (ST) - 6/10 - Totally wasted as a false nine but more of a threat once he moved out wide. Involved in the goal.
Raheem Sterling (LW) - 5/10 - Had the odd nice dribble but was largely out of the game.
Gabriel Jesus (ST) - 6/10
Riyad Mahrez (RW) - 6/10