블로그로 돌아가기

Ubuntu 20.04에서 Kubernetes 설치 및 사용 방법

Ubuntu 20.04에서 Kubernetes 설치 및 사용 방법

소개

Kubernetes컨테이너 오케스트레이션에서 매우 중요한 오픈 소스 도구입니다. Kubernetes는 다양한 클라우드 환경 또는 온프레미스 서버 전반에서 클러스터를 대규모로 오케스트레이션하고 관리함으로써 작동합니다. 클러스터는 컨테이너화된 애플리케이션 및 서비스를 실행하기 위한 호스트 세트입니다. 클러스터가 작동하려면 최소 두 개의 노드가 필요합니다 – 하나의 마스터 노드 및 하나의 워커 노드가 필요합니다. 확장성을 염두에 두고, 필요한 만큼 워커 노드를 추가하여 클러스터를 확장할 수 있는 옵션이 있습니다.

Kubernetes에서 노드는 서버를 의미합니다. 마스터 노드는 클러스터의 상태를 관리하는 서버입니다. 워커 노드는 워크로드를 실행하는 서버이며, 이는 일반적으로 컨테이너화된 애플리케이션 및 서비스.

가이드는 Ubuntu 20.04에서 두 개의 노드로 구성된 Kubernetes 클러스터를 설치하고 배포하는 단계를 안내합니다. 언급했듯이, 두 개의 노드를 갖는 것은 Kubernetes를 사용할 때 가장 기본적인 구성입니다. 기본 사항을 이해하고 나면 워커 노드를 더 추가할 수도 있습니다. 또한 마스터 노드가 워커 노드를 제어할 수 있도록 두 서버를 연결하는 방법도 보여드리겠습니다.

구성을 테스트하기 위해, 클러스터에 Docker 컨테이너를 배포하여 Nginx 웹 서버를 실행할 것입니다. 이는 Kubernetes의 전형적인 실제 적용 사례입니다. 진행하면서 다음과 같은 Kubernetes의 몇 가지 정의적인 구성 요소에 대해 자세히 배우게 됩니다: kubectlkubeadm을 알아볼 것입니다. 또한, Kubernetes 플랫폼의 기본 사항에 익숙해지기 위해 먼저 Kubernetes 툴킷 기본 사항 알아보기 튜토리얼을 먼저 숙지하는 것이 좋습니다.

이제 시작해 보겠습니다!

사전 요구 사항

다음에서 실행되는 두 개의 서버를 프로비저닝해야 합니다: Ubuntu 20.04. 최상의 성능을 위해 Kubernetes의 최소 시스템 요구 사항은 2GB RAM 및 2개의 CPU입니다. CloudSigma에서 Ubuntu 서버 설정을 도와주는 단계별 튜토리얼의 1단계부터 4단계를 따를 수 있습니다. 한 서버는 마스터 노드가 되고 다른 서버는 워커 노드가 됩니다. 튜토리얼을 쉽게 따라할 수 있도록 두 서버의 이름을 각각 kubernetes-masterkubernetes-worker로 지정했습니다. 이렇게 하면 튜토리얼을 더 쉽게 따라할 수 있습니다. 하지만 원하는 호스트 이름을 자유롭게 선택하셔도 됩니다.

  • 위의 튜토리얼에 설명된 대로 명령을 실행하는 데 사용할 sudo 권한이 있는 사용자를 두 노드 모두에 추가해야 합니다. 자세한 지침은 이 Linux sudoers 파일 구성에 관한 튜토리얼.

  • 을 참조하세요. 네트워크 연결 – 클러스터의 서버들은 서로 통신할 수 있어야 합니다. CloudSigma에서 VM을 배포하면 기본적으로 공인 IP를 통해 인터넷에 연결됩니다. 로컬 네트워크에서 작업하는 경우, 각 서버에서 /etc/hosts 파일을 편집하여 적절하게 연결해야 할 수 있습니다.

  • 각 노드에 Docker를 설치하고 활성화해야 합니다. Kubernetes는 팟(pod)에서 컨테이너를 실행하기 위해 컨테이너 런타임에 의존합니다. 선택할 수 있는 다른 컨테이너 플랫폼도 있지만, 이 튜토리얼에서는 Docker를 사용합니다. Docker는 Ubuntu에 필요한 런타임 환경을 제공합니다. 저희의 Docker 설치 및 작동에 관한 튜토리얼.

1단계: Kubernetes 설치

이 단계에서는 Kubernetes를 설치합니다. 사전 요구 사항에서 Docker를 설치할 때와 마찬가지로, 두 노드 모두에서 명령을 실행하여 Kubernetes를 설치해야 합니다. ssh를 사용하여 두 노드에 로그인하고 진행합니다. 먼저 Ubuntu 리포지토리에서 apt-transport-https 패키지를 설치하는 것으로 시작합니다. 이 패키지는 httphttps 작업을 가능하게 합니다. 또한 다음 단계에 필요한 curl도 설치합니다. 다음 명령을 실행하세요:

