웹사이트 검색

Helm 2 패키지 관리자를 사용하여 Kubernetes 클러스터에 소프트웨어를 설치하는 방법


소개

Helm은 개발자와 운영자가 Kubernetes 클러스터에서 애플리케이션을 보다 쉽게 구성하고 배포할 수 있도록 하는 Kubernetes용 패키지 관리자입니다.

이 튜토리얼에서는 Helm을 설정하고 이를 사용하여 Kubernetes 대시보드 애플리케이션의 인스턴스를 설치, 재구성, 롤백 및 삭제합니다. 대시보드는 공식 웹 기반 Kubernetes GUI입니다.

Helm 및 패키징 생태계에 대한 개념적 개요는 An Introduction to Helm 기사를 참조하십시오.

참고: 이 자습서에서는 Tiller가 필요한 Helm 패키지 관리자 버전 2를 사용하여 Kubernetes 클러스터에 소프트웨어를 설치하기 위한 워크플로를 다룹니다. Helm 버전 3으로 작업하는 경우 Helm 3 패키지 관리자를 사용하여 Kubernetes 클러스터에 소프트웨어를 설치하는 방법 튜토리얼을 따르십시오.

전제 조건

이 자습서에는 다음이 필요합니다.

  • A Kubernetes 1.8+ cluster with role-based access control (RBAC) enabled.

  • The kubectl command-line tool installed on your local machine, configured to connect to your cluster. You can read more about installing kubectl in the official documentation.

    You can test your connectivity with the following command:

    1. kubectl cluster-info

    If you see no errors, you’re connected to the cluster. If you access multiple clusters with kubectl, be sure to verify that you’ve selected the correct cluster context:

    1. kubectl config get-contexts
    Output
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-nyc1-k8s-example do-nyc1-k8s-example do-nyc1-k8s-example-admin docker-for-desktop docker-for-desktop-cluster docker-for-desktop

    In this example the asterisk (*) indicates that we are connected to the do-nyc1-k8s-example cluster. To switch clusters run:

    1. kubectl config use-context context-name

올바른 클러스터에 연결되면 1단계를 계속 진행하여 Helm 설치를 시작합니다.

1단계 - Helm 설치

먼저 로컬 컴퓨터에 helm 명령줄 유틸리티를 설치합니다. Helm은 MacOS, Windows 또는 Linux에서 설치 프로세스를 처리하는 스크립트를 제공합니다.

쓰기 가능한 디렉토리로 변경하고 Helm의 GitHub 리포지토리에서 스크립트를 다운로드합니다.

  1. cd /tmp
  2. curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

chmod를 사용하여 스크립트를 실행 가능하게 만듭니다.

  1. chmod u+x install-helm.sh

이 시점에서 즐겨 사용하는 텍스트 편집기를 사용하여 스크립트를 열고 검사하여 안전한지 확인할 수 있습니다. 만족스러우면 다음을 실행하십시오.

  1. ./install-helm.sh

비밀번호를 입력하라는 메시지가 표시될 수 있습니다. 제공하고 ENTER를 누르십시오.

Output
helm installed into /usr/local/bin/helm Run 'helm init' to configure helm.

다음으로 클러스터에 일부 Helm 구성 요소를 설치하여 설치를 마칩니다.

2단계 - Tiller 설치

Tiller는 클러스터에서 실행되는 helm 명령의 동반자로서 helm에서 명령을 수신하고 Kubernetes API와 직접 통신하여 리소스 생성 및 삭제의 실제 작업을 수행합니다. Tiller에게 클러스터에서 실행하는 데 필요한 권한을 부여하기 위해 Kubernetes serviceaccount 리소스를 만들 것입니다.

참고: 이 serviceaccount를 클러스터 관리자 클러스터 역할에 바인딩합니다. 이렇게 하면 tiller 서비스 수퍼유저가 클러스터에 액세스할 수 있고 모든 네임스페이스에 모든 리소스 유형을 설치할 수 있습니다. 이것은 Helm을 탐색하는 데 적합하지만 프로덕션 Kubernetes 클러스터에 대해 더 잠긴 구성을 원할 수 있습니다.

