Lunin was a player for Metalist Youth Sportive School (first trainer was Oleksandr Khrabrov) and Dnipro Youth Sportive School Systems (first trainer was Kostiantyn Pavliuchenko).[4]
From summer 2016, after graduation of the youth sportive school, he played in theDnipro reserves. In the main-team squad, Lunin made his debut as a start-squad player at the age of 17, in the match againstKarpaty Lviv on 16 October 2016 in theUkrainian Premier League.[5] He was Dnipro's first choice goalkeeper the rest of the season, playing in a total of 25 matches for the club, across the league and club competitions. However, at the end of the season, due to financial irregularities, Dnipro was relegated directly to theUkrainian Second League (third level of football), and many players, Lunin included, were allowed to leave the club.[6]
Lunin spent the2017–18 season playing forZorya Luhansk, where he once again quickly established himself as the first keeper. On 14 September 2017, Lunin made his European debut in a 0–2Europa League group stage loss toÖstersunds at theArena Lviv. He ended up playing in 36 matches across all competitions that season, including all six of Zorya's Europa League matches.
On 19 June 2018,La Liga clubReal Madrid reached an agreement with Zorya Luhansk to sign Lunin in a reportedly€8.5 million plus 5 million add-ons deal.[7][8] On 27 August 2018, he was loaned to nearby fellow La Liga teamLeganés, for theseason.[9][10] Halfway through the campaign, he stated that he was content with being second choice toIván Cuéllar, and would complete his contract.[11]
On 13 August 2019, he was loaned toReal Valladolid for the2019–20 season.[12][13] On 15 October 2019, Lunin was included in the 20 best under-21 players shortlist for the 2019 Golden Boy award.[14]
On 15 January 2020, the loan with Real Valladolid was terminated. On the same day,Real Oviedo announced the loan of Lunin until 30 June 2020.[15][16]
On 20 January 2021, he made his first team debut for Real Madrid in a 1–2 extra time loss toAlcoyano in the2020–21 Copa del Rey.[17] With Madrid confirmed2021–22 champions, Lunin made his league debut on 8 May 2022 in theMadrid derby againstAtlético Madrid, which Real lost 1–0.[18] On 15 May 2022, he played againstCádiz, saving a penalty and allowing his team to draw 1–1 away from home.[19][20][21]
On 8 November 2023, Lunin was called to action in Real Madrid's Champions Leaguegroup stage match againstBraga afterKepa suffered an injury during the warm-up.[24][25] Lunin made a significant contribution to the team's performance by saving a penalty shot from Braga wingerÁlvaro Djaló in the fourth minute of the game, which helped maintain Real Madrid's lead in their group standings.[26]
On 17 April 2024, Lunin made eight saves in the Champions League quarter-finals' second leg againstManchester City, which ended in a 1–1 draw, and then went on to stop Manchester City playersBernardo Silva andMateo Kovačić's penalties in the shootout, securing Real Madrid's advancement to the semi-finals.[30][31][32]
On 13 September 2024, Lunin extended his contract, signing a new five-year deal to remain at Madrid until 2030.[33]
In 2019, Lunin backstoppedUkraine U20 team to their first everFIFA U-20 World Cup victory.[34] He played in six of his team's seven matches, but missed the quarterfinal match againstColombia due to being called up to Ukraine's main squad for theUEFA Euro 2020 qualifying matches againstSerbia andLuxembourg.[35][36] After the 3–1 final match victory againstSouth Korea, Lunin was awarded the Golden Glove as the best goalkeeper of the tournament.[37]