리눅스에 kubectl 설치 및 설정

리눅스에 kubectl 설치 및 설정

시작하기 전에

클러스터와 마이너 버전 차이가 1 이내인 kubectl 버전을 사용해야 한다. 예를 들어, v1.37 클라이언트는 v1.36, v1.37, 그리고 v1.38 컨트롤 플레인과 통신할 수 있다. 호환되는 최신 버전의 kubectl을 사용하면 예기치 않은 문제를 방지하는 데 도움이 된다.

리눅스에 kubectl 설치

다음과 같은 방법으로 리눅스에 kubectl을 설치할 수 있다.

리눅스에서 curl을 사용하여 kubectl 바이너리 설치

  1. 다음 명령으로 최신 릴리스를 다운로드한다.

    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
       
    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"
       

    참고:

    특정 버전을 다운로드하려면 명령에서 $(curl -L -s https://dl.k8s.io/release/stable.txt) 부분을 해당 버전으로 바꾼다.

    예를 들어, 리눅스 x86-64에서 1.37.0 버전을 다운로드하려면 다음을 입력한다.

    curl -LO https://dl.k8s.io/release/v1.37.0/bin/linux/amd64/kubectl
    

    리눅스 ARM64의 경우 다음을 입력한다.

    curl -LO https://dl.k8s.io/release/v1.37.0/bin/linux/arm64/kubectl
    
  2. 바이너리 검증(선택 사항)

    kubectl 체크섬(checksum) 파일을 다운로드한다.

    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
       
    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl.sha256"
       

    kubectl 바이너리를 체크섬 파일과 대조하여 검증한다.

    echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check
    

    검증에 성공하면 다음과 같이 출력된다.

    kubectl: OK
    

    검증에 실패하면 sha256이 0이 아닌 상태로 종료되며 다음과 유사한 결과를 출력한다.

    kubectl: FAILED
    sha256sum: WARNING: 1 computed checksum did NOT match
    

    참고:

    동일한 버전의 바이너리와 체크섬을 다운로드한다.
  3. kubectl 설치

    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    

    참고:

    대상 시스템에 root 접근 권한이 없더라도 ~/.local/bin 디렉터리에 kubectl을 설치할 수 있다.

    chmod +x kubectl
    mkdir -p ~/.local/bin
    mv ./kubectl ~/.local/bin/kubectl
    # 그런 다음 ~/.local/bin을 $PATH의 앞부분 또는 뒷부분에 추가
    
  4. 설치한 버전이 최신인지 확인한다.

    kubectl version --client
    

    또는 다음 명령으로 버전 정보를 자세히 확인한다.

    kubectl version --client --output=yaml
    

기본 패키지 관리 도구를 사용하여 설치

  1. apt 패키지 색인을 업데이트하고 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지들을 설치한다.

    sudo apt-get update
    # apt-transport-https는 더미 패키지일 수 있다. 이 경우, 해당 패키지는 생략할 수 있다.
    sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
    
  2. 쿠버네티스 패키지 리포지터리용 공개 서명 키를 다운로드한다. 동일한 서명 키는 모든 리포지터리에 사용되므로 URL에 있는 버전은 무시해도 된다.

    # `/etc/apt/keyrings` 디렉터리가 없다면 curl 명령을 실행하기 전에 생성해야 한다. 아래 참고를 확인한다.
    # sudo mkdir -p -m 755 /etc/apt/keyrings
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.37/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 특권이 없는 APT 프로그램이 이 키링을 읽을 수 있도록 한다.
    

참고:

데비안 12 및 우분투 22.04 이전 릴리스에서는 /etc/apt/keyrings 디렉터리가 기본적으로 존재하지 않으므로 curl 명령을 실행하기 전에 생성해야 한다.
  1. 쿠버네티스 apt 리포지터리를 추가한다. v1.37과 다른 쿠버네티스 버전을 사용하려면 아래 명령에서 v1.37을 원하는 마이너 버전으로 바꾼다.

    # /etc/apt/sources.list.d/kubernetes.list의 기존 설정을 모두 덮어쓴다.
    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.37/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list   # command-not-found 같은 도구가 올바르게 작동하도록 한다.
    

참고:

다른 마이너 릴리스의 kubectl로 업그레이드하려면 apt-get update와 apt-get upgrade를 실행하기 전에 /etc/apt/sources.list.d/kubernetes.list의 버전을 올려야 한다. 이 절차에 대한 자세한 내용은 쿠버네티스 패키지 리포지터리 변경하기에서 확인할 수 있다.
  1. apt 패키지 색인을 업데이트하고 kubectl을 설치한다.

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  1. 쿠버네티스 yum 리포지터리를 추가한다. 쿠버네티스 버전이 v1.37과 다르다면 아래 명령의 v1.37을 원하는 마이너 버전으로 바꾼다.

    # /etc/yum.repos.d/kubernetes.repo의 기존 설정을 모두 덮어쓴다.
    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://pkgs.k8s.io/core:/stable:/v1.37/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.37/rpm/repodata/repomd.xml.key
    EOF
    

참고:

다른 마이너 릴리스의 kubectl로 업그레이드하려면 dnf update를 실행하기 전에 /etc/yum.repos.d/kubernetes.repo의 버전을 올려야 한다. 이 절차에 대한 자세한 내용은 쿠버네티스 패키지 리포지터리 변경하기에서 확인할 수 있다.
  1. dnf를 사용하여 kubectl을 설치한다.

    sudo dnf install -y kubectl
    
  1. 쿠버네티스 zypper 리포지터리를 추가한다. 쿠버네티스 버전이 v1.37과 다르다면 아래 명령의 v1.37을 원하는 마이너 버전으로 바꾼다.

    # /etc/zypp/repos.d/kubernetes.repo의 기존 설정을 모두 덮어쓴다.
    cat <<EOF | sudo tee /etc/zypp/repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://pkgs.k8s.io/core:/stable:/v1.37/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.37/rpm/repodata/repomd.xml.key
    EOF
    

참고:

다른 마이너 릴리스의 kubectl로 업그레이드하려면 /etc/zypp/repos.d/kubernetes.repo의 버전을 올린 뒤 zypper update를 실행해야 한다. 이 절차에 대한 자세한 내용은 쿠버네티스 패키지 리포지터리 변경하기에서 확인할 수 있다.
  1. zypper를 업데이트하고 새 리포지터리 추가를 확인한다.

    sudo zypper update
    

    다음 메시지가 나타나면 't' 또는 'a'를 누른다.

    New repository or package signing key received:
    
    Repository:       Kubernetes
    Key Fingerprint:  1111 2222 3333 4444 5555 6666 7777 8888 9999 AAAA
    Key Name:         isv:kubernetes OBS Project <isv:kubernetes@build.opensuse.org>
    Key Algorithm:    RSA 2048
    Key Created:      Thu 25 Aug 2022 01:21:11 PM -03
    Key Expires:      Sat 02 Nov 2024 01:21:11 PM -03 (expires in 85 days)
    Rpm Name:         gpg-pubkey-9a296436-6307a177
    
    Note: Signing data enables the recipient to verify that no modifications occurred after the data
    were signed. Accepting data with no, wrong or unknown signature can lead to a corrupted system
    and in extreme cases even to a system compromise.
    
    Note: A GPG pubkey is clearly identified by its fingerprint. Do not rely on the key's name. If
    you are not sure whether the presented key is authentic, ask the repository provider or check
    their web site. Many providers maintain a web page showing the fingerprints of the GPG keys they
    are using.
    
    Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a
    
  2. zypper를 사용하여 kubectl을 설치한다.

    sudo zypper install -y kubectl
    

다른 패키지 관리 도구를 사용하여 설치

우분투 또는 다른 리눅스 배포판에서 snap 패키지 관리자를 지원한다면 kubectl을 snap 애플리케이션으로 설치할 수 있다.

snap install kubectl --classic
kubectl version --client

리눅스에서 Homebrew 패키지 관리자를 사용한다면, kubectl을 설치할 수 있다.

brew install kubectl
kubectl version --client

kubectl 구성 확인

kubectl이 쿠버네티스 클러스터를 찾고 접근하려면 kubeconfig 파일이 필요하다. 이 파일은 클러스터를 kube-up.sh로 생성하거나 Minikube 클러스터를 성공적으로 배포하면 자동으로 생성된다. 기본적으로 kubectl 구성은 ~/.kube/config에 있다.

클러스터 상태를 조회하여 kubectl이 올바르게 구성되었는지 확인한다.

kubectl cluster-info

URL 응답이 나타나면 kubectl이 클러스터에 접근하도록 올바르게 구성된 것이다.

다음과 유사한 메시지가 나타나면 kubectl 구성이 올바르지 않거나 쿠버네티스 클러스터에 연결할 수 없는 것이다.

The connection to the server <server-name:port> was refused - did you specify the right host or port?

예를 들어, 노트북(로컬)에서 쿠버네티스 클러스터를 실행하려면 먼저 Minikube와 같은 도구를 설치한 다음, 위에 언급된 명령어를 다시 실행해야 한다.

kubectl cluster-info가 URL 응답을 반환했지만 클러스터에 접근할 수 없다면 다음 명령으로 구성이 올바른지 확인한다.

kubectl cluster-info dump

'No Auth Provider Found' 오류 메시지 문제 해결

쿠버네티스 1.26에서 다음 클라우드 제공자의 관리형 쿠버네티스 서비스에 대한 내장 인증을 제거했다. 각 제공자는 클라우드별 인증을 위한 kubectl 플러그인을 출시했다. 사용 방법은 다음 제공자 문서를 참고한다.

같은 오류 메시지가 표시되더라도 이 변경과 관련 없는 다른 원인이 있을 수 있다.

선택적 kubectl 구성 및 플러그인

셸 자동 완성 활성화

kubectl은 Bash, Zsh, Fish, PowerShell의 자동 완성을 지원하므로 입력량을 크게 줄일 수 있다.

다음은 Bash, Fish, Zsh에서 자동 완성을 설정하는 절차이다.

소개

Bash의 kubectl 자동 완성 스크립트는 kubectl completion bash 명령으로 생성할 수 있다. 셸에서 자동 완성 스크립트를 소싱(sourcing)하면 kubectl 자동 완성 기능이 활성화된다.

그러나, 자동 완성 스크립트는 bash-completion에 의존하고 있으며, 이 소프트웨어를 먼저 설치해야 한다(type _init_completion 을 실행하여 bash-completion이 이미 설치되어 있는지 확인할 수 있음).

bash-completion 설치

bash-completion은 많은 패키지 관리자에 의해 제공된다(여기 참고). apt-get install bash-completion 또는 yum install bash-completion 등으로 설치할 수 있다.

위의 명령은 bash-completion의 기본 스크립트인 /usr/share/bash-completion/bash_completion 을 생성한다. 패키지 관리자에 따라, ~/.bashrc 파일에서 이 파일을 수동으로 소스(source)해야 한다.

확인하려면, 셸을 다시 로드하고 type _init_completion 을 실행한다. 명령이 성공하면, 이미 설정된 상태이고, 그렇지 않으면 ~/.bashrc 파일에 다음을 추가한다.

source /usr/share/bash-completion/bash_completion

셸을 다시 로드하고 type _init_completion 을 입력하여 bash-completion이 올바르게 설치되었는지 확인한다.

kubectl 자동 완성 활성화

Bash

이제 kubectl 자동 완성 스크립트가 모든 셸 세션에서 제공되도록 해야 한다. 이를 수행할 수 있는 두 가지 방법이 있다.


echo 'source <(kubectl completion bash)' >>~/.bashrc

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null

kubectl에 대한 앨리어스(alias)가 있는 경우, 해당 앨리어스로 작업하도록 셸 자동 완성을 확장할 수 있다.

echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc

참고:

bash-completion은 /etc/bash_completion.d 에 있는 모든 자동 완성 스크립트를 소싱한다.

두 방법 모두 동일하다. 셸을 다시 로드하면, kubectl 자동 완성 기능이 작동할 것이다. 셸의 현재 세션에서 bash 자동 완성을 활성화하려면 exec bash를 실행한다.

exec bash

Fish용 kubectl 자동 완성 스크립트는 kubectl completion fish 명령으로 생성할 수 있다. 셸에서 자동 완성 스크립트를 소싱하면 kubectl 자동 완성 기능이 활성화된다.

모든 셸 세션에서 사용하려면, ~/.config/fish/config.fish 파일에 다음을 추가한다.

kubectl completion fish | source

셸을 다시 로드하면, kubectl 자동 완성 기능이 작동할 것이다.

Zsh용 kubectl 자동 완성 스크립트는 kubectl completion zsh 명령으로 생성할 수 있다. 셸에서 자동 완성 스크립트를 소싱하면 kubectl 자동 완성 기능이 활성화된다.

모든 셸 세션에서 사용하려면, ~/.zshrc 파일에 다음을 추가한다.

source <(kubectl completion zsh)

kubectl에 대한 앨리어스가 있는 경우, kubectl 자동완성이 자동으로 동작할 것이다.

셸을 다시 로드하면, kubectl 자동 완성 기능이 작동할 것이다.

2: command not found: compdef 와 같은 오류가 발생하면, ~/.zshrc 파일의 시작 부분에 다음을 추가한다.

autoload -Uz compinit
compinit

kuberc 구성

자세한 내용은 kuberc를 참조한다.

kubectl convert 플러그인 설치

이것은 쿠버네티스 커맨드 라인 도구인 kubectl의 플러그인으로서, 특정 버전의 쿠버네티스 API로 작성된 매니페스트를 다른 버전으로 변환할 수 있도록 한다. 이것은 매니페스트를 최신 쿠버네티스 릴리스의 사용 중단되지 않은 API로 마이그레이션하는 데 특히 유용하다. 더 많은 정보는 다음의 사용 중단되지 않은 API로 마이그레이션을 참고한다.

  1. 다음 명령으로 최신 릴리스를 다운로드한다.

    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert"
       
    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl-convert"
       
  2. 바이너리 검증(선택 사항)

    kubectl-convert 체크섬 파일을 다운로드한다.

    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert.sha256"
       
    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl-convert.sha256"
       

    kubectl-convert 바이너리를 체크섬 파일과 대조하여 검증한다.

    echo "$(cat kubectl-convert.sha256) kubectl-convert" | sha256sum --check
    

    검증에 성공하면 다음과 같이 출력된다.

    kubectl-convert: OK
    

    검증에 실패하면 sha256이 0이 아닌 상태로 종료되며 다음과 유사한 결과를 출력한다.

    kubectl-convert: FAILED
    sha256sum: WARNING: 1 computed checksum did NOT match
    

    참고:

    동일한 버전의 바이너리와 체크섬을 다운로드한다.
  3. kubectl-convert 설치

    sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert
    
  4. 플러그인이 정상적으로 설치되었는지 확인한다.

    kubectl convert --help
    

    오류가 표시되지 않으면 플러그인이 정상적으로 설치된 것이다.

  5. 플러그인을 설치한 후 설치 파일을 정리한다.

    rm kubectl-convert kubectl-convert.sha256
    

다음 내용