블로그로 돌아가기

Ubuntu 18.04에서 Kubeadm을 사용하여 Kubernetes 클러스터를 생성하는 방법

Ubuntu 18.04에서 Kubeadm을 사용하여 Kubernetes 클러스터를 생성하는 방법

이 튜토리얼은 Kubernetes 클러스터를 처음부터 AnsibleKubeadm를 사용하여 구축하고, 나아가 컨테이너화된 Nginx 애플리케이션을 배포하는 방법을 안내합니다.

소개

Kubernetes (k8s 또는 “kube”라고도 함)는 컨테이너화된 애플리케이션의 배포, 관리 및 확장에 수반되는 많은 수동 프로세스를 자동화하는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Kubernetes는 프로젝트에 적극적으로 기여하는 빠르게 성장하는 오픈 소스 커뮤니티를 보유하고 있습니다. 다음에 대해 알아야 할 모든 것을 소개해 줄 블로그 게시물을 확인해 보세요: Kubernetes 플랫폼의 기본 사항.

Kubeadm은 API 서버, Controller Manager, Kube DNS 등 여러 통합 요소, 부품 및 조각을 구성하는 도구입니다. 또한 설치를 자동화하는 데 도움이 됩니다. 하지만 사용자를 생성하거나 운영 체제 수준의 종속성 설치 및 구성을 처리하지 않으며, 인프라를 프로비저닝할 수도 없습니다.

Ansible은 소프트웨어 프로비저닝 및 애플리케이션 배포를 위한 오픈 소스 도구입니다. Saltstack은 이벤트 기반의 정보 기술 자동화를 위한 오픈 소스 소프트웨어입니다. 이 두 가지 도구는 추가 클러스터를 생성하거나 기존 클러스터를 재구성할 때 오류 발생 가능성을 줄여주며, 이러한 사전 작업에 사용할 수 있습니다.

목표:

클러스터에는 다음과 같은 물리적 리소스가 포함됩니다:

1. 마스터 노드 1개:

마스터 노드는 작업자 노드(워크로드 런타임) 세트를 제어하고 관리하며 Kubernetes의 클러스터 역할을 하는 노드입니다. 또한 트리거된 이벤트에 대한 적절한 조치를 결정하기 위해 노드의 리소스 계획을 보유합니다. 이 노드는 etcd를 실행하며, 이는 작업자 노드에 워크로드를 예약하는 구성 요소 간에 클러스터 데이터를 보관하고 관리하는 데 사용되는 오픈 소스 분산 키-값 저장소입니다.

예를 들어, 스케줄러는 새로 예약된 POD를 어떤 작업자 노드에서 호스팅할지 결정합니다.

2. 작업자 노드 2개:

작업자 노드는 예약이 완료되면 마스터 노드가 다운되더라도 할당된 작업을 계속 수행하는 노드입니다. 작업자 노드는 워크로드(즉, 컨테이너화된 애플리케이션 및 서비스)가 실행되는 서버입니다. 작업자를 추가하여 클러스터의 용량을 늘릴 수도 있습니다.

이 튜토리얼을 완료하면 클러스터의 서버에 애플리케이션을 실행할 수 있는 충분한 CPU 및 RAM 리소스가 있다고 가정할 때, 워크로드(즉, 컨테이너화된 애플리케이션 및 서비스)를 실행할 준비가 된 완전히 기능하는 클러스터를 갖추게 됩니다. 클러스터를 성공적으로 설정한 후에는 거의 모든 기존 UNIX 애플리케이션을 실행할 수 있습니다. 웹 애플리케이션, 데이터베이스, 데몬, 명령줄 도구를 포함하여 클러스터에 컨테이너화할 수 있습니다.

클러스터 자체는 각 노드에서 약 300-500MB의 메모리와 10%의 CPU를 소비합니다.

