8 Kubernetes 팁과 요령

집에서 재택근무 중인 남성 프로그래머

이 글에서는 Kubernetes를 더 쉽게 사용할 수 있는 몇 가지 팁과 요령을 살펴보겠습니다.

아래에 제공된 대부분의 팁은 Kubernetes 클러스터에 대해 명령을 실행할 수 있는 강력한 명령줄 도구인 kubectl을 사용하는 것입니다.

Kubernetes 배경

1. 기본 네임스페이스 설정

네임스페이스(예: Dev1, Dev2, QA1, QA2 등)를 사용하여 Kubernetes 클러스터를 여러 환경으로 나눌 수 있으며, 각 환경은 다른 사용자가 관리할 수 있습니다. kubectl 명령을 작성할 때 불편한 점 중 하나는 명령을 작성할 때마다 끝에--namespace 옵션이 필요하다는 것입니다. 사람들은 종종 이 사실을 잊어버리고 잘못된 네임스페이스에 오브젝트(파드, 서비스, 배포)를 생성하는 경우가 있습니다. 

이 요령을 사용하면 kubectl 명령을 실행하기 전에 네임스페이스 기본 설정을 지정할 수 있습니다. kubectl 명령을 실행하기 전에 다음 명령을 실행하면 현재 컨텍스트에 대한 모든 후속 kubectl 명령의 네임스페이스가 저장됩니다.

kubectl config set-context $(kubectl config current-context) --namespace=mynamespace

네임스페이스를 사용한 가장 일반적이고 유용한 명령은 다음과 같습니다.

  • kubectl get namespaces
  • kubectl create namespace mynamespace
  • kubectl get pods --all-namespaces (모든 네임스페이스의 상태와 함께 모든 파드를 나열합니다.)
  • kubectl get po -o wide -n <namspace1> -n <namespace2> -n <namespace3> (이 명령은 각 네임스페이스에서 파드를 식별합니다).
  • kubectl describe namespace <namespace>
  • kubectl config view --minify | grep namespace (이 명령은 현재 컨텍스트에 맞게 네임스페이스를 올바르게 설정했는지 확인합니다.) 
IBM Cloud

Red Hat OpenShift AI on IBM Cloud: AI 워크로드 배포

Red Hat OpenShift on IBM Cloud를 통해 AI 기능을 활용하세요. 이 영상에서는 확장가능한 머신 러닝 운영 플랫폼으로 AI 워크로드를 효율적으로 구축, 배포 및 관리하는 방법을 살펴보겠습니다.

2. 시간 절약을 위한 유용한 별칭

Kubernetes 명령은 상당히 길 수 있으므로 kubectl 실행을 위한 몇 가지 별칭을 설정하는 것이 매우 유용합니다. 더 이상 전체 명령의 철자를 반복해서 입력할 필요가 없으므로 한 세션에서 여러 Kubernetes 명령을 실행하려고 할 때 훨씬 쉽게 사용할 수 있습니다.

자주 사용하는 몇 가지 명령어의 별칭을 아래에 나열해 두었습니다. kubectl 명령을 실행하기 전에 이를 실행하여 시간을 절약하세요. 예를 들어 kubectl 대신  K 를 입력하면됩니다.

  • 별칭 k='kubectl'
  • 별칭 kc='k config view --minify | grep name'
  • 별칭 kdp='kubectl describe pod'
  • 별칭 krh='kubectl run --help | more'
  • 별칭 ugh='kubectl get --help | more'
  • 별칭 c='clear'
  • 별칭 kd='kubectl describe pod'
  • 별칭 ke='kubectl explain'
  • 별칭 kf='kubectl create -f'
  • 별칭 kg='kubectl get pods --show-labels'
  • 별칭 kr='kubectl replace -f'
  • 별칭 kh='kubectl --help | more'
  • 별칭 krh='kubectl run --help | more'
  • 별칭 ks='kubectl get namespaces'
  • 별칭 l='ls -lrt'
  • 별칭 ll='vi ls -rt | tail -1'
  • 별칭 kga='k get pod --all-namespaces'
  • 별칭 kgaa='kubectl get all --show-labels'

 

3. vi를 사용한 YAML 편집

YAML 파일을 작성하는 데 사용할 수 있는 다양한 편집기가 있지만, 터미널에서 작업하는 동안 생성된 YAML을 빠르게 조정해야 하는 경우가 많습니다. 이곳은 원래 Unix 운영 체제용으로 만든 텍스트 편집기인 신뢰할 수 있는 vi를 사용하기에 좋은 곳입니다.

Vi 편집기는 문서화되어 있으며 활발한 오픈 소스 커뮤니티의 지원을 받고 있습니다. 그러나 YAML 파일을 만들 때 vi 편집기의 문제 중 하나는 공간 문제입니다. 탭으로 들여쓰기하고 공백으로 정렬할 수 있는 방법이 필요합니다. 탭과 공백을 공백 대신 사용하면 YAML 파일을 작성하는 동안 항상 구문 문제가 발생했습니다(예: 캐리지 리턴을 누를 때 기본값으로 2-공백 YAML을 가져오는 경우).

