City looked to be cruising to victory when Sergio Agüero and Rodri scored in the opening 30 minutes at Wembley Stadium.
But Mbwana Samatta pulled one back with a header before halftime to ensure it was a more competitive final than anticipated between a team fighting relegation from the Premier League and the most expensively assembled squad in football history.
The holders' depth was clear in their ability to only deploy one of the game's most influential players, Kevin De Bruyne, from the bench in the second half among eight changes from the side that beat Real Madrid in the Champions League midweek.
The playmaker helped City see out the game and give Pep Guardiola his sixth major trophy in his fourth season in charge.
It is a season where the Premier League trophy is almost certainly going to be surrendered to Liverpool, which has a 22-point lead over second-place City. But a first Champions League title for City remains a possibility just as the club fights a two-season ban from European competitions for breaches of UEFA financial regulations.
Thanks to lavish spending on players, City has become so accustomed to reaching finals in the 12 years under Abu Dhabi ownership that its Wembley allocation wasn't sold out.
Villa fans seized the chance to see their team playing its first final in a decade since being denied the League Cup by Manchester United.
It was a painful start for the Villa fans in the crowd of 82,149.
Few players like playing more against Villa than Agüero. It took 20 minutes for the striker to grab his 10th goal in his last six starts against the Birmingham club. Rodri's cross was headed into Agüero's path by Phil Foden and the Argentine struck into the net.
City benefited from good fortune and VAR not being used to check on corners to double its lead. The ball came off Ilkay Gundogan before going over the line but City was given the corner which the German swung in for Rodri to head in.
Prince William, a Villa fan, slumped into his seat. But the second-in-line to the British throne was soon up unexpectedly celebrating.
Villa pulled one back against the run of play five minutes before halftime after a slip by John Stones. Anwar El Ghazi took advantage and crossed for Samatta to send a powerful header past Claudio Bravo. Samatta made it two goals in five games for Villa.
There was now an edge and tension to this final unlike City's 6-0 rout of Watford in the FA Cup final in May.
Villa was never out of contention and came close to forcing extra time. But Bravo did well to push Bjorn Engels' header onto the post in the 88th minute and ensure the 60th League Cup final was a victorious one for City.