컨텍스트(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: 줄을 삭제
'CKA' 카테고리의 다른 글
| [k8s] Secret 정리 (ConfigMap 차이) (0) | 2026.02.20 |
|---|---|
| [k8s] ConfigMap 정리(Env/Volume 주입, 변경 반영, 실습 포인트) (0) | 2026.02.17 |
| [k8s] kubectl 자동완성(Tab completion) 설정하기 : zsh에서 kubectl completion 켜는 방법 (0) | 2026.02.16 |
| [k8s] namespace 구분 (0) | 2026.02.15 |
| [k8s] kind(Kubernetes IN Docker) (0) | 2026.02.13 |