본문 바로가기

CKA

[k8s] 컨텍스트(context)에 대해 알아보자

728x90
반응형

컨텍스트(context) 한 문장 정의

컨텍스트는 kubectl이 명령을 실행할 때 사용할 "기본 접속 설정(프로필)"이다.

즉, kubectl이 어느 클러스터에, 어떤 인증으로, 기본적으로 어느 네임스페이스에서 작업할지를 한 세트로 묶어두는 것.

왜 이런 게 필요할까?

쿠버네티스를 사용하다보면 보통 이런 일이 생긴다:

  • 로컬 kind 클러스터도 있고 (local)
  • 회사 dev 클러스터도 있고 (dev)
  • 회사 prod 클러스터도 있고 (prod)
  • 같은 클러스터여도 계정이 여러 개일 수 있음 (admin / readonly 등)

근데 매번 명령 칠 때마다

  • "이번엔 어떤 클러스터?"
  • "이번엔 어떤 계정?"
  • "기본 네임스페이스?"
    이걸 다 적어주기 어려움.

그래서 '한 번 고른 기본값 세트'를 만들어 놓고,  kubectl은 그냥 "현재 컨텍스트" 기준으로 동작하게 하는 것.

컨텍스트는 무엇으로 이루어져 있나?

컨텍스트는 보통 3가지를 가리킨다:

1. cluster

  • "어느 쿠버네티스 API 서버로 갈 건지"
  • (예: 로컬 API 서버 / 원격 dev API 서버)

2. user

  • "그 API 서버에 접속할 때 어떤 인증정보를 쓸 건지"
  • (예: 인증서, 토큰, exec 플러그인 등)

3. namespace (선택)

  • "kubectl 명령을 기본적으로 어느 네임스페이스에서 실행할 건지"
  • (예: default, kube-system, cka-practice ...)
컨텍스트는 클러스터로 접속하는 '설정 묶음' 이다.

"현재 컨텍스트"가 의미하는 실제 상황

kubectl get pods를 쳤을 때 무슨 일이 벌어질까?

kubectl은 내부적으로 이렇게 생각한다:

  • 지금 current-context가 뭐지?
  • 그 컨텍스트가 가리키는 cluster는 어디지? (API 서버 주소)
  • 그 컨텍스트가 가리키는 user로 인증해 접속하자.
  • 기본 namespace가 지정되어 있으면 그걸 쓰고, 없으면 default로 하자.
  • 그 조건으로 get pods 실행

즉, kubectl get posd 한 줄을 쳐도

뒤에서는 컨텍스트에 저장된 설정대로 "어디에/어떻게" 요청을 보내는 중.

컨텍스트 관련 필수 명령어

1) 지금 뭐 쓰는 중?

kubectl config current-context

 

2) 컨텍스트 목록(별포 *가 현재)

kubectl config get-contexts

 

3) 현재 컨텍스가 정확히 뭘 가리키는지

kubectl config view --minify

이걸 보면  "아, current-context가 cluster/user/namespace를 이렇게 묶고 있구나"가 보인다.

 

4) 컨텍스트 바꾸기

kubectl config use-context <name>

 

예시) 컨텍스트 설정 수정하기

1) kubectl 명령으로 kubeconfig를 수정

-- 현재 컨텍스트의 기본 namespace를 바꾸기
kubectl config set-context --current --namespace=<네임스페이스명>

-- 특정 컨텍스트 이름을 지정해서 바꾸기
kubectl config set-context <컨텍스트명> --namespace=<네임스페이스명>

 

2) 매번 명령에 namespace를 붙이는 방식 (kubeconfig를 안 건드림)

kubectl get pods -n cka-practice
kubectl apply -f pod.yaml -n cka-practice

 

3) kubeconfig 파일을 직접 수정하는 방식

kubectl 설정은 보통 여기에 있음:

  • ~/.kube/config (기본 kubeconfig)
  • 장점: 구조를 이해하면 "설정 전체를 한 눈에" 볼 수 있음
  • 단점: YAML 들여쓰기/구조 실수하면 kubeconfig가 망가질 수 있음
그래서 보통은 파일 직접 편집보다 kubectl config set-context를 권장한다.

 

4) kubectl config edit로 편집 (kubectl이 파일을 열어줌)

kubectl config edit
  • 기본 데이터($EDITOR)가 열리면서 kubeconfig를 수정할 수 있음.
  • 사실상 "파일 수정"인데, 경로를 헷갈릴 일이 줄어듦.

5) 되돌리는 방법 (중요)

set-context로 바꿨으면, 원복은 이렇게:

kubectl config set-context --current --namespace=default

또는 namespace를 아예 제거하고 싶으면(기본값 default로 돌오가게):

  • kubeconfig에서 해당 namespace: 줄을 삭제
728x90
반응형