Tiller에 대한 다양한 RBAC 시나리오 설정에 대한 자세한 내용은 공식 Helm RBAC 설명서를 참조하십시오.

경운기 serviceaccount를 생성합니다.

  1. kubectl -n kube-system create serviceaccount tiller

다음으로 Tiller serviceaccount를 cluster-admin 역할에 바인딩합니다.

  1. kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

이제 helm init를 실행할 수 있습니다. Tiller를 클러스터에 설치하고 안정적인 리포지토리 세부 정보를 다운로드하는 것과 같은 일부 로컬 하우스키핑 작업을 수행할 수 있습니다.

  1. helm init --service-account tiller
Output
. . . Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!

Tiller가 실행 중인지 확인하려면 kube-system 네임스페이스에 포드를 나열합니다.

  1. kubectl get pods --namespace kube-system
Output
NAME READY STATUS RESTARTS AGE . . . kube-dns-64f766c69c-rm9tz 3/3 Running 0 22m kube-proxy-worker-5884 1/1 Running 1 21m kube-proxy-worker-5885 1/1 Running 1 21m kubernetes-dashboard-7dd4fc69c8-c4gwk 1/1 Running 0 22m tiller-deploy-5c688d5f9b-lccsk 1/1 Running 0 40s

Tiller 포드 이름은 접두사 tiller-deploy-로 시작합니다.

이제 두 Helm 구성 요소를 모두 설치했으므로 helm을 사용하여 첫 번째 애플리케이션을 설치할 준비가 되었습니다.

3단계 - Helm 차트 설치

Helm 소프트웨어 패키지는 차트라고 합니다. Helm은 stable이라는 선별된 차트 리포지토리와 함께 사전 구성되어 제공됩니다. 사용 가능한 차트 Kubernetes 대시보드를 예로 찾아볼 수 있습니다.

helm을 사용하여 stable 저장소에서 kubernetes-dashboard 패키지를 설치합니다.

  1. helm install stable/kubernetes-dashboard --name dashboard-demo
Output
NAME: dashboard-demo LAST DEPLOYED: Wed Aug 8 20:11:07 2018 NAMESPACE: default STATUS: DEPLOYED . . .

위의 예제 출력에서 강조 표시된 NAME 줄을 확인하십시오. 이 경우 dashboard-demo라는 이름을 지정했습니다. 이것이 출시의 이름입니다. Helm 릴리스는 특정 구성이 있는 하나의 차트에 대한 단일 배포입니다. 각각 자체 구성이 있는 동일한 차트의 여러 릴리스를 배포할 수 있습니다.

--name을 사용하여 고유한 릴리스 이름을 지정하지 않으면 Helm이 임의의 이름을 생성합니다.

이 클러스터의 릴리스 목록을 Helm에 요청할 수 있습니다.

  1. helm list
Output
NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 1 Wed Aug 8 20:11:11 2018 DEPLOYED kubernetes-dashboard-0.7.1 default

이제 kubectl을 사용하여 클러스터에 새 서비스가 배포되었는지 확인할 수 있습니다.

  1. kubectl get services
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-demo-kubernetes-dashboard ClusterIP 10.32.104.73 <none> 443/TCP 51s kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 34m

기본적으로 릴리스에 해당하는 서비스 이름은 Helm 릴리스 이름과 차트 이름의 조합입니다.

이제 애플리케이션을 배포했으므로 Helm을 사용하여 구성을 변경하고 배포를 업데이트해 보겠습니다.

4단계 - 릴리스 업데이트

helm upgrade 명령을 사용하여 새 차트 또는 업데이트된 차트로 릴리스를 업그레이드하거나 구성 옵션을 업데이트할 수 있습니다.

업데이트 및 롤백 프로세스를 보여주기 위해 dashboard-demo 릴리스를 간단하게 변경할 것입니다. 대시보드 서비스의 이름을 dashboard로 업데이트하겠습니다. , dashboard-demo-kubernetes-dashboard 대신.

kubernetes-dashboard 차트는 서비스 이름을 제어하기 위한 fullnameOverride 구성 옵션을 제공합니다. 이 옵션을 설정하여 helm upgrade를 실행해 보겠습니다.

  1. helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"

