Cách chuyển đổi vùng tên trong kubernetes


83

Giả sử, tôi có hai không gian tên k8s-app1 và k8s-app2

Tôi có thể liệt kê tất cả các nhóm từ không gian tên cụ thể bằng lệnh dưới đây

kubectl get pods -n <namespace>

Chúng ta cần thêm không gian tên vào tất cả các lệnh để liệt kê các đối tượng từ các không gian tên tương ứng. Có cách nào để đặt không gian tên cụ thể và liệt kê các đối tượng mà không bao gồm không gian tên một cách rõ ràng không?


Hi kubectl config set-context --helpcó thể bạn đang tìm kiếm
Suresh Vishnoi

Câu trả lời:


142

Tôi thích câu trả lời của mình ngắn gọn, trọng tâm và có tham chiếu đến tài liệu chính thức:

Trả lời :

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

Từ :

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

6
Một phương pháp hay là xác nhận rằng không gian tên hiện tại đã thay đổi bằng cách thực hiện lệnh saukubectl config view | grep namespace:
tet

41

Bạn có thể sử dụng các lệnh kubectl:

Chỉ chuyển đổi vùng tên:

kubectl config set-context --current --namespace=<namespace>

Tạo bối cảnh mới với không gian tên được xác định:

kubectl config set-context gce-dev --user=cluster-admin --namespace=dev
kubectl config use-context gce-dev

Hoặc sử dụng các addon, như kubectx & kubens , lệnh dưới đây sẽ chuyển ngữ cảnh thành kube-system:

$ kubens kube-system

Một giải pháp thay thế dễ dàng khác mà tôi thích, bạn không muốn cài đặt các công cụ của bên thứ ba là sử dụng bí danh.

$ alias kubens='kubectl config set-context --current --namespace '
$ alias kubectx='kubectl config use-context '

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

làm thế nào để bạn bỏ đặt không gian tên currrent?
stephen

1
kubectl config set-context --current --namespace=""
Diego Mendes

24

Tôi đã có thể chuyển đổi không gian tên bằng các bước dưới đây

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

Đây là cách tôi đã thử nghiệm

# 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

1
Bạn có thể phải sử dụng kubectl config view --minify | grep namespace:để có được không gian tên hiện tại.
dabest1

15

Bạn có thể sử dụng gói sau có tên là kubectx , gói này giúp bạn dễ dàng chuyển đổi giữa các cụm bằng kubectx

nhập mô tả hình ảnh ở đây

và chuyển đổi giữa các không gian tên bằng kubens

nhập mô tả hình ảnh ở đây


11

Tôi không thích kubectxkubens vì chúng đang thêm một ký tự nữa cho lệnh bash-bổ sung vào lệnh kubectl .

Vì vậy, tôi vừa viết plugin sử dụng kubectl nhỏ :

# 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".

Nếu bạn thú vị với nó, hãy xem https://github.com/kvaps/kubectl-use


1
Đây phải là câu trả lời yêu thích của tôi cho đến nay! Mặc dù có một lệnh khá hợp lý nhưng không may là dài để thực hiện việc này mà không cần mở rộng hoặc tạo răng cưa cho các lệnh kubectl, giải pháp này không chỉ ngắn gọn và dễ sử dụng mà nó còn - khá độc đáo - minh họa cách mở rộng kubectl đúng cách bằng một lệnh con đơn giản và dễ hiểu. . Tôi ngả mũ chào bạn, thưa ngài! ;-)
Saustrup

2

Tôi đã tạo một hàm trong .zshrc

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

Sau đó tôi gọi ksns default


-2

Một giải pháp

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; Giải thích theo yêu cầu

Có một gói npm được gọi là k8ssviết tắt của K8S Switching between clusters and namespaces.

Cách sử dụng đầy đủ là

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

Như trong trường hợp của bạn, bạn chỉ cần chuyển đổi không gian tên, vì vậy bạn có thể sử dụng lệnh mà không cần bất kỳ cấu hình nào (vì bạn đã đặt tệp cấu hình trong ~/.kube/config).

Sử dụng nâng cao

Nếu bạn cần chuyển đổi giữa các cụm khác nhau thì bạn cần đặt nhiều tệp cấu hình trong thư mục chính của mình. Trong trường hợp này, bạn có thể vào gói README để tìm hiểu thêm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.