사전 요구 사항:

  1. 로컬 Linux 머신에 SSH 키 쌍이 있어야 하며 SSH 키 사용 방법을 알고 있어야 합니다. 이전에 SSH 키를 사용해 본 적이 없다면, 다음 튜토리얼을 참고하여 로컬 머신에 SSH 키를 설정.
  2. 할 수 있습니다. 각각 최소 4GB RAM과 4개의 vCPU를 갖추고 Ubuntu 18.04를 실행하는 3대의 서버가 필요합니다. SSH 키 쌍을 사용하여 root 사용자로 각 서버에 SSH 접속할 수 있어야 합니다. 다음 튜토리얼을 참고하여 Ubuntu 서버를 설치.
  3. 하세요. 로컬 머신에 Ansible이 설치되어 있어야 합니다.
  4. 또한 Ansible 플레이북에 익숙해야 합니다.
  5. 또한 Docker 이미지에서 컨테이너를 실행하는 방법을 알아야 합니다. 도움이 필요하다면 Ubuntu 18.04에 Docker를 설치하고 사용하는 방법의 “5단계 — Ubuntu에서 Docker 이미지 작업하기”를 참조하세요.

1단계 — 작업 공간 디렉터리 및 Ansible 인벤토리 파일 설정

먼저 로컬 머신에 Ansible을 설정해야 합니다. 이는 원격 서버에서 명령을 실행하는 데 도움이 됩니다. 또한 수동 배포 작업을 자동화하여 수고를 덜어줍니다. 이를 위해 로컬 머신에 임시 디지털 저장 공간(작업 공간) 역할을 할 디렉터리를 생성해야 합니다.

디렉터리를 생성한 후에는 hosts 파일은 각 서버의 IP 주소 및 그룹에 대한 모든 정보를 저장하는 파일입니다. 이 파일은 인벤토리 정보를 내부에 저장하는 데 도움이 됩니다. 앞서 언급했듯이 세 개의 서버가 있으며, 하나는 마스터이고 두 개는 워커입니다. 마스터 서버는 IP가 다음과 같이 표시되는 마스터가 됩니다: master_ip. 나머지 두 서버는 워커가 되며 다음과 같은 IP를 갖게 됩니다: worker_1_ipworker_2_ip.

다음과 같은 이름의 디렉터리를 생성해야 합니다: ~/kube-cluster 로컬 머신의 홈 디렉터리에 생성하고 cd 명령을 사용하여 해당 디렉터리로 이동합니다:

The ~/kube-cluster 디렉터리는 이제 kubeadm을 사용하여 Kubernetes 클러스터를 생성하기 위한 모든 로컬 명령을 실행할 임시 디지털 저장 공간(작업 공간) 역할을 하게 됩니다. 이 디렉터리에는 모든 Ansible 플레이북이 포함되며 튜토리얼의 나머지 부분에서 사용됩니다.

Hosts 파일 생성

다음과 같은 이름의 파일을 생성합니다: ~/kube-cluster/hosts (사용 도구: nano 또는 선호하는 텍스트 편집기):

이제 클러스터의 논리적 구조에 대한 정보를 지정하는 다음 텍스트를 추가해야 합니다:

언급했듯이, 해당 인벤토리 파일은 서버의 IP 주소와 각 서버가 속한 그룹에 대한 모든 정보를 저장하는 데 도움이 됩니다. ~/kube-cluster/hosts 파일이 인벤토리 파일이 되며, (mastersworkers)는 클러스터의 논리적 구조를 지정하기 위해 추가한 두 개의 Ansible 그룹이 됩니다.

The Master 그룹은 Ansible이 root 사용자로 원격 명령을 실행해야 함을 지정하는 그룹입니다. 또한 마스터 노드의 IP(master_ip)를 나열하며, 이는 “master”라는 서버 항목으로 표시될 수 있습니다. 마찬가지로 Workers 그룹에는 워커 서버에 대한 두 개의 항목(worker_1_ipworker_2_ip)이 있으며, 이 항목들 역시 ansible_user를 root로 지정합니다.

파일의 마지막 줄은 Ansible이 관리 작업을 위해 원격 서버의 Python 3 인터프리터를 사용하도록 지시합니다. 마지막으로, 텍스트를 추가한 후 파일을 저장하고 닫아야 합니다. 작업 공간 디렉터리와 Ansible 인벤토리 파일을 설정했으므로, 이제 운영 체제 수준의 종속성을 설치하고 구성 설정을 생성하는 다음 단계로 넘어가겠습니다.

