혹시 kubectl에서 대화형 삭제를 기본적으로 활성화할 수 있었으면 좋겠다고 생각해 보셨나요? 아니면 수백 개의 별칭을 일일이 생성하지 않고도 사용자 지정 별칭을 정의하고 싶으셨나요? 더 이상 찾아 헤매지 마세요. SIG-CLI는 kubectl에 사용자 선호도 기능을 추가하기 위해 열심히 노력해 왔으며, Kubernetes v1.34 릴리스의 일환으로 이 기능이 베타 단계에 도달했음을 발표하게 되어 기쁩니다.
작동 방식
이 기능에 대한 자세한 설명은 공식 문서에서 확인할 수 있지만, 이 블로그 게시물에서는 이 글의 시작 부분에서 제기된 두 가지 질문에 모두 답변할 것입니다.
자세히 알아보기 전에 사용자 선호도 파일의 모양과 배치 위치를 간략하게 살펴보겠습니다. 기본적으로 kubectl은 기본 kubeconfig 디렉토리인 $HOME/.kube에서 kuberc 파일을 찾습니다. 또는 --kuberc 옵션이나 KUBERC 환경 변수를 사용하여 이 위치를 지정할 수 있습니다.
모든 Kubernetes 매니페스트와 마찬가지로 kuberc 파일은 apiVersion과 kind로 시작합니다.
apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
# 사용자 선호도 설정이 여기에 이어집니다
기본값
kubectl 명령어 옵션의 기본값을 설정하는 것부터 시작하겠습니다. 우리의 목표는 항상 대화형 삭제를 사용하는 것입니다. 즉, kubectl delete의 --interactive 옵션을 항상 true로 설정하려고 합니다. 이는 kuberc 파일에 다음을 추가하여 달성할 수 있습니다.
defaults:
- command: delete
options:
- name: interactive
default: "true"
위 예시에서는 사용자가 kubectl 옵션에 대한 기본값을 정의할 수 있는 defaults 섹션을 소개합니다. 이 경우 kubectl delete의 대화형 옵션을 기본적으로 true로 설정하고 있습니다. 이 기본값은 사용자가 kubectl delete --interactive=false와 같이 다른 값을 명시적으로 제공하는 경우 재정의될 수 있으며, 이 경우 명시적 옵션이 우선합니다.
SIG-CLI에서 강력히 권장하는 또 다른 기본값은 서버 측 적용(Server-Side Apply)을 사용하는 것입니다. 이를 위해 선호도 설정에 다음 스니펫을 추가할 수 있습니다.
# defaults 섹션 계속
- command: apply
options:
- name: server-side
default: "true"
별칭
별칭을 정의하는 기능은 명령어를 입력할 때 귀중한 시간을 절약하게 해줍니다. 아마도 kubectl에 대한 별칭을 정의해 두셨을 겁니다. 7글자를 입력하는 것이 k만 누르는 것보다 확실히 길기 때문이죠.
이러한 이유로, 기본값 설정과 더불어 사용자 선호도를 구현하기로 결정했을 때 별칭 정의 기능은 필수적이었습니다. 내장 명령어 중 하나에 대한 별칭을 정의하려면 kuberc 파일에 다음을 추가하세요.
aliases:
- name: gns
command: get
prependArgs:
- namespace
options:
- name: output
default: json
위에 설명된 내용이 많으므로 하나씩 살펴보겠습니다. 먼저 새로운 섹션인 aliases를 소개합니다. 여기서는 get 명령어에 매핑되는 새로운 별칭 gns를 정의합니다. 다음으로, 명령어 이름 바로 뒤에 삽입될 인수(namespace 리소스)를 정의합니다. 추가적으로, 이 별칭에 대해 --output=json 옵션을 설정합니다. options 블록의 구조는 defaults 섹션의 구조와 동일합니다.
인수를 앞에 추가하는 메커니즘을 도입한 것을 눈치채셨을 겁니다. 인수를 뒤에 추가하는(즉, 사용자 제공 인수 뒤에 명령어 끝에 추가하는) 보완 설정이 있는지 궁금하실 수 있습니다. 이는 아래에 제시된 appendArgs 블록을 통해 달성할 수 있습니다.
# aliases 섹션 계속
- name: runx
command: run
options:
- name: image
default: busybox
- name: namespace
default: test-ns
appendArgs:
- --
- custom-arg
여기서는 또 다른 별칭인 runx를 소개합니다. 이 별칭은 미리 정의된 값으로 --image 및 --namespace 옵션을 전달하고, 호출 끝에 --와 custom-arg를 추가하여 kubectl run 명령어를 호출합니다.
디버깅
저희는 kubectl 사용자 선호도가 사용자에게 새로운 가능성을 열어주기를 바랍니다. 의심스러운 점이 있다면 언제든지 더 높은 상세도(verbosity)로 kubectl을 실행해 보세요. -v=5로 설정하면 이 기능에서 가능한 모든 디버깅 정보를 얻을 수 있으며, 이는 문제를 보고할 때 매우 중요할 것입니다.
더 자세히 알아보려면 공식 문서와 실제 제안서를 읽어보시길 권합니다.
참여하기
kubectl 사용자 선호도 기능이 베타 단계에 도달했으며, 여러분의 피드백에 매우 관심이 많습니다. 이 기능에 대해 무엇이 마음에 드는지, 어떤 문제를 해결해 주었으면 하는지 듣고 싶습니다. 언제든지 SIG-CLI 슬랙 채널에 참여하거나, kubectl 저장소에 이슈를 열어주세요. 격주 수요일에 열리는 커뮤니티 미팅에 참여하여 여러분의 이야기를 공유해 주셔도 좋습니다.