AWS를 통해 다양한 인프라 서비스를 접한 지 거의 일 년이 다 되어 간다. 프리티어 기간도 슬슬 끝나가고 있고, 이번 기회에 인프라에 대해서 좀 더 폭넓게 공부해 보고자 라즈베리파이로 쿠버네티스 클러스터를 구축하려고 계획 중이다. 또, 지금은 학사에 거주하고 있어 공과금을 내지 않기 때문에 라즈베리파이만 있다면 무료로 온프레미즈 환경을 구축할 수 있다!
K8s homeserver 구축 시리즈는 통해서 집에서 라즈베리파이를 통해서 직접 K8s 환경 CI/CD를 구현하는 과정을 포스팅 할 예정이다. 라즈베리파이 설정부터 시작하여 점차 다양한 CI/CD 툴을 사용하여 인프라를 관리할 수 있게 하는 방법에 대해서 포스팅할 시리즈이다.
본론
인프라 구조 (0.1v)
이번 포스팅에서는 가정용 공유기를 통해서 위와 같은 구조로 네트워크가 접근할 수 있게 만들어 줄 것이다. 필자는 iptime 공유기를 사용하고 있는데, 많은 트래픽을 받아낼 것이 아니기 때문에 별도의 로드밸런서 없이 공유기 설정을 통해 다음과 같은 구조를 만든다.
라즈베리파이 OS 설치
가장 먼저 라즈베리파이에 ubuntu OS를 설치한다. 필자는 ubuntu server 20.04 (LTS) 버전을 설치하였고, 오로지 서버로서 CLI만을 사용하려고 하기 때문에 ubuntu server OS를 설치했다.
OS를 설치하는 방법은 SD카드에 운영체제 이미지를 깔아두어 이미지가 깔아진 SD카드를 라즈베리파이에 삽입하여 부팅하면 된다. MacOS에서 SD카드에 이미지를 넣을 수 있지만, 이는 윈도우가 훨씬 편하기 때문에 윈도우를 쓰는 것을 추천한다. 밑의 링크를 참조하여 라즈베리파이 이미저를 다운로드한다.
- Paspberry PI : https://www.raspberrypi.com/software/
Imager를 실행시키면 위와 같은 어플리케이션이 나오는데, 저장소는 삽입된 SD카드를 선택하고 운영체제는 Raspberry PI OS (64 bit)를 선택하는 걸로 하자. 라즈베리파이에서 제공하는 ubuntu OS에 K3s를 설치하려고 하면 커널 버전이 5 이상이기 때문에 K3s 에러가 발생한다. 라즈베리파이 OS가 가장 쉽고, 그래도 ubuntu에 깔아야 한다면 rpi-update 명령어를 통해서 ubuntu for RPI의 커널 버전을 다운그레이드해야한다.
여기서 중요한 포인트가 있다. OS와 읽고 쓸 SD카드를 선택하고 나서 Imager에서 옵션을 선택할 수 있는데, 라즈베리파이에 접속할 때 사용할 username&password와 무선랜으로 사용할 와이파이를 설정해 주는 것이 중요하다.
다음과 같은 페이지에서 SSH를 허용해주어야 한다. 이때 SSH 접속에 사용할 Username과 Password를 설정해 주는 것을 권장한다. 따로 설정해주지 않으면 default로 pi&raspberry라는 username과 password를 가진다.
밑으로 내려 무선랜을 선택해 줄 수 있는데, 홈서버 공유기의 와이파이를 입력하면 된다. 가능하다면 유선랜이 좋지만, 빠른 트래픽 퍼포먼스를 기대하지는 않기 때문에 이번 포스팅에서는 무선랜을 이용하도록 한다. 일반적인 네트워크 환경에서도 유선랜이 좋지만 K8s를 사용하는 환경에서는 더더욱 유선랜을 쓰는 것이 좋다고 한다. 하지만 필자는 서비스 용도로 클러스터를 구축하는 것이 아닌, CI/CD를 구현하는 것을 보기 위함이기 때문에 무선랜을 택했다. ( 추가로 집 구조상 유선랜으로 하려면 가구를 사야하는 상황 )
라즈베리파이 접속
기본 접속 설정
자, 이제 기본적인 설정을 마친 후, SD 카드를 연결하여 부팅하면 라즈베리파이에 라즈비안 운영체제가 설치된다. 이 작은 컴퓨터는 현재 무선랜 설정에 입력하거나 유선으로 LAN 케이블을 꽃아 둔 것을 통해 인터넷이 연결되어 있는 Host가 되었다. 이제 이 라즈베리파이에 ssh 연결을 통해서 터미널로 접근하여 다양한 애플리케이션을 실행시킬 수 있다.
먼저, 이 라즈베리파이의 IP를 알아야 한다. 어떤 공유기를 사용하고 있는지에 따라 공유기의 공식 문서를 참조하여 공유기 게이트웨이에 접속한다. ( 필자는 iptime을 사용하고 있다. iptime 기준으로 설명한다. )
192.168.0.1에 접속하여 로그인 후 고급 설정 -> 네트워크 관리 -> DHCP 서버 설정에 들어간다. 다음의 설명이 하이라이트이다.
해당 섹션에 들어가면 공유기(192.168.0.1)에서 와이파이에 연결된 컴퓨터(이하 호스트)에게 IP를 하나씩 나누어준다. ( 이를 DHCP라고 부른다 ) 필자는 11개의 IP를 사용하고 있는 셈인데, 필자는 192.168.0.22와 192.168.026이 두 가지 IP를 라즈베리파이에게 나누어 사용하고 있다.
DHCP(Dynamic Host Configuration Protocol)는 네트워크에서 IP 주소 및 기타 네트워크 구성 정보를 동적으로 할당하는 프로토콜이다. 따라서 직접 따로 지정해두지 않으면 호스트들이 DHCP 서버에 의해서 네트워크에 연결될 때마다 IP를 할당받게 된다. 이 때 같은 IP를 할당받을 수도 있고 다른 IP를 할당받을 수도 있다. 직접 DHCP가 인터넷에 연결될 때 마다 다른 IP를 할당하지 않게 끔 설정을 꼭 해두도록 한다.
사용 중인 IP 주소 정보 섹션에서 Raspbian이라고 쓰인 IP를 클릭해 오른쪽 아래의 수동 등록 버튼을 누르면 해당 IP를 고유하게 갖게 된다. 이렇게 기본적인 설정을 마친 후 같은 네트워크 상에서 ( = 같은 와이파이를 쓰고 있는 상황에서 ) 다음 명령어를 통해 ssh 연결할 수 있게 된다.
ssh ${username}@192.168.0.22
기본적으로 사용자 설정이 없다면 pi를 username으로 갖는다고 했으니 다음 명령어가 될 것이다.
ssh pi@192.168.0.22
ssh 명령어를 통해 접속 요청을 보내면 패스워드를 입력하라고 나오는데, 패스워드를 정상적으로 입력했다면 라즈베리파이에 정상적으로 접근할 수 있다.
이렇게 같은 네트워크를 사용하는 경우에서는 공유기에서 할당해 주는 사설 IP로 ssh 연결할 수 있게 된다
다른 네트워크에서 접속하는 경우
다른 네트워크에서 접속하는 경우에는 공유기에 추가적인 설정을 해두어야 한다. 예전에 포스팅했던 내용에서 다룬 포트 포워딩에 대한 설명이다. 해당 포스팅이랑 비슷한 내용이 어느 정도 있기 때문에 한 번 참고하면 좋을 것이다.
링크에 달아둔 포스팅에서 다루었던 구조인데, 간략하게 설명하면 다음과 같다. 공유기(Router)를 기준으로 내부와 외부가 정해져 있는데, 공유기 내부의 다양한 Host(네트워크에 연결된 컴퓨터)들의 IP는 공유기의 DHCP에 의해 할당받는다. 공유기 외부에 있는 컴퓨터들은 이러한 관점에서 192.168.0.* IP를 식별할 수 없다. 따라서 공유기에 인터넷 외부에서 접근할 수 있는 Public IP를 할당하고, 공유기의 설정을 통해 내부의 192.168.0.* IP로 연결을 해주어야 한다. 이러한 과정을 포트포워딩이라고 한다.
따라서, 우리가 설치한 라즈베리파이에 연결하기 해서는 공유기 설정에서 포트포워딩을 통해 외부의 22번 포트로 연결을 내부의 192.168.0.22의 22번 포트로 연결을 설정해두어야 한다! 자세한 내용은 위 포스팅을 참고하면 쉽게 설정할 수 있을 것이다. 이제 외부 네트워크에서 ssh에 연결하려고 한다면 다음과 같은 명령어를 통해 접속할 수 있을 것이다.
ssh ${USERNAME}@${DYNAMIC_IP}
예를 들어 공유기의 동적 IP가 100.10.10.1이고, username이 marsboy인 상황이라면 다음과 같이 접속할 수 있다.
ssh marsboy@100.10.10.1
marsboy 유저의 암호를 입력하면 정상적으로 라즈베리파이에 접속할 수 있다! 이러한 방법을 통하면 포트 포워딩에 따라 192.168.0.22로 접속될 것이다. 이후 다른 ubuntu로 또 접속하고 싶다면 해당 호스트에서 ssh를 통해 또 다른 컴퓨터로 접속할 수 있다.
다른 라즈베리파이에 대한 접속
다시 처음의 인프라 구조도로 들어오면 공유기의 설정에 따라서 동적 IP로 ssh 접속을 하면 가장 먼저 들어가 지는 라즈베리파이가 192.168.0.22라는 것을 알 수 있다. 이 상황에서 다른 라즈베리파이에 접근하고 싶다면 ssh 명령어를 통해서 또다시 연결할 수 있다. 이때, 192.168.0.22에 들어온 상황에서 해당 Host는 Homeserver Network를 타고 있기 때문에 맨 처음 상황에서의 같은 네트워크를 사용하는 경우처럼 ssh 연결을 하면 된다. ( 그냥 192.168.0.* 로 ssh 연결할 수 있다는 뜻 )
마치며
이렇게 기본적으로 라즈베리파이에 대한 설정을 완료했다. 이제 앞으로 라즈베리파이 환경에서 K8s 환경을 구축할 예정이다. 쿠버네티스 클러스터 환경에서 CI/CD를 구현하는 과정을 포스팅할 예정이다.
'DevOps > kubernetes' 카테고리의 다른 글
ETCD Leader Election이란? (1) | 2024.12.18 |
---|---|
Kubernetes의 Ingress와 Service 차이점에 대한 고찰 (0) | 2024.12.17 |
로컬 쿠버네티스 클러스터 환경 세팅 ( feat. minikube, lens ) (1) | 2024.12.16 |
[K8s homeserver 구축 - 3] github actions를 통한 CI (0) | 2023.11.10 |
[K8s homeserver 구축 - 2] 라즈베리파이 K3s 클러스터링 (0) | 2023.11.09 |