-
Notifications
You must be signed in to change notification settings - Fork 1
Giới thiệu Namespace
Trong phần này chúng tôi sẽ chia sẽ các bạn khái niệm namespace, như bạn biết khi chúng ta muốn chia sẽ cluster cho team deploy lên môi trường dev, staging, testing, production, vvv. Thì sau khi deploy xong thì sẽ rất khó quản lý cũng như gây ra sự nhầm lẫn. Chính vì lý do đó nên Kubernetes cung cấp cho ta khái niệm namespace để quản lý cho hiệu quả.
Nếu bạn nào làm lập trình thì có lẽ khái niệm namespace không xa lạ gì. Mặc định khi bạn cài thì Kubernetes đã tạo sẵng cho bạn một namespace là default
và kube-public
, kube-system
, bạn có thể xác nhận nó thông qua lệnh sau
Như những lý do trên chúng tôi đã nêu trên, thì việc dùng namespace sẽ giúp cho các bạn tiết kiệm chi phí server và dễ quản lý hơn, cũng code base của bạn sẽ trực quan, mặc định kubernetes cung cấp cho 2 namespace
$ kubectl get namespaces
NAME STATUS AGE
default Active 61d
kube-public Active 61d
kube-system Active 61d
với kube-public và kube-system thì nó chứa các service và pod của thành phần chính kubernetes cluster do đó chúng ta không nên can thiệp vào namespace này, còn namespace default là nơi chúng ta sẽ tạo pod và service nhưng chúng tôi khuyên bạn ko bên dùng nó mà hãy tạo mới.
Bạn tạo một tập tin namespace-dev.json với nội dung như sau:
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
"name": "development",
"labels": {
"name": "development"
}
}
}
sau đó bạn chạy lệnh này để tạo một namespace với name là development
kubectl apply -f namespace-dev.json
Bạn sẽ thấy một tin nhắn xác nhận thành công như bên dưới, hoặc bạn cũng có thể chạy lại lệnh giống như bên trên đễ xác nhận lại:
namespace/development created
$ kubectl get namespaces --show-labels
NAME STATUS AGE LABELS
default Active 61d <none>
development Active 6m13s name=development
kube-public Active 61d <none>
kube-system Active 61d <none>
Làm tương tự như cách trên bạn cũng có thể tạo cho namespace testing
hay staging
Trước khi tạo môt pod hoặc một deployment bạn hãy kiểm tra xem bạn đang kết nối tới cluster nào (curent context):
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.10.64:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: gsviec-traning
current-context: gsviec-traning
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
$ kubectl config current-context
gsviec-traning
Hiện tại chúng tôi kết nối tới cluster là kubernetes, kế đến bạn cần phải định nghĩa nội dung(context) cho tương ứng mỗi namespace, bạn cần chú ý tới 2 giá trị sau cluster và user
thien at thien in ~/github/kubernetes on next-kube*
$ kubectl config set-context dev --namespace=development --cluster=kubernetes --user=kubernetes-admin
Context "dev" created.
thien at thien in ~/github/kubernetes on next-kube*
$ kubectl config set-context testing --namespace=testing --cluster=kubernetes --user=kubernetes-admin
Context "testing" created.
thien at thien in ~/github/kubernetes on next-kube*
$
Vậy là bạn đã tạo xong 2 môi trường dev và testing trên cùng một cluster thông qua namespace, ví dụ bạn muốn deploy lên môi trường dev nghĩa là trên namespace development thì chạy lệnh sau:
$ kubectl config use-context dev
Switched to context "dev".
ngược lại nếu bạn muốn chạy cho môi trường testing thì chạy lệnh sau:
$ kubectl config use-context testing
Switched to context "testing".
Để xác nhận mọi thứ đều làm việc ok, thì chúng tối tạo một pod với nội dung như sau(test-pod.yaml):
kind: Pod
apiVersion: v1
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: gcr.io/google_containers/busybox:1.24
command:
- "/bin/sh"
args:
- "-c"
- "echo Gsviec awesome && tail -f /dev/null"
restartPolicy: "Never"
sau đó deploy lại bằng lệnh sau
kubectl apply -f test-pod.yaml
Bạn có thể mở trang quản lý kubernetes lên để xem pod mà bạn đã tạo, trong trường hợp của tôi là đang ở namespace là testing
Trong phần này chúng tôi đã giới thiệu các bạn khái niệm căn bản về namespace của kubernetes huy vọng bạn thấy hữu ích.