어떻게 이 문제를 해결했을까요? 이러한 줄이 포함된 ~/.vimrc 파일을 만든 후 vi 편집기로 YAML 파일을 생성하면 편집이 더 쉬워집니다.

  • set smarttab
  • set expandtab
  • set shiftwidth=4
  • set tabstop=4
  • set number

4. kubectl 명령어에서 YAML 생성

kubectl 명령을 사용하여 명령줄에서 복잡한 YAML 파일을 만들 수 있습니다.

대부분의 사람들은 YAML 파일로 작업하는 것이 재미없다는 데 동의할 것이며, Kubernetes YAML 파일은 매우 장황하고 처음부터 만들기가 어려울 수 있습니다. 편집기를 사용하여 빈 페이지에서보다 kubectl 명령에서 YAML 파일을 만드는 것이 훨씬 쉽습니다.

다음 명령은 yamlfile 이름을 가진 YAML 파일을 생성합니다. 이러한 kubectl 명령으로 YAML 파일을 생성한 후에는 요구 사항에 따라 수정하여 처음부터 다시 작성하는 대신 사용할 수 있습니다.

  • kubectl run busybox --image=busybox --dry-run=client -o yaml --
    restart=Never > yamlfile.yaml
    
    kubectl create job my-job --dry-run=client -o yaml --image=busybox -- date>yamlfile.yaml
    
  • kubectl get -o yaml deploy/nginx > 1.yaml(반드시 nginx라는 이름의 배포가 있어야 합니다.)
    
  • kubectl run busybox --image=busybox --dry-run=client -o yaml 
    --restart=Never -- /bin/sh -c "while true; do echo hello; echo 
    hello again;done" > yamlfile.yaml
    
  • kubectl run wordpress --image=wordpress –-expose –-port=8989 -
    -restart=Never -o yaml
    
  • kubectl run test --image=busybox --restart=Never --dry -
    run=client -o yaml -- bin/sh -c 'echo test;sleep 100' > 
    yamlfile.yaml(참고: --bin은 마지막에 옵니다. 그러면 yaml 파일이 생성됩니다.)
    

(참고: --bin  은 마지막에 옵니다. 그러면 yaml 파일이 생성됩니다.)

YAML 파일을 만드는 또 다른 좋은 아이디어는wget 명령을 사용하여 인터넷에서 직접 파일을 가져오는 것입니다. 

5. Kubernetes 네임스페이스 간 전환

팁 1에서는 Kubernetes 네임스페이스를 사용하고 모든 명령에 추가할 필요가 없도록 저장하는 몇 가지 유용한 명령을 배웠습니다. 팁을 확장하여 네임스페이스와 kubectl 컨텍스트 간에 더 쉽게 전환할 수 있도록 보겠습니다.

도움이 될 수 있는 몇 가지 도구가 있지만, 컨텍스트와 네임스페이스를 각각 관리하는 데는 kubectx와 kubens를 선호합니다. kubectx와 kubens에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

다음은 kubectx 및 kubens 유틸리티를 위한 Linux 바이너리를 다운로드하는 방법입니다.

  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubens_v0.9.0_linux_x86_64.tar.gz
    

그런 다음 다음 명령을 사용하여 추출합니다.

  • tar -xvf kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • tar -xvf kubens_v0.9.0_linux_x86_64.tar.gz
    

마지막으로 PATH로 이동합니다.

  • sudo mv kubectx /usr/local/bin
  • sudo mv kubens /usr/local/bin

설치가 완료되면 kubens를 사용하여 네임스페이스를 나열하고 네임스페이스 간에 전환하기만 하면 됩니다.

설치가 완료되면 kubens를 사용하여 네임스페이스를 나열하고 네임스페이스 간에 전환하기만 하면 됩니다.

여러 클러스터로 작업할 때 kubectx를 사용하면 컨텍스트 간에 쉽게 전환할 수 있습니다.

여러 클러스터로 작업할 때 kubectx를 사용하면 컨텍스트 간에 쉽게 전환할 수 있습니다.

6. 셸 자동 완성

kubectl이 BASH 및 ZSH에 대한 자동 완성 기능을 제공한다는 것을 알고 계셨나요? 이는 선택적 구성입니다.

Kubernetes의 개념을 이해하고 kubectl에 대한 경험이 어느 정도 있지만 명령을 외우는 데는 서툴다고 가정해 보겠습니다. 먼저 bash-completion을 설치한 다음 kubectl 자동 완성을 활성화합니다. 모든 자세한 내용은 사용자 환경에 맞는 "kubectl 설치 및 설정" 문서 페이지에서 확인할 수 있습니다.

다음은 자동 완성 기능이 있는 구성 옵션입니다.

다음은 자동 완성 기능이 있는 구성 옵션입니다.

이제 탭만 누르면 됩니다!

7. 리소스 사용률 보기

top 명령은 프로세스 및 시스템 리소스를 모니터링하는 데 가장 많이 사용되는 도구 중 하나입니다. 간단한 문자 기반 인터페이스와 중요한 정보에 대한 빠른 액세스를 제공합니다.