단계 2 — 모든 원격 서버에 root가 아닌 사용자 생성

이 단계에서는 권한이 없는 일반 사용자로서 수동으로 SSH 접속을 할 수 있도록 모든 서버에 sudo 권한을 가진 root가 아닌 사용자를 생성하는 방법을 배웁니다.

이는 클러스터 보존을 위해 자주 수행되는 작업에 유용할 수 있습니다. 또한, 이 단계는 작업을 더 정확하고 오류 없이 수행할 수 있도록 도와주며, 실수로 중요한 파일을 변경하거나 삭제할 가능성을 줄여줍니다. root 소유의 파일 설정을 변경하거나 다음과 같은 명령어로 시스템 정보를 확인하고 싶다면 top/htop 및 실행 중인 컨테이너 목록을 보려면 다음 단계가 모든 작업을 수행하는 데 도움이 될 것입니다.

플레이북 생성

다음과 같은 이름의 파일을 생성합니다: ~/kube-cluster/initial.yml (작업 공간 내):

다음으로, 아래의 플레이(play)를 추가해야 합니다. Ansible에서 플레이는 특정 서버 및 그룹을 대상으로 수행할 단계들의 모음입니다. 플레이북에는 하나 또는 여러 개의 플레이가 포함될 수 있습니다.

다음 플레이는 root가 아닌 sudo 사용자를 생성합니다:

다음은 플레이북이 수행하는 작업에 대한 분석입니다:

  1. 이 플레이북은 루트가 아닌 사용자인 ubuntu.
  2. 비밀번호 입력 없이 sudo 명령을 실행해야 하므로, 이 플레이는 sudoers 파일을 구성하여 ubuntu 사용자가 그렇게 할 수 있도록 합니다.
  3. 위 작업의 주요 목적은 각 서버에 ubuntu 사용자로 SSH 접속할 수 있도록 하는 것입니다. 이 플레이북은 로컬 머신의 공개 키(보통 ~/.ssh/id_rsa.pub)를 원격 ubuntu 사용자의 인증된 키 목록에 추가합니다.

이제 텍스트를 추가한 후 파일을 저장하고 닫아야 합니다.

플레이북 실행하기

그 후, 로컬 머신에서 다음을 실행하여 루트가 아닌 ubuntu 사용자를 생성하는 플레이북을 실행해야 합니다:

이 명령을 실행하는 데는 시간이 다소 걸리며, 완료되면 다음과 같은 출력이 표시됩니다:

creating non root user create a kubernetes cluster

이 단계가 완료되면 다음 단계에서 Kubernetes 전용 의존성 설치로 넘어갈 수 있습니다.

3단계 — Kubernetes 의존성 설치

이 단계에서는 Ubuntu의 패키지 관리자를 사용하여 Kubernetes에 필요한 운영체제 수준의 패키지를 설치하는 방법을 배웁니다.

이 패키지들은 다음과 같습니다:

  1. Docker: Docker는 Docker 컨테이너를 빌드, 배포 및 실행하기 위한 플랫폼이자 도구입니다. 다음 튜토리얼을 따라 Docker를 쉽게 설정할 수 있습니다: 퍼블릭 클라우드의 Ubuntu에 Docker를 설치 & 운영하는 방법. 하지만 rkt와 같은 다른 런타임에 대한 지원도 Kubernetes에서 활발히 개발 중입니다.
  2. Kubeadm: kubeadm은 최소 기능 제품(MVP) 수준의 클러스터를 가동하는 데 필요한 작업을 수행하는 CLI 도구입니다. 이를 통해 표준적인 방식으로 클러스터의 다양한 구성 요소를 설치하고 빌드할 수 있습니다.
  3. kubelet: kubelet은 각 노드에서 실행되며 노드 수준의 작업을 처리하는 기본 “노드 에이전트”입니다.
  4. kubectl: kubectl 역시 클러스터와 통신하고 API 서버를 통해 명령을 내리는 CLI 도구입니다.
플레이북 생성하기

작업 공간에 ~/kube-cluster/kube-dependencies.yml라는 이름의 파일을 생성합니다:

이제 서버에 다음 패키지들을 설치하기 위해 파일에 다음 플레이를 추가해야 합니다:

플레이북의 첫 번째 플레이는 다음을 수행합니다:

  1. 이 플레이는 운영 체제 수준의 패키지인 Docker – 컨테이너 런타임을 설치하는 데 도움이 됩니다.
  2. 설치합니다: apt-transport-https, 이를 통해 APT 소스 목록에 외부 HTTPS 소스를 추가할 수 있습니다.
  3. 키 검증을 위해 Kubernetes APT 리포지토리의 apt-key를 추가합니다.
  4. 원격 서버의 APT 소스 목록에 Kubernetes APT 리포지토리를 추가합니다.
  5. 설치합니다: kubeletkubeadm.

두 번째 플레이는 중요하고 단독인 작업을 수행하며, 여기에는 마스터 노드에 kubectl을(를) 설치하는 작업이 포함됩니다. 이제 텍스트를 추가한 후 파일을 저장하고 닫아야 합니다.

플레이북 실행

그 후, 로컬 머신에서 단순히 다음을 실행하여 플레이북을 실행해야 합니다:

이 명령을 실행하는 데는 약간의 시간이 걸리며, 그 후 다음과 같은 출력이 표시됩니다:

installing k8s dependencies create a kubernetes cluster

실행 후, Docker, kubeadmkubelet이(가) 모든 원격 서버에 설치됩니다. Kubectl은 필수 구성 요소가 아니며 클러스터 명령을 실행하는 데만 필요합니다. 이 컨텍스트에서는 kubectl 명령을 마스터에서만 실행하므로 마스터 노드에만 설치하는 것이 합리적입니다. 하지만 다음 사항에 유의하십시오: kubectl 명령은 모든 워커 노드 또는 클러스터를 가리키도록 설치 및 구성할 수 있는 모든 머신에서 실행할 수 있습니다.

이제 모든 시스템 종속성이 설치되었습니다. 마스터 노드를 설정하고 클러스터를 초기화해 보겠습니다.

4단계 — 마스터 노드 설정

이 단계에서는 다음과 같은 몇 가지 개념을 배우게 됩니다: 포드포드 네트워크 플러그인 마스터 노드를 설정하고 나면 클러스터에 이 두 가지가 모두 포함되기 때문입니다.

포드(Pod)는 Kubernetes에서 배포할 수 있는 가장 작고 기본적인 객체입니다. 포드에는 Docker 컨테이너와 같은 하나 이상의 컨테이너가 포함됩니다. 포드가 여러 컨테이너를 실행할 때 컨테이너는 단일 엔티티로 관리되며 Pod’s 리소스를 공유합니다.

각 포드는 자체 IP 주소를 가지며, 한 노드의 포드는 pod’s IP를 사용하여 다른 노드의 포드에 액세스할 수 있어야 합니다. 그러나 포드 간의 통신은 더 복잡합니다. 한 노드의 포드에서 다른 노드의 포드로 트래픽을 투명하게 라우팅할 수 있는 별도의 구성 요소가 필요합니다. 이 기능을 위해 포드 네트워크 플러그인이 사용됩니다. 많은 포드 네트워크 플러그인을 사용할 수 있지만, 우리는 Flannel이 안정적이고 효율적인 옵션이므로 이를 사용할 것입니다.

플레이북 생성

로컬 머신에 다음과 같이 master.yml이라는 이름의 Ansible 플레이북을 생성합니다:

또한, 클러스터를 초기화하고 Flannel을 설치하려면 파일에 다음 플레이를 추가해야 합니다:

