Giới thiệu namespace trong Kubernetes

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à defaultkube-public, kube-system, bạn có thể xác nhận nó thông qua lệnh sau

Tại sao lại phải dùng namespace

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.

Tạo một namespace 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
development Active 6m13s name=development
kube-public Active 61d
kube-system Active 61d

Làm tương tự như cách trên bạn cũng có thể tạo cho namespace testing hay staging

Tạo một deployment với namespace tương ứng

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):

https://gist.github.com/duythien/e4447611968f843f6e444f061745f8bb

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 clusteruser

thien at thien in ~/github/kubernetes on next-kube*
$ kubectl config set-context dev --namespace=development --cluster=kubernetes --user=kubernetes-admin
Context development 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

Kiểm tra lại

Để 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

dashboard kube

Kết luận

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.  link gốc bạn xem ở đây

Leave a Reply

Your email address will not be published.