Thao tác với Kubectl đơn giản hơn với Alias

Tram Ho

Giới thiệu

Hello mọi người. Trong quá trình làm việc với Kubernetes chắc chắn chúng ta sẽ phải thao tác rất nhiều với kubectl.

Mọi việc sẽ chẳng có gì đáng nói nếu chúng ta chỉ sử dụng để tạo và quản lý tài nguyên đơn giản. Chỉ khi có issue và chúng ta cần troubleshot, lúc đó mới cần thực hiện hàng loạt các lệnh kiểm tra, xem logs, debug.. thì tuần suất sử dụng lệnh mới thực sự cao. Lúc này việc sử dụng kubectl thế nào cho hiệu quả và “cool ngầu” sẽ trở nên cần thiết.

Trong bài viết ngày hôm nay mình sẽ chia sẻ một vài kinh nghiệm cá nhân của mình về cách tùy biến khi sử dụng kubectl để quản lý tài nguyên trên Kubernetes một cách hiệu quả nhé!

Những điều bạn NÊN làm

Nên chỉ làm việc với một cluster một lúc

Cấu hình của kubectl cho phép chúng ta quản lý và thao tác với multi-cluster khá đơn giản. Mình có thể switch giữa các context để chọn các cluster để xử lý.

Tuy nhiên tính năng này lại cũng có những hạn chế hay rủi ro, đó là bạn cần phải cực kỳ tập trung khi thực hiện. Nếu không có thể đang gõ đúng lệnh nhưng lại nhầm cluster đó. Và “nếu điều đó xảy ra” thì đúng là thảm họa.

Nên nhớ rằng khi chúng ta switch context thì ngoài kết quả chỉ hiển thị ngay đó, còn qua một thời gian thao tác bạn sẽ phải tự nhớ mình đang làm việc với context nào hoặc phải check lại trước khi thao tác tiêp bằng lệnh get current context.

Có một giải pháp workaround cho vấn đề này là tạo nhiều user trên client tương ứng với các cluster khác nhau, như vậy khi ta cần thao tác với cluster nào thì sẽ switch sang user đó. Tên của user ở dấu nhắc sẽ giúp chúng ta không bị nhầm lần thao tác giữa các cluster khác nhau.

Ý tương này như sau:
image.png

  • Khi cần thao tác với cluster của project1 (tên là project1-cluster) thì sẽ switch sang user có tên tương ứng là “project1-cluster”. Ở môi trường user này sẽ chỉ cấu hình kubeconfig kết nối tới cluster “project1-cluster”
  • Khi cần thao tác với cluster của project2 (tên là project2-cluster) thì sẽ switch sang user có tên tương ứng là “project2-cluster”. Ở môi trường user này sẽ chỉ cấu hình kubeconfig kết nối tới cluster “project2-cluster”
  • Khi switch sang user nào thì tên user đó luôn gợi cho bạn về cluster bạn đang thao tác và sẽ không bị gõ lệnh nhầm server nữa

Cấu hình sẵn các namespace cần làm việc