이 플레이의 세부 분석은 다음과 같습니다:

  1. 이 플레이의 첫 번째 작업은 다음을 실행하여 클러스터를 설정합니다: kubeadm init. 파드 IP가 할당될 사설 서브넷을 지정하기 위해 다음 인수를 전달합니다: --pod-network-cidr=10.244.0.0/16. Flannel은 기본적으로 위의 서브넷을 사용합니다. 우리는 이를 통해 kubeadm이 동일한 서브넷을 사용하도록 지시합니다.
  2. 두 번째 작업은 다음 위치에 .kube 디렉터리를 생성하는 데 사용됩니다: /home/ubuntu. 클러스터에 연결하는 데 필요한 관리자 키 파일 및 클러스터의 API 주소와 같은 구성 정보가 이 디렉터리에 보관됩니다.
  3. 세 번째 작업은 /etc/kubernetes/admin.conf 파일(이 파일은 kubeadm init에서 생성됨)을 루트가 아닌 사용자의 홈 디렉터리로 복사하는 데 사용됩니다. 이를 통해 kubectl을 사용하여 새로 생성된 클러스터에 액세스할 수 있습니다.
  4. 마지막 작업은 kubectl apply를 실행하여 Flannel. kubectl apply -f descriptor.[yml|json]kubectl에게 descriptor.[yml|json] 파일에 설명된 개체를 생성하도록 지시하는 구문입니다. kube-flannel.yml 파일에는 클러스터에 Flannel을 설정하는 데 필요한 개체에 대한 설명이 포함되어 있습니다.

이제 텍스트를 추가한 후 파일을 저장하고 닫아야 합니다.

플레이북 실행하기

그 후, 로컬 머신에서 다음을 실행하여 플레이북을 실행하기만 하면 됩니다:

이 명령을 실행하는 데는 다소 시간이 걸리며, 완료되면 다음과 같은 출력이 표시됩니다:

setting up master node create a kubernetes cluster

이제 다음 명령을 사용하여 마스터 노드에 SSH로 접속하여 마스터 노드의 상태를 확인합니다:

마스터 노드 내부로 들어가면 다음을 실행합니다:

이제 다음과 같은 출력이 표시됩니다:

get nodes

위의 출력이 표시되면 마스터 노드에 의해 모든 설정 작업이 완료되었음을 선언할 수 있으며, 마스터 노드가 Ready 상태로 진입함에 따라 워커 노드를 수락하고 작업을 실행하기 시작할 수 있습니다. 이제 로컬 머신에서 워커를 추가할 수 있습니다.

5단계 — 워커 노드 설정하기

마스터 노드를 설정한 후 이제 다음 단계인 워커 노드 설정으로 이동할 수 있습니다. 클러스터에 워커 노드를 추가하는 것은 각 워커 서버에서 단일 명령을 실행하는 것만으로 간단히 수행할 수 있습니다. 이 명령에는 마스터 API 서버의 IP 주소, 포트 및 보안 토큰과 같은 중요한 정보가 포함되어 있습니다. 단, 모든 노드가 클러스터에 참여할 수 있는 것은 아니며, 보안 토큰을 전달하는 노드만 클러스터에 참여할 수 있다는 점에 유의해야 합니다.

플레이북 생성하기

이 명령은 작업 공간으로 다시 이동하여 다음과 같은 이름의 플레이북을 생성하는 데 도움이 됩니다: workers.yml:

클러스터에 워커를 추가하려면 파일에 다음 텍스트를 추가합니다:

플레이북이 수행하는 작업은 다음과 같습니다. 위의 코드에는 두 개의 플레이가 있습니다.

  1. 첫 번째 플레이는 워커 노드에서 실행해야 하는 조인 명령을 가져오는 데 사용됩니다. 명령의 형식은 다음과 같습니다: kubeadm join --token sha256:<hash><token><master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>;. 이 태스크는 올바른 토큰 및 해시 값을 가져와야 합니다. 올바른 입력을 받으면 태스크는 이를 팩트(fact)로 설정하여 두 번째 플레이가 해당 정보에 액세스할 수 있도록 합니다.
  2. 두 번째 플레이는 단일 태스크만 수행하도록 작성되었습니다. 즉, 모든 워커 노드에서 조인 명령을 실행하여 두 워커 노드를 클러스터의 일부로 만드는 것입니다.

텍스트를 추가한 후 파일을 저장하고 닫아야 합니다.

플레이북 실행하기

그 후, 워커 머신에서 다음 명령을 실행하여 플레이북을 실행해야 합니다:

이 명령을 실행하는 데는 시간이 다소 걸리며, 그 후 다음과 같은 출력이 표시됩니다:

setting up worker nodes

이제 Kubernetes 클러스터가 완전히 설정되었으며 워커가 워크로드를 실행할 준비가 되어 정상적으로 작동합니다. 다음 단계로 넘어가기 전에 클러스터가 계획대로 작동하는지 확인해 보겠습니다.

