쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하 kubernetes.io
이제 쿠버네티스를 설치해보고 배포까지 해보도록하자.
먼저 쿠버네티스 설치를 위해 GCP 인스턴스를 두개를 만들도록 한다. 하나는 쿠버네티스 Master node로 하나는 Worker node로 사용할 것이다.
master-node : Ubuntu 18.04 CPU 2core mem 4g worker-node : Ubuntu 18.04 CPU 2core mem 4g 이렇게 두개를 만들었다.
이제 두 인스턴스에 공통으로 설치되야하는 부분을 설치해보도록 하자.
먼저 Docker를 설치한다.
이제 쿠버네티스에 필요한 kubeadm, kubelet, kubectl 를 설치 한다.
이제 mater node에서 아래 명령어를 실행한다.
위 명령를 실행하면 아래와 같은 메세지가 나오는데
위 메세지 부분에서 kubectl 명령어를 root 계정없이 사용하기 위해 아래를 실행
그리고 제일 마지막 부분의 kubeadm... 부분을 copy 해서 worker node에서 실행시켜주면된다.
master node에 네트워크 add on을 설치한다. 쿠버네티스 클러스터 네트워킹의 동작을 위한 플러그인이라고 한다.
여기까지하고 master node에서 kubectl get pods 를 실행해보면 아래 처럼 나오는것을 확인 할 수 있다.
이제 테스트를 위해 docker hub에서 hello world images를 쿠버네티스에 deploy 시켜 pod를 할당해 보자.
위 명령어를 실행하면 만들어 놓은 worker-node에 pod가 할당되는것을 확인 할 수 있다.
pod에 할당받은 IP로 실행한 이미지가 가 잘 작동하는지 테스트 해 보자
curl을 날려 해당 container가 잘 작동하는것을 확인 할 수 있다.
이제 쿠버네티스가 잘 설치 되었다는것을 확인 했으니 앞에서 만들어 놓은 rest api images를 배포해 보자.
먼저 만들어 놓은 이미지를 docker hub에 psush 한다.
docker hub에 이미지를 올리고 아래 처럼 쿠버네티스 deployment yml파일 작성하고 deployment를 생성한다.
0depl,oyment를 실행하면 해당 deploymeny yml에 설정된 내용으로 pod가 만들어 진다.
기본으로 replica 3으로 설정되어 3개의 pod가 만들어 진다. 각각의 3개의 pod에 curl을 날려서 확인해 보자 .
의 그림과 같이 결과가 나오는것을 확인 할 수 있다. 이제 여기에 각각의 pod를 앞에 LoadBalancer 를 설정해 보자 .
쿠버네티스에서는 간단히 Component가 있다. 아래 yml 파일을 보면서 이해해 보자.
1
Service type이고 selector 부분을 보면 pod name이 my-react-app 인것들을 연결하고 포트는 8080 port 이고 my-react-app의 내부port 도 8080 이고 이 service의 type은 LoadBalancer 라고 되어 있다.
이렇게 설정된 값으로 service를 생성해 보자. 2결과를 확인해 보면
3
와 같이 LB가 생성된 것을 확인 할 수 있다. 이제 curl로 확인을 해보면
여기서 문제는 EXTERNAL_IP가 pending 이 되어 있다. exnternal_ip가 할당 되지 않아서 그런지 CLUSTER-IP로는 정상적으로 데이터가 호출이 되는데 GCE 외부IP로 호출하게 되면 접속이 안된다.
확인해 보니 현재 instance에 8080으로 LISTEN 하고 프로세스가 없는것을 확인. 이로 미로어 볼때 쿠버네티스 클러스터에서 8080이 할당되어 있고 클러스터 외부에서는 8080을 Listen 하지 않는다는것인데 ... |