그런 다음, 다음 명령을 실행하여 두 노드에 Kubernetes 서명 를 추가합니다:

다음으로, 다음 명령을 사용하여 두 노드 모두에 패키지 소스로 Kubernetes 리포지토리를 추가합니다:

그 후, 노드를 업데이트합니다:

  • Kubernetes 도구 설치

업데이트가 완료되면 Kubernetes를 설치합니다. 여기에는 Kubernetes를 구성하는 다양한 도구를 설치하는 작업이 포함됩니다: kubeadm, kubelet, kubectl, 및 kubernetes-cni. 이 도구들은 두 노드 모두에 설치됩니다. 아래에서 각 도구를 정의합니다:

  • kubelet – 각 노드에서 실행되며 컨테이너 런타임에서 워크로드를 시작하기 위해 마스터 노드와의 통신을 처리하는 에이전트입니다. kubelet을 설치하려면 다음 명령을 입력하십시오:

  • kubeadm – Kubernetes 프로젝트의 일부로, Kubernetes 클러스터를 초기화하는 데 도움이 됩니다. kubeadm을 설치하려면 다음 명령을 입력하십시오:

  • kubectl – Kubernetes 클러스터 내부에서 명령을 실행할 수 있게 해주는 Kubernetes 명령줄 도구입니다. kubectl을 설치하려면 다음 명령을 실행하십시오:

  • kubernetes-cni – 컨테이너 간의 통신 및 데이터 교환을 보장하기 위해 컨테이너 내에서 네트워킹을 활성화합니다. 설치하려면 다음 명령을 실행하십시오:

선택 사항으로, 단일 명령으로 네 가지를 모두 설치할 수 있습니다:

2단계: 스왑 메모리 비활성화

Kubernetes는 다음을 사용하는 시스템에서 작동하지 않습니다: swap memory. 따라서 마스터 노드 및 모든 워커 노드에서 비활성화해야 합니다. 스왑 메모리를 비활성화하려면 다음 명령을 실행하십시오:

이 명령은 시스템이 재부팅될 때까지 스왑 메모리를 비활성화합니다. 재부팅 후에도 비활성 상태가 유지되도록 해야 합니다. 이 작업은 마스터 및 모든 워커 노드에서 수행해야 합니다. 다음 파일을 편집하여 이 작업을 수행할 수 있습니다: fstab file 그리고 다음 라인을 주석 처리합니다: /swapfile line with a #로 주석 처리합니다. 다음 명령을 입력하여 nano 텍스트 편집기로 파일을 엽니다:

파일 내부에서 다음 라인을 주석 처리합니다: swapfile 라인을 아래 스크린샷과 같이 주석 처리합니다:

install Kubernetes fstab swap disable

swapfile 라인이 보이지 않으면 그냥 무시하십시오. 편집이 끝나면 파일을 저장하고 닫습니다. 두 노드 모두에 대해 동일한 프로세스를 따르십시오. 이제 서버가 재부팅된 후에도 스왑 메모리 설정이 비활성 상태로 유지됩니다.

3단계: 고유한 호스트 이름 설정

쉽게 식별할 수 있도록 노드에 고유한 호스트 이름이 있어야 합니다. 많은 노드가 있는 클러스터를 배포하는 경우 node-1, node-2 등과 같이 워커 노드를 식별할 수 있는 이름을 설정할 수 있습니다. 앞서 언급했듯이, 저희는 노드 이름을 다음과 같이 지정했습니다: kubernetes-masterkubernetes-worker. 서버를 생성할 때 이를 설정했습니다. 하지만 명령줄에서 아직 설정하지 않은 경우 직접 조정하거나 설정할 수 있습니다. 마스터 노드에서 호스트 이름을 조정하려면 다음 명령을 실행하십시오:

워커 노드에서 다음 명령을 실행하십시오:

현재 터미널 세션을 닫고 ssh로 서버에 다시 접속하여 변경 사항을 확인할 수 있습니다.

4단계: Iptables가 브리지된 트래픽을 감지하도록 설정

마스터 및 워커 노드가 브리지된 트래픽을 올바르게 감지할 수 있도록 하려면, 구성에서 net.bridge.bridge-nf-call-iptables이 1로 설정되어 있는지 확인하십시오. 먼저, br_netfilter 모듈이 로드되었는지 확인하십시오. 다음 명령을 실행하여 이를 확인할 수 있습니다:

선택 사항으로, 다음 명령을 사용하여 명시적으로 로드할 수 있습니다:

이제 다음 명령을 실행하여 값을 1로 설정할 수 있습니다:

5단계: Docker Cgroup 드라이버 변경

기본적으로 Docker는 다음을 사용하여 설치됩니다. cgroupfs 을 cgroup 드라이버로 사용합니다. Kubernetes는 권장합니다 Docker가 실행되어야 한다고 다음을 사용하여: systemd를 드라이버로 사용합니다. 이 단계를 건너뛰고 다음 단계에서 kubeadm을 초기화하려고 하면 터미널에 다음과 같은 경고가 표시됩니다:

마스터 노드와 워커 노드 모두에서 다음을 업데이트합니다: cgroupdriver 다음 명령을 사용하여:

그런 다음, 다음 명령을 실행하여 재시작활성화를 시스템 부팅 시 설정합니다:

설정이 완료되면 이제 재미있는 작업인 Kubernetes 클러스터 배포로 넘어갈 수 있습니다!

6단계: Kubernetes 마스터 노드 초기화

Kubernetes 클러스터를 배포하는 첫 번째 단계는 마스터 노드를 시작하는 것입니다. 마스터 노드의 터미널에서 다음 명령을 실행하여 kubernetes-마스터를 초기화합니다.:

위 명령을 실행했을 때 시스템이 사전 요구 사항 섹션에서 설명한 최소 RAM 또는 CPU와 같은 예상 요구 사항을 충족하지 못하면 경고가 표시되고 클러스터가 시작되지 않습니다.

install Kubernetes InitError

참고: 프로덕션 환경을 구축하는 경우, Kubernetes가 원활하게 실행되도록 항상 최소 요구 사항을 충족하는 것이 좋습니다. 하지만 학습 목적으로 이 튜토리얼을 진행하는 경우, kubeadm init 명령에 다음 플래그를 추가하여 오류 경고를 무시할 수 있습니다.
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

아래 스크린샷은 초기화가 성공했음을 보여줍니다. 또한 IP 10.244.0.0으로 포드 네트워크를 지정하는 플래그를 추가했습니다. 이는 kube-flannel이 사용하는 기본 IP입니다. 다음 단계에서 포드 네트워크에 대해 더 자세히 논의하겠습니다.

install Kubernetes Kubeadm Init

출력에서 다음을 볼 수 있습니다: kubeadm join 명령(IP 주소는 숨겼습니다)과 이 클러스터에 조인하려는 워커 노드 및 기타 모든 워커 노드에서 실행할 고유 토큰입니다. 나중에 워커 노드에서 사용할 것이므로 이 명령을 복사하여 붙여넣으십시오.

출력에서 Kubernetes는 클러스터 사용을 시작하기 전에 마스터 노드에서 일반 사용자로 실행해야 하는 몇 가지 추가 명령도 표시합니다. 이 명령들을 실행해 보겠습니다.

이제 마스터 노드를 초기화했습니다. 하지만 워커 노드를 조인하기 전에 마스터 노드에 포드 네트워크도 설정해야 합니다.

7단계: 포드 네트워크 배포

포드 네트워크는 서버 간의 통신을 용이하게 하며 Kubernetes 클러스터가 올바르게 작동하는 데 필요합니다. Kubernetes 클러스터 네트워킹에 대한 자세한 내용은 공식 문서에서 확인할 수 있습니다. 이 튜토리얼에서는 Flannel 포드 네트워크를 사용합니다. Flannel은 Kubernetes 요구 사항을 충족하는 간단한 오버레이 네트워크입니다.

포드 네트워크를 배포하기 전에 방화벽 상태를 확인해야 합니다. 다음의 5단계를 수행한 후 방화벽을 활성화한 경우 Ubuntu 서버 설정에 대한 튜토리얼, 먼저 다음을 추가해야 합니다. 방화벽 규칙 포트에 대한 예외를 생성하기 위해 6443 (Kubernetes의 기본 포트). 마스터 및 워커 노드 모두에서 다음 ufw 명령을 실행하십시오:

그 후, 마스터 노드에서 포드 네트워크를 배포하기 위해 다음 두 명령을 실행할 수 있습니다:

환경에 따라 flannel 네트워크를 로드하는 데 몇 초에서 1분 정도 걸릴 수 있습니다. 모든 것이 제대로 시작되었는지 확인하려면 다음 명령을 실행하십시오:

모든 것이 성공적이었다면 명령의 출력에 모든 서비스 상태가 running으로 표시되어야 합니다:

install Kubernetes Pod Status

다음 명령을 사용하여 구성 요소의 상태(health)를 확인할 수도 있습니다:

install Kubernetes Component Status

이 명령은 단축형 cs를 가집니다:

Component Status Short

unhealthy 상태가 표시되면 다음 파일을 수정하고 이 구문이 포함된 (spec->containers->command)의 줄을 삭제하십시오. - --port=0 :

이 파일에 대해서도 동일하게 수행하십시오:

