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
Mục lục
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 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 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
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