단계 6 — 클러스터 검증하기

설정 중에 클러스터가 실패하는 경우가 있을 수 있습니다. 마스터와 워커 간의 네트워크 오류나 노드 문제 때문일 수 있습니다. 따라서 애플리케이션을 예약하기 전에 클러스터를 검증하고 오작동이 발생하지 않도록 해야 합니다. 이를 위해 마스터 노드에서 클러스터의 현재 상태를 확인하여 노드가 준비되었는지 확인해야 합니다. 노드가 준비되지 않았거나 연결이 끊어진 경우 다음 명령으로 연결을 다시 가져올 수 있습니다:

다음 명령을 사용하여 클러스터의 상태를 가져옵니다:

이 명령을 실행하는 데는 시간이 다소 걸리며, 그 후 다음과 같은 출력이 표시됩니다:

get nodes

 

 

 

 

클러스터의 일부인 모든 노드가 준비 상태인지 확인해야 합니다. 일부 노드가 Not ReadySTATUS로 가지고 있다면, 이는 워커 노드의 설정이 아직 완료되지 않았음을 나타냅니다. 하지만 kubectl get nodes를 다시 실행하고 업데이트된 출력을 확인하기 전에 5~10분 정도 더 기다려야 합니다. 일부 노드가 여전히 Not Ready를 상태로 표시하는 경우, 이전 단계를 확인하고 명령을 다시 실행해야 합니다. 노드의 STATUS 값이 Ready인 경우에만 클러스터의 일부이며 워크로드를 실행할 준비가 된 것입니다. 6단계를 성공적으로 실행하면 이제 클러스가 검증된 것입니다. 이제 클러스터에 예제 Nginx 애플리케이션을 예약해 보겠습니다.

단계 7 — 클러스터에서 애플리케이션 실행하기

배포(Deployment) 생성하기

클러스터를 성공적으로 생성한 후에는 컨테이너화된 모든 애플리케이션을 클러스터에 배포할 수 있습니다. 마스터 노드 내에 있는 경우 다른 컨테이너화된 애플리케이션에 대해 아래의 다음 명령을 사용할 수 있습니다. 다음으로, 다음 명령을 실행하여 이름이 nginx :

Docker 이미지 이름 및 관련 플래그(포트 및 볼륨 등)를 변경해야 합니다. 익숙한 방식을 유지하기 위해, 배포(deployments) 및 서비스(services)를 사용하여 Nginx를 배포함으로써 애플리케이션이 클러스터에 어떻게 배포될 수 있는지 확인할 수 있습니다.

하나의 Kubernetes deployment은(는) 애플리케이션에 선언적 업데이트를 제공하는 Kubernetes의 리소스 객체입니다. 디플로이먼트(deployment)를 사용하면 컨테이너 이미지, 복제본(replicas), 업데이트 전략 등 애플리케이션의 수명 주기를 설명할 수 있습니다. 디플로이먼트는 원하는 수의 파드(pod)가 항상 실행되고 사용 가능한 상태를 유지하도록 보장합니다. 클러스터 수명 동안 파드가 충돌하면 다시 생성합니다. 또한 업데이트 프로세스가 전체적으로 기록되고 버전이 지정되어 일시 중지, 계속 진행 및 이전 버전으로의 롤백 옵션을 제공합니다. Nginx라는 이름의 디플로이먼트를 생성하는 위의 명령은 Docker 레지스트리의 Nginx Docker 이미지에서 하나의 컨테이너를 가진 파드를 배포하는 데 도움이 됩니다.

Node Port 설정하기

다음으로, 우리는 NodePort. NodePort은(는) 클러스터의 모든 노드에서 열려 있는 포트입니다. Kubernetes는 들어오는 트래픽을 NodePort로 투명하게 라우팅하며, 이는 애플리케이션이 다른 노드에서 실행 중인 경우에도 마찬가지입니다. 이를 위해 다음 명령을 사용하여 앱을 공개적으로 노출할 Nginx라는 이름의 NodePort 리소스를 생성할 수 있습니다:

서비스는 해당 파드에 인터페이스를 노출하는 역할을 하는 또 다른 Kubernetes 객체로, 클러스터 내부 또는 외부 프로세스와 서비스 간의 네트워크 액세스를 가능하게 합니다. 이는 파드 상단의 추상화로 정의될 수 있으며, 파드에 액세스할 수 있는 단일 IP 주소와 DNS 이름을 제공합니다. 서비스를 사용하면 로드 밸런싱 구성을 매우 쉽게 관리할 수 있습니다.

다음 명령을 실행합니다:

그러면 다음과 유사한 텍스트가 출력됩니다:

get services

출력을 얻은 후, Kubernetes는 자동으로 30000보다 큰 임의의 포트를 할당하는 동시에, 할당된 포트가 다른 서비스에 의해 이미 바인딩되어 있지 않은지 확인합니다. 위 출력의 세 번째 줄은 Nginx가 실행 중인 포트를 확인하는 데 도움이 됩니다.

작동 여부를 확인하려면 로컬 머신의 브라우저를 통해 http://worker_1_ip:nginx_port 또는 http://worker_2_ip:nginx_port에 접속해 보세요. 익숙한 Nginx 시작 페이지를 볼 수 있습니다.

디플로이먼트 제거하기

Nginx 애플리케이션을 제거하려면 먼저 마스터 노드에서 nginx 서비스를 삭제해야 합니다:

애플리케이션이 최종적으로 삭제되었는지 확인하려면 다음 명령을 실행해야 합니다:

다음과 같은 출력을 얻게 됩니다:

check services

그 후, 다음 명령을 사용하여 디플로이먼트를 삭제해야 합니다:

이 명령을 사용하여 디플로이먼트가 최종적으로 삭제되었는지 확인할 수 있습니다:

get deployments

결론:

이 튜토리얼은 Kubeadm과 Ansible을 사용하여 Ubuntu 18.04에 클러스터를 올바르게 설정하는 데 도움이 될 것입니다. 이제 클러스터가 설정되었으므로 자체 애플리케이션과 서비스를 쉽게 배포할 수 있습니다.

다음은 진행 과정에 도움이 될 추가 세부 정보가 포함된 링크 목록입니다:

  1. 애플리케이션 Docker화 – 이 링크에는 Docker를 사용하여 애플리케이션을 로드하는 방법을 안내하는 예제가 포함되어 있습니다. PostgreSQL, CouchDB 서비스 등을 Docker화하는 방법 등이 있습니다.
  2. 파드 개요 – 이 링크는 파드를 사용하는 방법, 파드의 기능, 그리고 파드가 다른 Kubernetes 객체와 어떻게 연관되어 있는지에 대한 세부 정보를 보여줍니다. 파드는 Kubernetes의 중요한 부분이므로 이를 이해하면 작업을 성공적으로 수행하는 데 도움이 됩니다.
  3. 디플로이먼트 개요 – 디플로이먼트에 대해 배우는 데 도움이 될 것입니다. 디플로이먼트는 파드와 레플리카셋(ReplicaSet)에 대한 선언적 업데이트를 제공합니다. 디플로이먼트를 업데이트, 롤오버 및 롤백하는 방법을 배우게 됩니다.
  4. 서비스 개요 -이 링크는 Kubernetes 클러스터에서 자주 사용되는 또 다른 객체인 서비스에 대해 안내합니다. Kubernetes의 서비스는 파드의 논리적 집합과 이에 액세스할 수 있는 정책을 정의하는 추상화입니다. 서비스의 유형과 옵션을 이해하는 것은 상태 비저장(stateless) 및 상태 저장(stateful) 애플리케이션을 모두 실행하는 데 필수적입니다.

또한, Docker 및 Kubernetes에 초점을 맞춘 다른 튜토리얼도 확인해 보세요. 다음에서 찾을 수 있습니다: 저희 블로그:

또한 다음과 같이 중요한 다른 개념들도 있습니다: 볼륨, 인그레스, 그리고 시크릿 등은 프로덕션 애플리케이션을 배포할 때 사용할 수 있습니다.

즐거운 컴퓨팅 되세요!

author

Manpreet Singh

작성자 · CloudSigma

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

댓글

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