마지막으로, Kubernetes 서비스를 재시작합니다:

8단계: 워커 노드를 Kubernetes 클러스터에 조인하기

With the kubernetes-마스터 노드가 가동되고 포드 네트워크가 준비되었으므로, 워커 노드를 클러스터에 조인할 수 있습니다. 이 튜토리얼에서는 워커 노드가 하나만 있으므로 이를 사용하여 작업하겠습니다. 워커 노드가 더 많은 경우에도 아래에서 설명할 것과 동일한 단계를 수행하여 클러스터에 조인할 수 있습니다.

먼저, 별도의 터미널 세션에서 워커 노드에 로그인합니다. kubeadm join 명령을 사용하게 됩니다. 이 명령은 6단계에서 마스터 노드를 초기화할 때 터미널에 표시되었습니다. 명령을 실행하십시오:

클러스터 조인이 완료되면 아래 스크린샷과 유사한 출력이 표시됩니다:

Worker Join

조인 프로세스가 완료되면 마스터 노드 터미널로 전환하고 다음 명령을 실행하여 워커 노드가 클러스터에 조인되었는지 확인하십시오:

위 명령의 출력 스크린샷에서 워커 노드가 클러스터에 조인된 것을 확인할 수 있습니다:

install Kubernetes K8S Node Status

9단계: Kubernetes 클러스터에 애플리케이션 배포하기

이제 Kubernetes 클러스터를 성공적으로 설정했습니다. 클러스터에 서비스를 배포하여 사용할 수 있도록 만들어 보겠습니다. Nginx는 수천 개의 연결에서도 놀라운 속도를 자랑하는 인기 있는 웹 서버입니다. 이 설정을 실제 애플리케이션에서 사용할 수 있음을 증명하기 위해 Nginx 웹 서버를 클러스터에 배포해 보겠습니다.

마스터 노드에서 다음 명령을 실행하여 Nginx를 위한 Kubernetes 배포(deployment)를 생성하십시오:

생성된 배포(deployment)를 확인하려면 describe deployment 명령을 사용하면 됩니다:

Nginx Deployment

인터넷을 통해 nginx 서비스에 액세스할 수 있도록 하려면 다음 명령을 실행하십시오:

NodePort Svc Create

위의 명령은 Nginx 배포를 위한 외부 공개용 서비스를 생성합니다. 이것은 nodeport 배포이므로, Kubernetes는 서비스에 다음 범위의 포트를 할당합니다: 32000+.

다음 명령을 실행하여 현재 서비스를 확인할 수 있습니다:

NodePort Svc Status

할당된 포트가 32264임을 확인할 수 있습니다. 다음 단계에서 사용할 수 있도록 터미널에 표시된 포트를 기록해 두십시오.

Nginx 서비스 배포가 성공적인지 확인하려면 마스터에서 워커 노드로 curl 호출을 수행합니다. 워커 노드 IP와 위 명령에서 얻은 포트로 바꾸십시오:

기본 Nginx index.html 출력이 표시되어야 합니다.:

Curl Nginx Svc

선택 사항으로, 브라우저에서 워커 노드 IP 주소와 포트 조합으로 접속하여 기본 Nginx 인덱스 페이지를 볼 수 있습니다:

install Kubernetes Nginx Webpage

배포 이름을 지정하여 디플로이먼트를 삭제할 수 있습니다. 예를 들어, 이 명령은 배포를 삭제합니다:

이제 클러스터 테스트를 성공적으로 마쳤습니다!

결론

이 튜토리얼에서는 Ubuntu 20.04에 Kubernetes 클러스터를 설치하는 방법을 배웠습니다. 마스터 노드와 워커 노드로 구성된 클러스터를 설정했습니다. Kubernetes 툴셋을 설치하고, 파드(pod) 네트워크를 생성하고, 워커 노드를 마스터 노드에 조인할 수 있었습니다. 또한 Nginx 웹 서버를 클러스터에 기본 배포하여 개념을 테스트했습니다. 이는 Ubuntu에서 Kubernetes 클러스터를 사용하는 데 기초가 될 것입니다.

하나의 워커 노드만 사용했지만, 원하는 만큼 노드를 추가하여 클러스터를 확장할 수 있습니다. 다음과 같은 자동화 도구를 사용하여 DevOps를 더 깊이 있게 다루고 싶다면 Ansible을 사용하여 Ansible 및 Kubeadm으로 Kubernetes 클러스터 배포를 프로비저닝하는 방법을 다루는 튜토리얼이 있으니 확인해 보십시오. 또한 Kubernetes 클러스터에 PHP 애플리케이션을 배포하는 방법을 배우려면 이 튜토리얼을 확인하십시오..

즐거운 컴퓨팅 되세요!

author

Pranay Kapgate

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.