Tương tự như với cluster, cấu hình của kubectl cho phép chúng ta định nghĩa tới namespace cụ thể cho một context. Và khi bạn đang cần (hoặc là đang chỉ được phép) thao tác ở một namespace cụ thể nào đó, ví dụ như “staging” chằng hạn.
Lúc đó thay vì mỗi câu lệnh bạn phải thêm “-n staging” thì bạn có thể set luôn namespace trong context và khi gõ lệnh sẽ không cần chỉ định namespace nữa (trừ khi bạn muốn thao tác với namespace khác namespace khai báo trong context”.

Khi đã áp dụng điều 1 bên trên, tức là với mỗi file kubeconfig sẽ chỉ khai báo tới một cluster duy nhất thì ta sẽ áp dụng tiếp là tạo ra các context ứng với các namespace tương ứng của cluster đó.

Ý tưởng như sau:
image.png

Khi đó khi ta cần ưu tiên làm việc với namespace nào hơn thì ta sẽ set sang context tương ứng với namespace đó để đỡ phải thêm tham số “-n namespace” trong câu lệnh kubectl.

Ví dụ cụ thể, mình có 1 cluster có 2 namespace mình thường xuyên làm việc là monitoring và production. Thì mình đã tạo 2 context tương ứng:

Khi cần làm việc chính với namespace monitoring thì sẽ dùng context “monitoring”:

Khi cần làm việc chính với namespace production thì sẽ dùng context “production”:

Cài đặt autocomplete cho kubectl

Nếu bạn có thể gõ lệnh kubectl cả ngày mà không dùng tới autocomplete thì bạn quả lý một tay to thực thụ. Nhưng bù lại bạn sẽ rất nhớ các keyword.

Tuy nhiên lời khuyên của mình là NÊN, CỰC KỲ NÊN cấu hình autocomplete, vừa tiết kiệm thời gian vừa giảm sai số khi gõ lệnh.
Cấu hình autocomplete thì đơn giản có mấy bước ntn thôi:

Dùng thêm alias để tăng tốc độ gõ lệnh và nhìn có vẻ “pro-vip” hơn

Khi bạn đã có cấu hình context + autocomplete thì tốc độ gõ của bạn đã được cải thiện đáng kể do không phải gõ namespace và phần còn lại thì được autocomplete rồi.

Tuy nhiên dùng thêm alias để gọi nhanh những lệnh thường dùng sẽ còn tăng tốc gõ lệnh của bạn lên gấp vài lần nữa. Nhưng trước hết chúng ta hãy điểm qua các nhóm lệnh thường dùng với kubectl trước nhé!

Nhóm tài nguyên trên kubernetes

Các bạn có thể xem thông tin các loại tài nguyên trên k8s bằng lệnh kubectl api-resources, kết quả sẽ kiểu như sau (đã lược bớt output):

Các resource thông thường chúng ta sẽ làm việc cùng gồm các loại sau:
image.png

Quản lý tài nguyên với kubectl

Khi thực hiện các thao tác quản lý tài nguyên với kubectl ta thường sử dụng theo cú pháp sau:

kubectl [action] [resource-type] [resource-name] [option]
Mình liệt kê một số action và option cơ bản thường dùng (chứ ko phải tất cả) ở đây:
image.png

Kết hợp giữa Action + Resource-Type + Resource-Name + Option ta sẽ có được một lệnh.
Ví dụ:

Cách gán alias để gọi lệnh nhanh và dễ nhớ

Ta sẽ thực hiện các quy ước alias cho action và resource-type, còn các tham số option/namespace ta sẽ để dạng biến môi trường để dễ dàng gán thêm vào câu lệnh:

Quy ước:
image.png

Từ quy tắc trên ta có thể thực hiện các alias để gọi lệnh nhanh như sau:
image.png

Khi cần thực hiện:

kubectl get pods ==> Chỉ cần gọi: kgp

kubectl describe node worker-1 ==> Chỉ cần gọi: kin worker-1

kubectl get pods -owide --sort-by=metadata.creationTimestamp ==> Chỉ cần gọi: kgp $ow $sortby_age.

Trong khi gõ phần $sortby_age bạn chỉ cần gõ 1-2 ký tự rồi có thể ấn tab để complete tên biến chứ cũng không phải gõ cả đầy đủ tên biến.

Theo luồng ý tưởng trên các bạn có thể add thêm nội dung alias như sau:

Tổng kết

Việc mới sử dụng alias sẽ cần mất thời gian để làm quen. Khi đã quen rồi chắc chắn gõ lệnh sẽ rất mượt

Các bạn thấy nội dung hữu ích thì cho mình 1 nút upvote vào bài viết để lấy động lực ra biết tiếp nhé!

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo