배경
사내 인프라를 Kubernetes 환경의 인프라로 구축하기 위해 On-Premise PC는 Windows OS가 설치되어 있던 상황에서
Ubuntu 22.04로 환경을 다시 세팅하였습니다.
이 과정에서 일부 PC에서 네트워크가 끊기는 문제가 발생하였습니다.
동일 장비를 다시 초기화한 이후에도 동일 현상이 재현되어, 발생 원인과 해결 과정을 복기하여 공유하고자 본 문서를 작성했습니다.
설치 과정에서 연관 있던 환경과 설치했던 패키지는 다음과 같습니다.
- Realtek Nic을 사용하고 있는 PC
- Intel Nic를 사용하고 있는 PC
- Windows OS -> Ubuntu OS로 Migration
- cuda gpu driver를 사용하기 위해 gpu driver를 install
문제 현상
Ubuntu 22.04 초기 설치 직후에는 네트워크가 정상 동작하였습니다.
하단의 스크립트 과정처럼 패키지를 업데이트하고 nvidia-driver를 설치하던 과정 중 이슈가 발생했습니다.
이슈를 발견하기까지의 상황과 접했던 사항은 아래와 같습니다.
ubuntu 22.04의 OS를 설치하고 필요한 라이브러리를 설치하기 전 라이브러리 저장소 메타데이터를 최신화하고
기본 패키지를 최신 상태로 업데이트를 진행했습니다.
apt-get update
apt-get upgrade
이후 문제가 됐던 nvidia-driver는 하단과 같이 설치를 진행했습니다.
sudo ubuntu-drivers --gpgpu install
sudo reboot
위의 명령어를 수행하여 cuda gpu driver를 install 하고 적용하기 위해 재시작한 순간부터 특정 PC의 ubuntu는
네트워크 드라이버를 인식하지 못했고 설치 과정을 반복해도 상황은 달라지지 않았습니다.
총 3대의 PC를 Ubuntu로 초기화하여 nvidia-driver를 설치하고 있었고 문제 현상이 발생한 직후 현상을 파악하던 과정에서 2개의
PC는 네트워크 드라이버를 인식하지 못했으나 1대의 PC는 네트워크 드라이버를 여전히 인식한다는 걸 알 수 있었습니다.
현상 분석
여러 블로그를 참고하던 과정에서 nic의 정보를 확인한 후 해당 드라이버를 다운로드하여 설치하게 되면 해결이 된다는 사례도
존재했으나 제 경우엔 네트워크가 잡히지 않던 PC에서 드라이버를 USB로 옮겨 작업을 진행해도 현상은 달라지지 않았습니다.
이 이후 문제를 해결하기 위해 원인을 분석하고 찾아나갔던 과정은 다음과 같습니다.
1. 3대의 PC중 2대의 PC만 네트워크 드라이버를 인식하지 못하니 차이점을 먼저 발견하자
(사진이 약간 어색할 수 있지만 user@ex-node로 사진을 익명화하여 알 수 있게 첨부했습니다)
네트워크 드라이버가 nvidia-driver를 설치해도 인식하고 네트워크가 잘 동작하는 곳의 nic

nvidia-driver를 설치하고 작업한 후 네트워크 드라이버를 인식하지 못하는 곳의 nic

> 사진에서 가려져 있지만 lspci | grep -i ethernet이라는 명령어로 nic 제조사를 확인했습니다.
위 상황처럼 nic의 제조사가 Realtek 인지 Intel인지 차이점이 존재했고 네트워크 드라이버가 사라지는 경우들을 참고한 경우에선
모두 Realtek의 nic를 사용했다는 걸 알 수 있었습니다.
2. 정상적인 PC와 정상적이지 않은 PC의 네트워크 드라이버, nvidia-driver 이후 변화를 확인하자.
nic의 차이점은 첫 번째 과정으로 확인했으나 그럼 대체 정상적인 PC는 어떤 네트워크 드라이버를 사용하고 있고 realtek은 그렇지
않은지 의문점이 생겨 확인했고 nvidia-driver를 수행했을 때 어떤 변화가 생겨 문제가 발생했는지를 추적하고자 했었습니다.
정상적인 pc의 네트워크 드라이버를 확인하는 과정

문제가 됐던 pc의 네트워크 드라이버를 확인하는 과정

기본적으로 realtek의 r8169 네트워크 드라이버를 사용하지만 r8169의 안전성 문제 때문에 r8168을 다운로드해야 하며
제조사에서 확인했던 것처럼 8111/8168/8411중 선택하여 다운로드를 진행해야 하는데 리눅스의 apt 패키지 매니저론
설치할 수 없었습니다.
realtek r8169에 대한 안정성에 대한 우려와 r8168의 사용 시 우려사항에 대한 링크
https://wiki.archlinux.org/title/Network_configuration/Ethernet?utm_source=chatgpt.com
intel의 e1000e 네트워크 드라이버가 기본 커널 모듈에 포함되어 있다는 링크
nvidia-driver를 설치하고 reboot 한 이후 발견한 차이점이었는데 커널이 사진과 같이 업그레이드가 된 것을 확인할 수 있었습니다.

현상 분석과 같이 업데이트의 주체는 NVIDIA 드라이버 설치 과정이었으며, 재부팅은 적용 단계였습니다.
즉, 커널은 설치 과정에서 업그레이드되었고 reboot를 수행하면 업그레이드 된 커널을 사용하며 제조사에 따라
네트워크 드라이버가 유실된다는 것을 알 수 있었습니다.
하지만 intel과 다르게 realtek의 네트워크 드라이버는 기본 리눅스 커널 모듈에 포함되어 있지 않아 커널이 업그레이드가 될 시
해당 네트워크 드라이버를 찾지 못해 업그레이드 된 커널엔 해당 드라이버가 포함되지 못하고 결국 네트워크가 되지 않았던 것입니다.
해결 과정
이를 해결하기 위해 진행한 과정은 다음과 같습니다.
우리가 의도하지 않는 커널 업그레이드를 일으키기 전 커널을 최신버전으로 미리 업그레이드를 시키자
apt update & apt upgrade -y
커널이 업그레이드가 됐다고 해도 reboot가 되지않으면 새로운 커널을 사용하지 않기 때문에 이때 realtek의 r8168 드라이버를
설치하자
apt install r8168-dkms # lspci로 확인한 버전 중 하나의 드라이버를 설치
modprobe r8168
해당 과정까지 모두 마쳤다면 새로운 커널에도 해당 네트워크 드라이버가 포함되어 reboot를 진행해도 네트워크 드라이버가
유실되지 않고 문제를 해결할 수 있었습니다.
부록
제가 설치 과정 중 제일 처음으로 저장소 메타데이터를 최신으로 유지하고 커널도 업그레이드시키기 위해 진행했던 아래의 명령어는
생각과 다르게 커널을 업그레이드 시키지 않았습니다.
apt-get update
apt-get upgrade
apt와 apt-get의 차이었는데 그 차이는 커널이 새 패키지로 배포되기 때문이며,
apt upgrade는 새 패키지를 설치해 따라가지만 apt-get upgrade는 그렇지 않아 보류됐기 때문이었습니다.
결론
ubuntu 22.04를 사용하는 환경에서 intel nic를 사용한다면 커널이 업그레이드가 된다고 해도 커널의 새 패키지 않에 내장
드라이버로 포함되어있기 때문에 유실되지 않지만 realtek은 그렇지 않아 realtek을 사용할 경우엔 미리 커널을 업그레이드하고
네트워크 드라이버를 설치하여 포함하면 된다!
제 상황에선 nvidia-driver를 설치하는 상황이었지만 이 상황과 달라도 커널 업그레이드를 유발하거나 시도할때
네트워크 드라이버가 유실될 수 있어 주의해야 합니다.
apt-get upgrade는 생각과 다르게 커널이 업그레이드되지 않아 이런 명령어의 차이도 알지 못하면 이슈로 이어질 수 있다.
느낀점
이슈가 발생했을 때 블로그들을 대부분 참고하다 보면 왜 이런 이슈가 발생하는지 참고하면서 찾아볼 수가 없었습니다.
이슈가 왜 발생했는지 어떤 것 때문인지 정확히 인지할 수 없다는 점은 저에겐 앞으로 비슷한 이슈가 발생했을 때
이슈를 해결할 수 없거나 근본적인 원인을 해결하지 못한 채 문제를 덮기 급급하다는 느낌으로 다가왔습니다.
cloud 등 이미 os가 설치된 vm을 사용하거나 관리형으로 사용하다 보면 문제를 겪지 않을 수 있지만 이슈를 해결하는 것뿐만
아니라 왜 이런 이슈가 생겼는지 정확히 알고자 했고 그런 과정을 남기기 위해 노력했던 것 같습니다.
단순히 이슈를 해결해 나가는 것뿐만 아니라 왜 이런 이슈가 생겼는지, 알 수 없는 이슈를 대응하기 위한 지식이나 경험을
기르기 위한 과정으로 글을 앞으로도 게시할 것이며 누구나 지식을 얻어갈 수 있다면 좋을 것 같습니다.
해당 이슈를 해결하던 중 참고했던 곳
https://wiki.archlinux.org/title/Network_configuration/Ethernet?utm_source=chatgpt.com