노드당 리소스 사용률을 확인할 수 있습니다.

노드당 리소스 사용률을 확인할 수 있습니다.

파드당 리소스 사용률:

파드당 리소스 사용률:

또한 편리한 watch 명령을 사용하면 명령을 반복해서 실행할 필요 없이 원하는 간격으로 명령을 표시할 수 있습니다. 다음 예에서는 5초마다 실행됩니다(기본값은 2초). 

watch kubectl top node -n 5

참고: watch 명령은 사용자 환경에 맞게 다운로드해야 합니다.

Kubernetes 클러스터도 top 명령이 작동하려면 heapster를 실행해야 합니다. 그렇지 않으면 "서버에서 오류 발생(NotFound): 서버에서 요청한 리소스를 찾을 수 없습니다(서비스 가져오기 http:heapster:)"와 같은 오류가 발생합니다.

8. kubectl을 확장하고 아웃풋을 사용하여 자체 명령 생성

kubectl 명령은 apiserver에 저장된 리소스의 요약 보기를 제공합니다. apiserver에 저장된 필드 중 표시되지 않은 필드가 더 많습니다. kubectl get 명령을 원시 리소스 아웃풋과 함께 사용하여 자신만의 시각화 및 명령을 만들 수 있습니다. 

원시 리소스는 다음 명령어로 JSON으로 출력할 수 있습니다.

kubectl get deployments -o json

API 호출을 사용하여 리소스를 직접 호출할 수도 있습니다.

kubectl get --raw=/apis/apps/v1/deployments

출력을 jq와 같은 도구와 결합하여 다양한 시각화를 제공하거나, 아웃풋을 필터링하거나, 고급 자동화를 위해 다른 도구에 아웃풋을 공급할 수도 있습니다. 

예를 들어, 여러 네임스페이스와 배포가 있는 클러스터에서 문제를 찾는 것은 어려울 수 있지만, 아래 예에서는 원시 API를 사용하여 클러스터의 모든 배포를 스캔하고 실패한 복제본이 있는 배포만 필터링합니다.

 

kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] 
| {name: .metadata.name, replicas: .status.replicas, available:
 (.status.availableReplicas // 0), unavailable:
 (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

다음은 위의 명령에 대한 간단한 설명입니다.

  • 먼저 Kubernetes API를 호출하여 모든 배포를 반환합니다. 기본 아웃풋은 JSON입니다. JSON 문서의 구조를 시각화하는 것은 어렵지만, 아래 예와 같이 jq로 파이프하여 더 나은 아이디어를 얻을 수 있습니다.

    kubectl get --raw=/apis/apps/v1/deployments | jq .

  • 응답 문서에는 각 배포에 대한 항목 배열이 있다는 점에 유의하세요. 저희는 이 배열의 상태 필드를 끝까지 조사하고 싶습니다. 아래 명령은 필요한 데이터만 출력하는 방법과 필드를 사용할 수 없는 경우 기본값 0을 출력하는 방법을 보여줍니다.

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] |
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)}'
    
  • 퍼즐의 마지막 조각은 select 함수를 사용하여 사용할 수 없는 복제본이 있는 배포만 표시하는 것입니다.

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | 
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'
    

요약

Kubernetes로 작업할 때 이러한 팁과 요령이 유용하기를 바랍니다. 좋아하는 팁이나 공유하고 싶은 팁이 있으면 알려주세요.

IBM Cloud Kubernetes Service를 확인하고 이 팁과 요령을 활용하는 것을 잊지 마세요.

Kubernetes를 무료로 체험하고 싶으신가요? 비용이나 구성이 필요 없는 새로운 대화형 플랫폼인 IBM® CloudLab을 활용하여 인증과 함께 Kubernetes 튜토리얼을 제공합니다.

작성자

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Marcelo Borges

Lead Cloud Solution Architect

관련 솔루션
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud는 완전 관리형 OpenShift 컨테이너 플랫폼(OCP)입니다.

Red Hat OpenShift 살펴보기
컨테이너 솔루션

컨테이너 솔루션은 보안, 오픈 소스 혁신, 신속한 배포를 통해 컨테이너화된 워크로드를 실행하고 확장합니다.

컨테이너 살펴보기
클라우드 컨설팅 서비스 

IBM Cloud 컨설팅 서비스를 통해 새로운 역량을 개발하고 비즈니스 민첩성을 향상하세요. 하이브리드 클라우드 전략 및 전문가 파트너십을 통해 솔루션을 공동으로 개발하고, 디지털 혁신을 가속화하고, 성능을 최적화하는 방법을 알아보세요.

클라우드 서비스
다음 단계 안내

완전 관리형 Red Hat OpenShift 플랫폼으로 시작하거나, IBM Cloud Kubernetes 에코시스템의 유연성을 살펴보세요. 요구 사항에 맞게 조정되는 확장 가능하고 안전한 솔루션으로 개발 및 배포 프로세스를 가속화하세요.

  1. Red Hat OpenShift 살펴보기
  2. Kubernetes 살펴보기