본문 바로가기

개발하자

kubernetes에서 네임스페이스를 전환하는 방법

반응형

kubernetes에서 네임스페이스를 전환하는 방법

예를 들어, 나는 k8s-app1과 k8s-app2라는 두 개의 네임스페이스를 가지고 있다

아래 명령을 사용하여 특정 네임스페이스의 모든 포드를 나열할 수 있습니다

kubectl get pods -n <namespace>

각 네임스페이스의 개체를 나열하려면 모든 명령에 네임스페이스를 추가해야 합니다. 명시적으로 네임스페이스를 포함하지 않고 특정 네임스페이스와 목록 개체를 설정할 수 있는 방법이 있습니까?




컨텍스트 및 네임스페이스를 전환할 수 있습니다. 만약 당신이 fzf를 설치한다면, 경험이 크게 향상될 것이다.

  • 사용 가능한 컨텍스트 목록 표시(fzf가 설치된 경우 선택 가능한 컨텍스트 메뉴 표시)
  • 현재 셸을 주어진 컨텍스트로 전환(쿠비 셸이 아닌 경우 셸로 전환)
  • 이전 컨텍스트로 되돌리다
  • 주어진 맥락에서 재귀적 껍질을 생성하다
  • 지정된 컨텍스트 및 네임스페이스에 셸 생성
  • 사용 가능한 네임스페이스 목록 표시(fzf가 설치된 경우 선택 가능한 네임스페이스 메뉴 표시)
  • 현재 셸을 지정된 네임스페이스로 전환
  • 이전 네임스페이스로 다시 전환
  • 지정된 네임스페이스에 재귀 셸 생성



다양한 사용 사례를 위한 플러그인이 많이 있습니다.

설치용

kubectl krew install kubens

그런 다음 다음 명령을 실행하면 현재 컨텍스트가 설정됩니다

kubens <namespace> 



OCP/OKD를 위해 Red Hat에서 유지보수하는 것은 다른 많은 것들과 마찬가지로 타이핑을 덜하면서 이 작업을 수행할 것이다.

따라서 Github()에서 다운로드한 후 다음과 같이 입력하여 네임스페이스를 변경합니다(예, OKD뿐만 아니라 표준 k8s 클러스터에서):

oc project <my_ns>

검증 대상:

oc project

프로젝트와 네임스페이스는 완전히 호환되지 않으므로 k8s 클러스터에서는 모든 프로젝트를 다음 기준으로 나열할 수 없습니다(OKD/OCP에서만 작동). 모든 네임스페이스를 나열하려면 다음 명령이 필요합니다:

oc get ns




  • - "brew install kubectx"와 함께 설치할 수 있습니다

  • - 클러스터 내에서 전환하기 위해. "브루 설치 쿠벤"과 함께 설치할 수도 있습니다




다음 단계를 사용하여 네임스페이스를 전환할 수 있었습니다

kubectl config set-context $(kubectl config current-context) --namespace=<namespace>
kubectl config view | grep namespace
kubectl get pods

이것이 내가 테스트한 방법이다

# Create namespaces k8s-app1, k8s-app2 and k8s-app3
master $ kubectl create ns k8s-app1
namespace/k8s-app1 created
master $ kubectl create ns k8s-app2
namespace/k8s-app2 created
master $ kubectl create ns k8s-app3
namespace/k8s-app3 created

# Create Service Account app1-sa in k8s-app1
# Service Account app2-sa in k8s-app2
# Service Account app3-sa in k8s-app3
master $ kubectl create sa app1-sa -n k8s-app1
serviceaccount/app1-sa created
master $ kubectl create sa app2-sa -n k8s-app2
serviceaccount/app2-sa created
master $ kubectl create sa app3-sa -n k8s-app3
serviceaccount/app3-sa created

# Switch namespace
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app1
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl config view | grep namespace
    namespace: k8s-app1
master $ kubectl get sa
NAME      SECRETS   AGE
app1-sa   1         1m
default   1         6m
master $
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app2
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl get sa
NAME      SECRETS   AGE
app2-sa   1         2m
default   1         7m
master $
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app3
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl get sa
NAME      SECRETS   AGE
app3-sa   1         2m
default   1         7m



몇 가지 옵션이 있습니다:

  • kubectl 명령어만 사용하여 네임스페이스 전환::
kubectl config set-context --current --namespace=<namespace>
  • 또는 네임스페이스가 정의된 새 컨텍스트를 만듭니다:
kubectl config set-context gce-dev --user=cluster-admin --namespace=dev
kubectl config use-context gce-dev
  • 또는 추가 기능을 사용하여 다음 명령을 실행하면 컨텍스트가 다음으로 전환됩니다:
$ kubens kube-system 
  • 또는 제가 좋아하는 또 다른 쉬운 대안은 bash alias(linux)를 사용하는 것입니다.
$ alias kubens='kubectl config set-context --current --namespace '
$ alias kubectx='kubectl config use-context '

// Usage
$ kubens kube-system    //Switch to a different namespace
$ kubectx docker        //Switch to separate context



다음 패키지를 사용하면 클러스터 간 전환이 매우 쉽습니다

enter image description here

다음을 사용하여 네임스페이스 간 전환

enter image description here




나는 공식 문서에 대한 언급과 함께 간결하고 요점이 있는 내 대답을 좋아한다:

:

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

:

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

# permanently save the namespace for all subsequent kubectl commands in that context.
kubectl config set-context --current --namespace=ggckad-s2



해결책

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; 요청에 따른 설명

의 약자인 npm 패키지가 있다.

전체 사용법은

k8ss switch --cluster=your_new_cluster --namespace=your_new_namespace

사용자의 경우와 마찬가지로 네임스페이스만 전환하면 구성 없이 명령을 사용할 수 있습니다(이미 에 구성 파일을 넣었듯이).

고급 사용

다른 클러스터 간에 전환해야 하는 경우 홈 디렉토리에 여러 구성 파일을 저장해야 합니다. 이 경우 자세한 내용은 를 참조하십시오.




나는 마음에 들지 않았고 그들이 명령에 bash-collection을 위한 문자를 하나 더 추가하고 있기 때문이다.

그래서 나는 작은 플러그인을 썼다:

# kubectl use prod
Switched to context "prod".

# kubectl use default
Switched to namespace "default".

# kubectl use stage kube-system
Switched to context "stage".
Switched to namespace "kube-system".

관심이 있으면 확인하십시오




.zshrc에서 함수를 만들었습니다

ksns() { kubectl config set-context --current --namespace="$1" }

그럼 내가 전화할게요


반응형