초기 helm install 단계와 유사한 출력이 표시됩니다.

Kubernetes 서비스가 업데이트된 값을 반영하는지 확인합니다.

  1. kubectl get services
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 36m dashboard ClusterIP 10.32.198.148 <none> 443/TCP 40s

서비스 이름이 새 값으로 업데이트되었습니다.

참고: 이 시점에서 실제로 브라우저에서 Kubernetes 대시보드를 로드하고 확인하고 싶을 수 있습니다. 이렇게 하려면 먼저 다음 명령을 실행합니다.

  1. kubectl proxy

이렇게 하면 로컬 컴퓨터에서 원격 클러스터 리소스에 액세스할 수 있는 프록시가 생성됩니다. 이전 지침에 따라 대시보드 서비스의 이름은 kubernetes-dashboard이며 default 네임스페이스에서 실행됩니다. 이제 다음 URL에서 대시보드에 액세스할 수 있습니다.

http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/

필요한 경우 강조 표시된 부분을 고유한 서비스 이름과 네임스페이스로 대체하십시오. 실제로 대시보드를 사용하는 지침은 이 튜토리얼의 범위를 벗어나지만 공식 Kubernetes 대시보드 문서에서 자세한 내용을 읽을 수 있습니다.

다음으로 릴리스를 롤백하는 Helm의 기능을 살펴보겠습니다.

5단계 - 릴리스 롤백

이전 단계에서 dashboard-demo 릴리스를 업데이트할 때 릴리스의 두 번째 개정판을 만들었습니다. Helm은 이전 구성 또는 차트로 롤백해야 하는 경우를 대비하여 이전 릴리스의 모든 세부 정보를 유지합니다.

helm list를 사용하여 릴리스를 다시 검사합니다.

  1. helm list
Output
NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 2 Wed Aug 8 20:13:15 2018 DEPLOYED kubernetes-dashboard-0.7.1 default

REVISION 열은 이것이 이제 두 번째 개정판임을 알려줍니다.

첫 번째 버전으로 롤백하려면 helm rollback을 사용하세요.

  1. helm rollback dashboard-demo 1

롤백이 성공했음을 나타내는 다음 출력이 표시되어야 합니다.

Output
Rollback was a success! Happy Helming!

이 시점에서 kubectl get services를 다시 실행하면 서비스 이름이 이전 값으로 다시 변경되었음을 알 수 있습니다. Helm은 버전 1의 구성으로 애플리케이션을 재배포했습니다.

다음으로 Helm으로 릴리스를 삭제하는 방법을 살펴보겠습니다.

6단계 - 릴리스 삭제

Helm 릴리스는 helm delete 명령으로 삭제할 수 있습니다.

  1. helm delete dashboard-demo
Output
release "dashboard-demo" deleted

릴리스가 삭제되고 대시보드 애플리케이션이 더 이상 실행되지 않더라도 Helm은 릴리스를 다시 배포하려는 경우를 대비하여 모든 개정 정보를 저장합니다. 지금 새 dashboard-demo 릴리스를 helm 설치하려고 하면 오류가 발생합니다.

Error: a release named dashboard-demo already exists.

--deleted 플래그를 사용하여 삭제된 릴리스를 나열하면 릴리스가 아직 남아 있음을 알 수 있습니다.

  1. helm list --deleted
Output
NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 3 Wed Aug 8 20:15:21 2018 DELETED kubernetes-dashboard-0.7.1 default

릴리스를 정말로 삭제하고 모든 이전 버전을 제거하려면 helm delete 명령과 함께 --purge 플래그를 사용하세요.

  1. helm delete dashboard-demo --purge

이제 릴리스가 완전히 삭제되었으며 릴리스 이름을 다시 사용할 수 있습니다.

결론

이 자습서에서는 helm 명령줄 도구와 해당 tiller 동반 서비스를 설치했습니다. Helm 차트 및 릴리스의 설치, 업그레이드, 롤백 및 삭제도 살펴보았습니다.

Helm 및 Helm 차트에 대한 자세한 내용은 공식 Helm 문서를 참조하세요.