Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Nếu bạn làm việc với Kubernetes thì kubectl có lẽ là một trong những tiện ích bạn sử dụng nhiều nhất. Và bất cứ khi nào bạn dành nhiều thời gian làm việc với một công cụ cụ thể, bạn nên nghiên cứu kỹ về nó và học cách sử dụng nó một cách hiệu quả.

Đội Kubernetes aaS từ Mail.ru đã dịch một bài viết của Daniel Weibel, trong đó bạn sẽ tìm thấy các mẹo và thủ thuật để làm việc hiệu quả với kubectl. Nó cũng sẽ giúp bạn hiểu sâu hơn về Kubernetes.

Theo tác giả, mục tiêu của bài viết là giúp công việc hàng ngày của bạn với Kubernetes không chỉ hiệu quả hơn mà còn thú vị hơn!

Giới thiệu: kubectl là gì

Trước khi có thể học cách sử dụng kubectl hiệu quả hơn, bạn cần hiểu cơ bản về nó là gì và cách thức hoạt động của nó.

Từ góc độ người dùng, kubectl là bảng điều khiển cho phép bạn thực hiện các hoạt động Kubernetes.

Về mặt kỹ thuật, kubectl là ứng dụng khách API Kubernetes.

API Kubernetes là API HTTP REST. API này là giao diện người dùng Kubernetes thực sự, qua đó nó được kiểm soát hoàn toàn. Điều này có nghĩa là mọi hoạt động Kubernetes đều được hiển thị dưới dạng điểm cuối API và có thể được thực hiện bằng yêu cầu HTTP tới điểm cuối đó.

Do đó, công việc chính của kubectl là thực hiện các yêu cầu HTTP tới Kubernetes API:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Kubernetes là một hệ thống hoàn toàn hướng đến tài nguyên. Điều này có nghĩa là nó duy trì trạng thái bên trong của tài nguyên và tất cả hoạt động của Kubernetes đều là hoạt động CRUD.

Bạn có toàn quyền kiểm soát Kubernetes bằng cách quản lý các tài nguyên này và Kubernetes sẽ tìm ra những việc cần làm dựa trên trạng thái hiện tại của tài nguyên. Vì lý do này, tham chiếu API Kubernetes được tổ chức dưới dạng danh sách các loại tài nguyên cùng với các hoạt động liên quan của chúng.

Hãy xem một ví dụ.

Giả sử bạn muốn tạo một tài nguyên ReplicaSet. Để làm điều này, bạn mô tả ReplicaSet trong một file theo tên replicaset.yaml, sau đó chạy lệnh:

$ kubectl create -f replicaset.yaml

Điều này sẽ tạo ra một tài nguyên ReplicaSet. Nhưng điều gì xảy ra đằng sau hậu trường?

Kubernetes có hoạt động tạo ReplicaSet. Giống như bất kỳ hoạt động nào khác, nó được hiển thị dưới dạng điểm cuối API. Điểm cuối API cụ thể cho hoạt động này trông như thế này:

POST /apis/apps/v1/namespaces/{namespace}/replicasets

Bạn có thể tìm thấy điểm cuối API cho tất cả hoạt động Kubernetes tại Tham chiếu API (bao gồm điểm cuối ở trên). Để thực hiện yêu cầu thực tế tới điểm cuối, trước tiên bạn phải thêm URL máy chủ API vào đường dẫn điểm cuối được liệt kê trong tham chiếu API.

Do đó, khi bạn thực thi lệnh trên, kubectl sẽ gửi yêu cầu HTTP POST đến điểm cuối API ở trên. Định nghĩa ReplicaSet bạn đã cung cấp trong tệp replicaset.yaml, được gửi trong phần thân của yêu cầu.

Đây là cách kubectl hoạt động cho tất cả các lệnh tương tác với cụm Kubernetes. Trong tất cả các trường hợp này, kubectl chỉ thực hiện các yêu cầu HTTP tới các điểm cuối API Kubernetes thích hợp.

Xin lưu ý rằng bạn hoàn toàn có thể quản lý Kubernetes bằng tiện ích như curlbằng cách gửi thủ công các yêu cầu HTTP tới API Kubernetes. Kubectl chỉ đơn giản là giúp việc sử dụng API Kubernetes dễ dàng hơn.

Đây là kiến ​​thức cơ bản về kubectl là gì và cách hoạt động của nó. Nhưng có một điều khác về API Kubernetes mà mọi người dùng kubectl nên biết. Chúng ta hãy nhìn nhanh vào thế giới bên trong của Kubernetes.

Thế giới bên trong của Kubernetes

Kubernetes bao gồm một tập hợp các thành phần độc lập chạy dưới dạng các tiến trình riêng biệt trên các nút cụm. Một số thành phần chạy trên các nút chính, một số thành phần khác chạy trên các nút công nhân, mỗi thành phần thực hiện nhiệm vụ cụ thể của riêng mình.

Dưới đây là các thành phần quan trọng nhất trên các nút chính:

  1. Vault - lưu trữ các định nghĩa tài nguyên (thông thường nó là v.v.).
  2. máy chủ API — cung cấp API và quản lý việc lưu trữ.
  3. Trình quản lý bộ điều khiển - Đảm bảo rằng trạng thái tài nguyên tuân thủ các thông số kỹ thuật.
  4. Người lập kế hoạch — lên lịch các nhóm trên các nút công nhân.

Và đây là một thành phần quan trọng nhất trên các nút công nhân:

  1. kubelet — quản lý việc khởi chạy các container trên nút đang hoạt động.

Để hiểu cách các thành phần này hoạt động cùng nhau, hãy xem một ví dụ.

Giả sử bạn vừa hoàn thành kubectl create -f replicaset.yaml, sau đó kubectl đã thực hiện yêu cầu HTTP POST tới Điểm cuối API bản sao (chuyển định nghĩa tài nguyên ReplicaSet).

Chuyện gì đang xảy ra trong cụm?

  1. Sau khi làm kubectl create -f replicaset.yaml Máy chủ API lưu trữ định nghĩa tài nguyên ReplicaSet của bạn trong bộ lưu trữ:

    Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

  2. Tiếp theo, bộ điều khiển ReplicaSet được khởi chạy trong trình quản lý bộ điều khiển, xử lý việc tạo, sửa đổi và xóa tài nguyên ReplicaSet:

    Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

  3. Bộ điều khiển ReplicaSet tạo định nghĩa nhóm cho mỗi bản sao ReplicaSet (theo mẫu nhóm trong định nghĩa ReplicaSet) và lưu trữ chúng trong bộ lưu trữ:

    Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

  4. Bộ lập lịch được khởi chạy, theo dõi các nhóm chưa được chỉ định cho bất kỳ nút công nhân nào:

    Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

  5. Bộ lập lịch chọn nút công nhân phù hợp cho mỗi nhóm và thêm thông tin này vào định nghĩa nhóm trong cửa hàng:

    Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

  6. Trên nút worker mà nhóm được chỉ định, Kubelet được khởi chạy, nó theo dõi các nhóm được chỉ định cho nút này:

    Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

  7. Kubelet đọc định nghĩa nhóm từ bộ lưu trữ và hướng dẫn thời gian chạy vùng chứa, chẳng hạn như Docker, để khởi chạy các vùng chứa trên nút:

    Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết

Dưới đây là phiên bản văn bản của mô tả này.

Yêu cầu API tới điểm cuối tạo ReplicaSet được xử lý bởi máy chủ API. Máy chủ API xác thực yêu cầu và lưu trữ định nghĩa tài nguyên ReplicaSet trong bộ lưu trữ.

Sự kiện này khởi động bộ điều khiển ReplicaSet, đây là một quy trình con của trình quản lý bộ điều khiển. Bộ điều khiển ReplicaSet giám sát việc tạo, cập nhật và xóa tài nguyên ReplicaSet trong cửa hàng và nhận thông báo sự kiện khi điều này xảy ra.

Công việc của bộ điều khiển ReplicaSet là đảm bảo tồn tại số lượng nhóm ReplicaSet cần thiết. Trong ví dụ của chúng tôi, chưa có nhóm nào tồn tại, vì vậy bộ điều khiển ReplicaSet tạo các định nghĩa nhóm này (theo mẫu nhóm trong định nghĩa ReplicaSet) và lưu trữ chúng trong bộ lưu trữ.

Việc tạo các nhóm mới được kích hoạt bởi một bộ lập lịch theo dõi các định nghĩa nhóm chưa được lên lịch cho các nút công nhân. Bộ lập lịch chọn nút công nhân phù hợp cho từng nhóm và cập nhật định nghĩa nhóm trong kho lưu trữ.

Lưu ý rằng cho đến thời điểm này, không có mã khối lượng công việc nào chạy ở bất kỳ đâu trong cụm. Mọi thứ đã được thực hiện cho đến nay - đây là việc tạo và cập nhật tài nguyên trong kho lưu trữ trên nút chính.

Sự kiện cuối cùng sẽ kích hoạt Kubelets, theo dõi các nhóm được lên lịch cho các nút công nhân của chúng. Kubelet của nút worker nơi cài đặt nhóm ReplicaSet của bạn phải hướng dẫn thời gian chạy vùng chứa, chẳng hạn như Docker, tải xuống các hình ảnh vùng chứa cần thiết và chạy chúng.

Tại thời điểm này, ứng dụng ReplicaSet của bạn cuối cùng đã chạy!

Vai trò của API Kubernetes

Như bạn đã thấy trong ví dụ trước, các thành phần Kubernetes (ngoại trừ máy chủ API và bộ lưu trữ) theo dõi các thay đổi đối với tài nguyên trong bộ lưu trữ và thay đổi thông tin về tài nguyên trong bộ lưu trữ.

Tất nhiên, các thành phần này không tương tác trực tiếp với bộ lưu trữ mà chỉ thông qua API Kubernetes.

Hãy xem xét các ví dụ sau:

  1. Bộ điều khiển ReplicaSet sử dụng điểm cuối API liệt kê các bộ bản sao với tham số watch để theo dõi những thay đổi đối với tài nguyên ReplicaSet.
  2. Bộ điều khiển ReplicaSet sử dụng điểm cuối API tạo nhóm (tạo nhóm) để tạo nhóm.
  3. Trình lập lịch sử dụng điểm cuối API nhóm vá (chỉnh sửa nhóm) để cập nhật nhóm với thông tin về nút nhân viên đã chọn.

Như bạn có thể thấy, đây chính là API mà kubectl truy cập. Sử dụng cùng một API cho các thành phần bên trong và người dùng bên ngoài là khái niệm cơ bản trong thiết kế Kubernetes.

Bây giờ chúng ta có thể tóm tắt cách Kubernetes hoạt động:

  1. Kho lưu trữ trạng thái, tức là tài nguyên Kubernetes.
  2. Máy chủ API cung cấp giao diện cho bộ lưu trữ dưới dạng API Kubernetes.
  3. Tất cả các thành phần và người dùng Kubernetes khác đều đọc, quan sát và thao tác trạng thái (tài nguyên) Kubernetes thông qua API.

Biết những khái niệm này sẽ giúp bạn hiểu rõ hơn về kubectl và tận dụng tối đa nó.

Bây giờ, hãy xem một số mẹo và thủ thuật cụ thể sẽ giúp cải thiện năng suất của bạn với kubectl.

1. Tăng tốc độ nhập liệu bằng cách hoàn thành lệnh

Một trong những kỹ thuật hữu ích nhất nhưng thường bị bỏ qua để cải thiện hiệu suất với kubectl là hoàn thành lệnh.

Hoàn thành lệnh cho phép bạn tự động hoàn thành các phần của lệnh kubectl bằng phím Tab. Điều này hoạt động cho các lệnh phụ, tùy chọn và đối số, bao gồm cả những thứ phức tạp như tên tài nguyên.

Xem cách hoàn thành lệnh kubectl hoạt động:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Việc hoàn thành lệnh hoạt động đối với shell Bash và Zsh.

Hướng dẫn chính thức chứa hướng dẫn chi tiết để thiết lập tính năng tự động hoàn thành, nhưng bên dưới chúng tôi sẽ cung cấp một đoạn trích ngắn.

Cách hoàn thành lệnh hoạt động

Hoàn thành lệnh là một tính năng shell hoạt động bằng cách sử dụng tập lệnh hoàn thành. Tập lệnh mở rộng là tập lệnh shell xác định hành vi của phần mở rộng cho một lệnh cụ thể.

Kubectl tự động tạo và xuất các tập lệnh mở rộng cho Bash và Zsh bằng các lệnh sau:

$ kubectl completion bash

Или:

$ kubectl completion zsh

Về lý thuyết, chỉ cần kết nối đầu ra của các lệnh này với shell lệnh thích hợp là đủ để kubectl có thể bổ sung cho các lệnh.

Trong thực tế, phương thức kết nối của Bash là khác nhau (bao gồm cả sự khác biệt giữa Linux và MacOS) và Zsh. Dưới đây chúng tôi sẽ xem xét tất cả các tùy chọn này.

Bash trên Linux

Tập lệnh hoàn thành Bash phụ thuộc vào gói bash-completion, vì vậy bạn cần cài đặt nó trước:

$ sudo apt-get install bash-completion

Или:

$ yum install bash-completion

Bạn có thể kiểm tra xem gói đã được cài đặt thành công hay chưa bằng lệnh sau:

$ type _init_completion

Nếu điều này xuất ra mã chức năng shell, thì hoàn thành bash được cài đặt chính xác. Nếu lệnh đưa ra lỗi "Không tìm thấy", bạn cần thêm dòng sau vào tệp của mình ~ / .bashrc:

$ source /usr/share/bash-completion/bash_completion

Có cần thiết phải thêm dòng này vào tập tin ~ / .bashrc hay không phụ thuộc vào trình quản lý gói bạn đã sử dụng để cài đặt bash-completion. Điều này là cần thiết cho APT, nhưng không cần thiết cho YUM.

Sau khi cài đặt bash-completion, bạn cần định cấu hình mọi thứ để tập lệnh hoàn thành kubectl được bật trong tất cả các phiên shell.

Một cách để làm điều này là thêm dòng sau vào tệp ~ / .bashrc:

source <(kubectl completion bash)

Một cách khác là thêm tập lệnh mở rộng kubectl vào thư mục /etc/bash_completion.d (tạo nó nếu nó không tồn tại):

$ kubectl completion bash >/etc/bash_completion.d/kubectl

Tất cả các tập lệnh bổ trợ trong danh mục /etc/bash_completion.d được tự động đưa vào bash-completion.

Cả hai lựa chọn đều được áp dụng như nhau.

Sau khi khởi động lại shell, quá trình hoàn thành lệnh kubectl sẽ hoạt động.

Bash trên MacOS

Trên MacOS, việc thiết lập phức tạp hơn một chút. Thực tế là theo mặc định, MacOS sử dụng phiên bản Bash 3.2 và tập lệnh tự động hoàn thành kubectl yêu cầu phiên bản Bash ít nhất là 4.1 và không hoạt động trong Bash 3.2.

Có các vấn đề cấp phép liên quan đến việc sử dụng phiên bản Bash lỗi thời trên MacOS. Phiên bản Bash 4 được cấp phép theo GPLv3, không được Apple hỗ trợ.

Để định cấu hình tính năng tự động hoàn thành kubectl trên MacOS, bạn cần cài đặt phiên bản Bash mới hơn. Bạn cũng có thể đặt Bash đã cập nhật làm shell mặc định, điều này sẽ giúp bạn tránh được rất nhiều vấn đề trong tương lai. Nó không khó, chi tiết được đưa ra trong bài viết “Cập nhật Bash trên MacOS'.

Trước khi tiếp tục, hãy đảm bảo bạn đang sử dụng phiên bản Bash gần đây (kiểm tra đầu ra bash --version).

Kịch bản hoàn thành Bash thay đổi tùy theo dự án bash-hoàn thành, vì vậy bạn cần phải cài đặt nó trước.

Bạn có thể cài đặt hoàn thành bash bằng cách sử dụng Homebrew:

$ brew install bash-completion@2

Здесь @2 là viết tắt của bash-completion phiên bản 2. tính năng tự động hoàn thành kubectl yêu cầu bash-completion v2 và bash-completion v2 yêu cầu tối thiểu phiên bản Bash 4.1.

Đầu ra lệnh brew-install chứa phần Hãy cẩn thận, trong đó chỉ định những gì cần được thêm vào tệp ~/.bash_profile:

export BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . 
"/usr/local/etc/profile.d/bash_completion.sh"

Tuy nhiên, tôi khuyên bạn không nên thêm những dòng này vào ~/.bash_profilevà trong ~/.bashrc. Trong trường hợp này, tính năng tự động hoàn thành sẽ không chỉ có trong lệnh chính mà còn có trong các lệnh con.

Sau khi khởi động lại shell lệnh, bạn có thể xác minh cài đặt là chính xác bằng lệnh sau:

$ type _init_completion

Nếu bạn thấy hàm shell ở đầu ra thì mọi thứ đều được cấu hình đúng.

Bây giờ chúng ta cần đảm bảo rằng tính năng tự động hoàn thành kubectl được bật trong tất cả các phiên.

Một cách là thêm dòng sau vào ~/.bashrc:

source <(kubectl completion bash)

Cách thứ hai là thêm tập lệnh tự động hoàn thành vào thư mục /usr/local/etc/bash_completion.d:

$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectl

Phương pháp này sẽ chỉ hoạt động nếu bạn cài đặt bash-completion bằng Homebrew. Trong trường hợp này, bash-completion tải tất cả các tập lệnh từ thư mục này.

Nếu bạn đã cài đặt kubectl sử dụng Homebrew, thì không cần thực hiện bước trước vì tập lệnh tự động hoàn thành sẽ được tự động đặt vào thư mục /usr/local/etc/bash_completion.d trong quá trình cài đặt. Trong trường hợp này, tính năng tự động hoàn thành kubectl sẽ bắt đầu hoạt động ngay sau khi bạn cài đặt bash-completion.

Kết quả là tất cả các tùy chọn này đều tương đương.

Zsh

Tập lệnh tự động hoàn thành cho Zsh không yêu cầu bất kỳ sự phụ thuộc nào. Tất cả những gì bạn cần làm là kích hoạt chúng khi tải shell lệnh.

Bạn có thể làm điều này bằng cách thêm một dòng vào ~/.zshrc tài liệu:

source <(kubectl completion zsh)

Nếu bạn nhận được một lỗi not found: compdef sau khi khởi động lại shell, bạn cần kích hoạt chức năng dựng sẵn compdef. Bạn có thể kích hoạt nó bằng cách thêm nó vào đầu tập tin của bạn ~/.zshrc như sau

autoload -Uz compinit
compinit

2. Xem nhanh thông số tài nguyên

Khi tạo định nghĩa tài nguyên YAML, bạn cần biết các trường và ý nghĩa của chúng đối với các tài nguyên đó. Một nơi để tìm thông tin này là trong tài liệu tham khảo API, nơi chứa thông số kỹ thuật đầy đủ cho tất cả các tài nguyên.

Tuy nhiên, việc chuyển sang trình duyệt web mỗi khi cần tìm kiếm thứ gì đó thật bất tiện. Do đó kubectl cung cấp lệnh kubectl explain, hiển thị thông số kỹ thuật của tất cả tài nguyên ngay trong thiết bị đầu cuối của bạn.

Dạng lệnh như sau:

$ kubectl explain resource[.field]...

Lệnh sẽ xuất ra thông số kỹ thuật của tài nguyên hoặc trường được yêu cầu. Thông tin được hiển thị giống hệt với thông tin có trong hướng dẫn sử dụng API.

Theo mặc định kubectl explain chỉ hiển thị cấp độ lồng nhau đầu tiên của các trường.

Xem nó trông như thế nào Bạn có thể sau đó.

Bạn có thể hiển thị toàn bộ cây nếu bạn thêm tùy chọn --recursive:

$ kubectl explain deployment.spec --recursive

Nếu bạn không biết chính xác tài nguyên nào cần thiết, bạn có thể hiển thị tất cả chúng bằng lệnh sau:

$ kubectl api-resources

Lệnh này hiển thị tên tài nguyên ở dạng số nhiều, ví dụ: deployments thay vì deployment. Nó cũng hiển thị tên viết tắt, ví dụ deploy, đối với những tài nguyên có nó. Đừng lo lắng về những khác biệt này. Tất cả các tùy chọn đặt tên này đều tương đương với kubectl. Nghĩa là, bạn có thể sử dụng bất kỳ trong số chúng cho kubectl explain.

Tất cả các lệnh sau đều tương đương:

$ kubectl explain deployments.spec
# или
$ kubectl explain deployment.spec
# или        
$ kubectl explain deploy.spec

3. Sử dụng định dạng đầu ra cột tùy chỉnh

Định dạng đầu ra lệnh mặc định kubectl get:

$ kubectl get pods
NAME                     READY    STATUS    RESTARTS  AGE
engine-544b6b6467-22qr6   1/1     Running     0       78d
engine-544b6b6467-lw5t8   1/1     Running     0       78d
engine-544b6b6467-tvgmg   1/1     Running     0       78d
web-ui-6db964458-8pdw4    1/1     Running     0       78d

Định dạng này thuận tiện nhưng chứa một lượng thông tin hạn chế. So với định dạng định nghĩa tài nguyên đầy đủ, chỉ có một số trường được hiển thị ở đây.

Trong trường hợp này, bạn có thể sử dụng định dạng đầu ra cột tùy chỉnh. Nó cho phép bạn xác định dữ liệu nào sẽ xuất ra. Bạn có thể hiển thị bất kỳ trường tài nguyên nào dưới dạng cột riêng biệt.

Việc sử dụng định dạng tùy chỉnh được xác định bằng cách sử dụng các tùy chọn:

-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]...

Bạn có thể xác định mỗi cột đầu ra là một cặp <header>:<jsonpath>Đâu <header> là tên cột và <jsonpath> - một biểu thức xác định trường tài nguyên.

Hãy xem một ví dụ đơn giản:

$ kubectl get pods -o custom-columns='NAME:metadata.name'

NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4

Đầu ra chứa một cột có tên của các nhóm.

Biểu thức tùy chọn chọn tên nhóm từ trường metadata.name. Điều này là do tên của nhóm được xác định trong trường tên con metadata trong mô tả tài nguyên của nhóm. Thông tin chi tiết có thể được tìm thấy trong Hướng dẫn API hoặc gõ lệnh kubectl explain pod.metadata.name.

Bây giờ, giả sử bạn muốn thêm một cột bổ sung vào đầu ra, ví dụ: hiển thị nút mà mỗi nhóm đang chạy. Để thực hiện việc này, bạn chỉ cần thêm thông số cột thích hợp vào tùy chọn cột tùy chỉnh:

$ kubectl get pods 
  -o custom-columns='NAME:metadata.name,NODE:spec.nodeName'

NAME                       NODE
engine-544b6b6467-22qr6    ip-10-0-80-67.ec2.internal
engine-544b6b6467-lw5t8    ip-10-0-36-80.ec2.internal
engine-544b6b6467-tvgmg    ip-10-0-118-34.ec2.internal
web-ui-6db964458-8pdw4     ip-10-0-118-34.ec2.internal

Biểu thức chọn tên nút từ spec.nodeName — khi một nhóm được gán cho một nút, tên của nó sẽ được ghi vào trường spec.nodeName đặc tả tài nguyên nhóm. Thông tin chi tiết hơn có thể được tìm thấy trong đầu ra kubectl explain pod.spec.nodeName.

Xin lưu ý rằng các trường tài nguyên Kubernetes có phân biệt chữ hoa chữ thường.

Bạn có thể xem bất kỳ trường tài nguyên nào dưới dạng cột. Chỉ cần xem lại đặc tả tài nguyên và thử nó với bất kỳ trường nào bạn thích.

Nhưng trước tiên, chúng ta hãy xem xét kỹ hơn các biểu thức lựa chọn trường.

Biểu thức JSONPath

Biểu thức lựa chọn trường tài nguyên dựa trên Đường dẫn JSON.

JSONPath là ngôn ngữ để lấy dữ liệu từ các tài liệu JSON. Chọn một trường duy nhất là trường hợp sử dụng đơn giản nhất cho JSONPath. Anh ấy có nhiều nhiều khả năng hơn, bao gồm bộ chọn, bộ lọc, v.v.

Kubectl giải thích hỗ trợ một số tính năng JSONPath có giới hạn. Các khả năng và ví dụ về việc sử dụng chúng được mô tả dưới đây:

# Выбрать все элементы списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[*].image'
# Выбрать специфический элемент списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[0].image'
# Выбрать элементы списка, попадающие под фильтр
$ kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'
# Выбрать все поля по указанному пути, независимо от их имени
$ kubectl get pods -o custom-columns='DATA:metadata.*'
# Выбрать все поля с указанным именем, вне зависимости от их расположения
$ kubectl get pods -o custom-columns='DATA:..image'

Toán tử [] đặc biệt quan trọng. Nhiều trường tài nguyên Kubernetes là danh sách và toán tử này cho phép bạn chọn thành viên của các danh sách đó. Nó thường được sử dụng với ký tự đại diện như [*] để chọn tất cả các thành phần của danh sách.

Ví dụ ứng dụng

Khả năng sử dụng định dạng đầu ra cột tùy chỉnh là vô tận, vì bạn có thể hiển thị bất kỳ trường hoặc tổ hợp trường tài nguyên nào trong đầu ra. Dưới đây là một số ứng dụng mẫu nhưng bạn có thể thoải mái khám phá chúng và tìm ứng dụng phù hợp với mình.

  1. Hiển thị hình ảnh vùng chứa cho nhóm:
    $ kubectl get pods 
      -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
    
    NAME                        IMAGES
    engine-544b6b6467-22qr6     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-lw5t8     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-tvgmg     rabbitmq:3.7.8-management,nginx
    web-ui-6db964458-8pdw4      wordpress

    Lệnh này hiển thị tên hình ảnh vùng chứa cho mỗi nhóm.

    Hãy nhớ rằng một nhóm có thể chứa nhiều vùng chứa, khi đó tên hình ảnh sẽ được hiển thị trên một dòng, cách nhau bằng dấu phẩy.

  2. Hiển thị vùng khả dụng của nút:
    $ kubectl get nodes 
      -o 
    custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain.beta.kubernetes.io/zone'
    
    NAME                          ZONE
    ip-10-0-118-34.ec2.internal   us-east-1b
    ip-10-0-36-80.ec2.internal    us-east-1a
    ip-10-0-80-67.ec2.internal    us-east-1b

    Lệnh này hữu ích nếu cụm của bạn được lưu trữ trên đám mây công cộng. Nó hiển thị vùng khả dụng cho mỗi nút.

    Vùng sẵn sàng là một khái niệm đám mây giới hạn vùng sao chép trong một vùng địa lý.

    Vùng sẵn sàng cho mỗi nút được lấy thông qua nhãn đặc biệt - failure-domain.beta.kubernetes.io/zone. Nếu cụm đang chạy trên đám mây công cộng, nhãn này sẽ được tạo tự động và chứa đầy tên của vùng khả dụng cho mỗi nút.

    Nhãn không phải là một phần của đặc tả tài nguyên Kubernetes, vì vậy bạn sẽ không tìm thấy thông tin về chúng trong Hướng dẫn API. Tuy nhiên, chúng có thể được nhìn thấy (giống như bất kỳ nhãn nào khác) nếu bạn yêu cầu thông tin về các nút ở định dạng YAML hoặc JSON:

    $ kubectl get nodes -o yaml
    # или
    $ kubectl get nodes -o json

    Đây là một cách tuyệt vời để tìm hiểu thêm về tài nguyên, ngoài việc tìm hiểu các thông số kỹ thuật của tài nguyên.

4. Dễ dàng chuyển đổi giữa các cụm và không gian tên

Khi kubectl đưa ra yêu cầu tới API Kubernetes, trước tiên, kubectl sẽ đọc tệp kubeconfig để nhận tất cả các tham số cần thiết cho kết nối.

Theo mặc định, tệp kubeconfig là ~/.kube/config. Thông thường, tệp này được tạo hoặc cập nhật bằng một lệnh đặc biệt.

Khi bạn làm việc với nhiều cụm, tệp kubeconfig của bạn chứa các cài đặt để kết nối với tất cả các cụm đó. Bạn cần một cách để cho lệnh kubectl biết bạn đang làm việc với cụm nào.

Trong một cụm, bạn có thể tạo nhiều không gian tên—một loại cụm ảo trong một cụm vật lý. Kubectl cũng xác định không gian tên nào sẽ sử dụng dựa trên tệp kubeconfig. Điều này có nghĩa là bạn cũng cần một cách để cho lệnh kubectl biết không gian tên nào cần làm việc.

Trong chương này chúng tôi sẽ giải thích cách thức hoạt động và cách làm cho nó hoạt động hiệu quả.

Lưu ý rằng bạn có thể có nhiều tệp kubeconfig được liệt kê trong biến môi trường KUBECONFIG. Trong trường hợp này, tất cả các tệp này sẽ được kết hợp thành một cấu hình chung khi chạy. Bạn cũng có thể thay đổi file kubeconfig mặc định bằng cách chạy kubectl với tham số --kubeconfig. Nhìn thấy tài liệu chính thức.

tập tin kubeconfig

Hãy xem chính xác file kubeconfig chứa những gì:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Như bạn có thể thấy, tệp kubeconfig chứa một tập hợp các bối cảnh. Bối cảnh bao gồm ba yếu tố:

  • Cụm - URL API của máy chủ cụm.
  • Người dùng - thông tin xác thực người dùng trong cụm.
  • Không gian tên - không gian tên được sử dụng khi tham gia cụm.

Trong thực tế, họ thường sử dụng một ngữ cảnh cho mỗi cụm trong kubeconfig. Tuy nhiên, bạn có thể có nhiều ngữ cảnh trên mỗi cụm, được phân biệt theo người dùng hoặc vùng tên. Tuy nhiên, cấu hình đa ngữ cảnh này không phổ biến nên thường có sự ánh xạ một-một giữa các cụm và ngữ cảnh.

Tại bất kỳ thời điểm nào, một trong những bối cảnh là hiện tại:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Khi kubectl đọc tệp cấu hình, nó luôn lấy thông tin từ ngữ cảnh hiện tại. Trong ví dụ trên, kubectl sẽ kết nối với cụm Hare.

Theo đó, để chuyển sang cluster khác, bạn cần thay đổi context hiện tại trong file kubeconfig:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Bây giờ kubectl sẽ kết nối với cụm Fox.

Để chuyển sang một namespace khác trong cùng một cluster, bạn cần thay đổi giá trị của thành phần namespace cho ngữ cảnh hiện tại:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Trong ví dụ trên, kubectl sẽ sử dụng namespace Prod của cụm Fox (trước đó test namespace đã được đặt).

Lưu ý rằng kubectl cũng cung cấp các tùy chọn --cluster, --user, --namespace и --context, cho phép bạn ghi đè từng thành phần riêng lẻ và chính bối cảnh hiện tại, bất kể nội dung nào được đặt trong kubeconfig. Nhìn kubectl options.

Về lý thuyết, bạn có thể thay đổi cài đặt theo cách thủ công trong kubeconfig. Nhưng thật bất tiện. Để đơn giản hóa các thao tác này, có nhiều tiện ích khác nhau cho phép bạn thay đổi các tham số một cách tự động.

Sử dụng kubectx

Một tiện ích rất phổ biến để chuyển đổi giữa các cụm và không gian tên.

Tiện ích cung cấp các lệnh kubectx и kubens để thay đổi bối cảnh hiện tại và không gian tên tương ứng.

Như đã đề cập, việc thay đổi bối cảnh hiện tại có nghĩa là thay đổi cụm nếu bạn chỉ có một bối cảnh cho mỗi cụm.

Đây là một ví dụ về việc chạy các lệnh này:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Về cơ bản, các lệnh này chỉ đơn giản là chỉnh sửa tệp kubeconfig như mô tả ở trên.

để cài đặt kubectx, làm theo hướng dẫn trên Github.

Cả hai lệnh đều hỗ trợ tự động hoàn thành tên ngữ cảnh và không gian tên, giúp loại bỏ nhu cầu nhập chúng hoàn toàn. Hướng dẫn thiết lập tính năng tự động hoàn thành đây.

Một tính năng hữu ích khác kubectxchế độ tương tác. Nó hoạt động cùng với tiện ích fzf, phải được cài đặt riêng. Cài đặt fzf tự động cung cấp chế độ tương tác trong kubectx. Về mặt tương tác, bạn có thể chọn ngữ cảnh và không gian tên thông qua giao diện tìm kiếm miễn phí tương tác do fzf cung cấp.

Sử dụng bí danh shell

Bạn không cần các công cụ riêng biệt để thay đổi bối cảnh và không gian tên hiện tại vì kubectl cũng cung cấp các lệnh cho việc này. Vâng, đội kubectl config cung cấp các lệnh phụ để chỉnh sửa tập tin kubeconfig.

Đây là một số trong số họ:

  • kubectl config get-contexts: hiển thị tất cả các ngữ cảnh;
  • kubectl config current-context: lấy bối cảnh hiện tại;
  • kubectl config use-context: thay đổi bối cảnh hiện tại;
  • kubectl config set-context: Thay đổi thành phần ngữ cảnh.

Tuy nhiên, sử dụng trực tiếp các lệnh này không thuận tiện lắm vì chúng dài. Bạn có thể tạo bí danh shell cho chúng để dễ thực thi.

Tôi đã tạo một tập hợp các bí danh dựa trên các lệnh này để cung cấp chức năng tương tự như kubectx. Ở đây bạn có thể thấy chúng hoạt động:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Lưu ý rằng các bí danh sử dụng fzf để cung cấp giao diện tra cứu tương tác miễn phí (như chế độ tương tác của kubectx). Điều này có nghĩa là bạn cần cài đặt fzfđể sử dụng các bí danh này.

Dưới đây là định nghĩa về bí danh:

# Получить текущий контекст
alias krc='kubectl config current-context'
# Список всех контекстов
alias klc='kubectl config get-contexts -o name | sed "s/^/  /;|^  $(krc)$|s/ /*/"'
# Изменить текущий контекст
alias kcc='kubectl config use-context "$(klc | fzf -e | sed "s/^..//")"'

# Получить текущее пространство имен
alias krn='kubectl config get-contexts --no-headers "$(krc)" | awk "{print $5}" | sed "s/^$/default/"'
# Список всех пространств имен
alias kln='kubectl get -o name ns | sed "s|^.*/|  |;|^  $(krn)$|s/ /*/"'
# Изменить текущее пространство имен
alias kcn='kubectl config set-context --current --namespace "$(kln | fzf -e | sed "s/^..//")"'

Để đặt các bí danh này, bạn cần thêm các định nghĩa trên vào tệp của mình ~/.bashrc hoặc ~/.zshrc và khởi động lại shell của bạn.

Sử dụng các plugin

Kubectl cho phép bạn tải các plugin được thực thi giống như các lệnh cơ bản. Ví dụ: bạn có thể cài đặt plugin kubectl-foo và chạy nó bằng cách thực hiện lệnh kubectl foo.

Sẽ rất thuận tiện khi thay đổi bối cảnh và không gian tên theo cách này, chẳng hạn bằng cách chạy kubectl ctx để thay đổi bối cảnh và kubectl ns để thay đổi không gian tên.

Tôi đã viết hai plugin thực hiện việc này:

Hoạt động của các plugin dựa trên bí danh từ phần trước.

Đây là cách chúng hoạt động:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Lưu ý rằng các plugin sử dụng fzf để cung cấp giao diện tìm kiếm miễn phí tương tác (như chế độ tương tác của kubectx). Điều này có nghĩa là bạn cần cài đặt fzfđể sử dụng các bí danh này.

Để cài đặt plugin, bạn cần tải xuống tập lệnh shell có tên kubectl-ctx и kubectl-ns vào bất kỳ thư mục nào trong biến PATH của bạn và làm cho chúng có thể thực thi được bằng ví dụ: chmod +x. Ngay sau đó bạn sẽ có thể sử dụng kubectl ctx и kubectl ns.

5. Giảm đầu vào bằng bí danh tự động

Bí danh Shell là một cách hay để tăng tốc độ gõ. Dự án bí danh kubectl chứa khoảng 800 phím tắt cho các lệnh kubectl cơ bản.

Bạn có thể thắc mắc - làm thế nào để bạn nhớ được 800 bí danh? Nhưng bạn không cần phải nhớ tất cả vì chúng được xây dựng theo sơ đồ đơn giản được đưa ra dưới đây:

Cách sử dụng kubectl hiệu quả hơn: hướng dẫn chi tiết
Ví dụ:

  1. kgpooyaml - kubectl get pod oyaml
  2. ksysgsvcw — kubectl -n kube-system nhận svc w
  3. ksysrmcm -kubectl -n kube-system rm cm
  4. kgdepallsl - kubectl nhận triển khai tất cả sl

Như bạn có thể thấy, bí danh được tạo thành từ các thành phần, mỗi thành phần đại diện cho một thành phần cụ thể của lệnh kubectl. Mỗi bí danh có thể có một thành phần cho lệnh cơ sở, hoạt động và tài nguyên cũng như nhiều thành phần cho tham số. Bạn chỉ cần “điền” các thành phần này từ trái qua phải theo sơ đồ trên.

Sơ đồ chi tiết hiện tại có tại GitHub. Ở đó bạn cũng có thể tìm thấy danh sách đầy đủ các bí danh.

Ví dụ: bí danh kgpooyamllall tương đương với lệnh kubectl get pods -o yaml --all-namespaces.

Thứ tự tương đối của các tùy chọn không quan trọng: lệnh kgpooyamlall tương đương với lệnh kgpoalloyaml.

Bạn không phải sử dụng tất cả các thành phần làm bí danh. Ví dụ k, kg, klo, ksys, kgpo cũng có thể được sử dụng. Hơn nữa, bạn có thể kết hợp bí danh và các lệnh hoặc tùy chọn thông thường trên dòng lệnh:

Ví dụ:

  1. Thay vì kubectl proxy bạn có thể viết k proxy.
  2. Thay vì kubectl get roles bạn có thể viết kg roles (hiện tại không có bí danh nào cho tài nguyên Vai trò).
  3. Để lấy dữ liệu cho một nhóm cụ thể, bạn có thể sử dụng lệnh kgpo my-pod — kubectl get pod my-pod.

Xin lưu ý rằng một số bí danh yêu cầu đối số dòng lệnh. Ví dụ: bí danh kgpol có nghĩa là kubectl get pods -l. Lựa chọn -l yêu cầu một đối số - đặc tả nhãn. Nếu bạn sử dụng bí danh, nó sẽ trông giống như kgpol app=ui.

Vì một số bí danh cần có đối số nên các bí danh a, f và l phải được sử dụng sau cùng.

Nói chung, một khi bạn hiểu rõ sơ đồ này, bạn có thể rút ra các bí danh một cách trực quan từ các lệnh bạn muốn thực thi và tiết kiệm rất nhiều thời gian gõ.

Cài đặt

Để cài đặt kubectl-aliases các bạn cần tải file về .kubectl_aliases từ GitHub và đưa nó vào tệp ~/.bashrc hoặc ~/.zshrc:

source ~/.kubectl_aliases

Tự động hoàn thành

Như chúng tôi đã nói trước đây, bạn thường thêm các từ bổ sung vào bí danh trên dòng lệnh. Ví dụ:

$ kgpooyaml test-pod-d4b77b989

Nếu bạn sử dụng tính năng hoàn thành lệnh kubectl, có thể bạn đã sử dụng tính năng tự động hoàn thành cho những thứ như tên tài nguyên. Nhưng điều này có thể được thực hiện khi sử dụng bí danh?

Đây là một câu hỏi rất quan trọng vì nếu tính năng tự động hoàn thành không hoạt động, bạn sẽ mất một số lợi ích của bí danh.

Câu trả lời phụ thuộc vào loại shell bạn đang sử dụng:

  1. Đối với Zsh, việc hoàn thành bí danh hoạt động ngay lập tức.
  2. Thật không may, đối với Bash, cần phải thực hiện một số công việc để tính năng tự động hoàn thành hoạt động.

Kích hoạt tính năng tự động hoàn thành cho các bí danh trong Bash

Vấn đề với Bash là nó cố gắng hoàn thành (mỗi khi bạn nhấn Tab) bí danh chứ không phải lệnh mà bí danh đó đề cập đến (chẳng hạn như Zsh). Vì bạn không có tập lệnh hoàn thành cho tất cả 800 bí danh nên tính năng tự động hoàn thành không hoạt động.

Dự án bí danh hoàn chỉnh cung cấp một giải pháp chung cho vấn đề này. Nó kết nối với cơ chế hoàn thành cho các bí danh, mở rộng bí danh bên trong thành một lệnh và trả về các tùy chọn hoàn thành cho lệnh đã hoàn thành. Điều này có nghĩa là phần đệm cho bí danh hoạt động giống hệt như đối với lệnh đầy đủ.

Trong phần sau, trước tiên tôi sẽ giải thích cách cài đặt bí danh hoàn chỉnh và sau đó là cách định cấu hình nó để bật tính năng hoàn thành cho tất cả bí danh kubectl.

Cài đặt bí danh hoàn chỉnh

Trước hết, bí danh đầy đủ phụ thuộc vào bash-hoàn thành. Do đó, trước khi cài đặt bí danh hoàn chỉnh, bạn cần đảm bảo rằng bash-completion đã được cài đặt. Hướng dẫn cài đặt đã được cung cấp trước đây cho Linux và MacOS.

Lưu ý quan trọng dành cho người dùng MacOS: Giống như tập lệnh tự động hoàn thành kubectl, bí danh hoàn chỉnh không hoạt động với Bash 3.2, đây là mặc định trên MacOS. Cụ thể, bí danh hoàn chỉnh phụ thuộc vào bash-completion v2 (brew install bash-completion@2), yêu cầu ít nhất Bash 4.1. Điều này có nghĩa là để sử dụng bí danh hoàn chỉnh trên MacOS, bạn cần cài đặt phiên bản Bash mới hơn.

Bạn cần tải xuống kịch bản bash_completion.sh của Kho lưu trữ GitHub và đưa nó vào tập tin của bạn ~/.bashrc:

source ~/bash_completion.sh

Sau khi khởi động lại shell, bí danh hoàn chỉnh sẽ được cài đặt đầy đủ.

Bật tính năng tự động hoàn thành cho bí danh kubectl

Bí danh hoàn chỉnh về mặt kỹ thuật cung cấp chức năng bao bọc _complete_alias. Hàm này kiểm tra bí danh và trả về gợi ý hoàn thành cho lệnh bí danh.

Để liên kết một hàm với một bí danh cụ thể, bạn cần sử dụng cơ chế Bash tích hợp hoàn thành, để cài đặt _complete_alias như một chức năng hoàn thành bí danh.

Ví dụ: hãy lấy bí danh k, viết tắt của lệnh kubectl. để cài đặt _complete_alias Là một hàm bổ sung cho bí danh này, bạn nên chạy lệnh sau:

$ complete -F _complete_alias k

Kết quả của việc này là bất cứ khi nào bạn tự động hoàn thành bí danh k, hàm sẽ được gọi _complete_alias, kiểm tra bí danh và trả về gợi ý hoàn thành cho lệnh kubectl.

Ví dụ thứ hai, hãy lấy bí danh kg, biểu thị kubectl get:

$ complete -F _complete_alias kg

Giống như trong ví dụ trước, khi bạn tự động hoàn thành kg, bạn sẽ nhận được các gợi ý hoàn thành tương tự như khi bạn nhận được kubectl get.

Lưu ý rằng bạn có thể sử dụng bí danh đầy đủ cho bất kỳ bí danh nào trên hệ thống của mình.

Do đó, để bật tính năng tự động hoàn thành cho tất cả bí danh kubectl, bạn cần chạy lệnh trên cho từng bí danh. Đoạn mã sau thực hiện chính xác điều này, miễn là bạn đã đặt bí danh kubectl thành ~/.kubectl-aliases:

for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases); 
do
  complete -F _complete_alias "$_a"
done

Đoạn mã này cần được đặt trong ~/.bashrc, hãy khởi động lại trình bao lệnh và tính năng tự động hoàn thành sẽ khả dụng cho tất cả 800 bí danh kubectl.

6. Mở rộng kubectl bằng plugin

Bắt đầu từ phiên bản 1.12, kubectl hỗ trợ cơ chế bổ trợ, cho phép bạn mở rộng chức năng của nó bằng các lệnh bổ sung.

Nếu bạn quen thuộc với Cơ chế bổ trợ Git, thì các plugin kubectl cũng được xây dựng theo nguyên tắc tương tự.

Trong chương này, chúng tôi sẽ đề cập đến cách cài đặt plugin, nơi tìm chúng và cách tạo plugin của riêng bạn.

Cài đặt plugin

Các plugin Kubectl được phân phối dưới dạng các tệp thực thi đơn giản với tên như kubectl-x. Tiếp đầu ngữ kubectl- là bắt buộc, theo sau là lệnh con kubectl mới cho phép bạn gọi plugin.

Ví dụ: plugin xin chào sẽ được phân phối dưới dạng tệp có tên kubectl-hello.

Để cài đặt plugin, bạn cần sao chép tập tin kubectl-x vào bất kỳ thư mục nào trong PATH của bạn và làm cho nó có thể thực thi được, ví dụ như với chmod +x. Ngay sau đó, bạn có thể gọi plugin bằng kubectl x.

Bạn có thể sử dụng lệnh sau để liệt kê tất cả các plugin hiện được cài đặt trên hệ thống của mình:

$ kubectl plugin list

Lệnh này cũng sẽ hiển thị cảnh báo nếu bạn có nhiều plugin có cùng tên hoặc nếu có tệp plugin không thể thực thi được.

Tìm và cài đặt plugin bằng Krew

Các plugin Kubectl có thể được chia sẻ hoặc sử dụng lại như các gói phần mềm. Nhưng bạn có thể tìm thấy các plugin mà người khác đã chia sẻ ở đâu?

Dự án Krew nhằm mục đích cung cấp một giải pháp thống nhất để chia sẻ, tìm kiếm, cài đặt và quản lý các plugin kubectl. Dự án này tự gọi mình là "trình quản lý gói cho các plugin kubectl" (Krew tương tự như trù liệu).

Krew là danh sách các plugin kubectl mà bạn có thể chọn và cài đặt. Đồng thời Krew cũng là plugin dành cho kubectl.

Điều này có nghĩa là việc cài đặt Krew về cơ bản hoạt động giống như cài đặt bất kỳ plugin kubectl nào khác. Bạn có thể tìm thấy hướng dẫn chi tiết tại Trang GitHub.

Các lệnh Krew quan trọng nhất là:

# Поиск в списке плагинов
$ kubectl krew search [<query>]
# Посмотреть информацию о плагине
$ kubectl krew info <plugin>
# Установить плагин
$ kubectl krew install <plugin>
# Обновить все плагины до последней версии
$ kubectl krew upgrade
# Посмотреть все плагины, установленные через Krew
$ kubectl krew list
# Деинсталлировать плагин
$ kubectl krew remove <plugin>

Xin lưu ý rằng việc cài đặt plugin bằng Krew không ảnh hưởng đến việc cài đặt plugin bằng phương pháp tiêu chuẩn được mô tả ở trên.

Xin lưu ý rằng lệnh kubectl krew list chỉ hiển thị các plugin đã được cài đặt bằng Krew, trong khi lệnh kubectl plugin list liệt kê tất cả các plugin, nghĩa là những plugin được cài đặt bằng Krew và những plugin được cài đặt bằng các phương pháp khác.

Tìm plugin ở nơi khác

Krew là một dự án trẻ, hiện đang trong giai đoạn phát triển danh sách chỉ có khoảng 30 plugin. Nếu không tìm thấy thứ mình cần, bạn có thể tìm plugin ở nơi khác, chẳng hạn như GitHub.

Tôi khuyên bạn nên xem phần GitHub plugin kubectl. Ở đó bạn sẽ tìm thấy hàng tá plugin có sẵn đáng để thử.

Viết plugin của riêng bạn

bạn có thể tự mình tạo plugin - Không khó đâu. Bạn cần tạo một tệp thực thi có thể thực hiện những gì bạn cần, đặt tên như thế nào kubectl-x và cài đặt như mô tả ở trên.

Tệp có thể là tập lệnh bash, tập lệnh python hoặc ứng dụng GO được biên dịch - không thành vấn đề. Điều kiện duy nhất là nó có thể được thực thi trực tiếp trong hệ điều hành.

Hãy tạo một plugin ví dụ ngay bây giờ. Trong phần trước, bạn đã sử dụng lệnh kubectl để liệt kê các vùng chứa cho mỗi nhóm. Thật dễ dàng để biến lệnh này thành một plugin mà bạn có thể gọi bằng ví dụ:. kubectl img.

Tạo một tập tin kubectl-img nội dung sau:

#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'

Bây giờ làm cho tập tin có thể thực thi được với chmod +x kubectl-img và di chuyển nó đến bất kỳ thư mục nào trong PATH của bạn. Ngay sau đó bạn có thể sử dụng plugin kubectl img.

Như đã đề cập, plugin kubectl có thể được viết bằng bất kỳ ngôn ngữ lập trình hoặc tập lệnh nào. Nếu bạn đang sử dụng tập lệnh shell, lợi thế là có thể dễ dàng gọi kubectl từ bên trong plugin. Tuy nhiên, bạn có thể viết các plugin phức tạp hơn bằng ngôn ngữ lập trình thực bằng cách sử dụng Thư viện máy khách Kubernetes. Nếu bạn đang sử dụng Go, bạn cũng có thể sử dụng thư viện cli-runtime, tồn tại đặc biệt để viết plugin kubectl.

Cách chia sẻ plugin của bạn

Nếu bạn cho rằng các plugin của mình có thể hữu ích với người khác, vui lòng chia sẻ nó trên GitHub. Hãy chắc chắn để thêm chúng vào chủ đề plugin kubectl.

Bạn cũng có thể yêu cầu thêm plugin của bạn vào Danh sách Kew. Hướng dẫn cách thực hiện việc này có trong kho GitHub.

Hoàn thành lệnh

Các plugin hiện không hỗ trợ tự động hoàn thành. Tức là bạn phải nhập tên đầy đủ của plugin và tên đầy đủ của các đối số.

Kho lưu trữ GitHub kubectl cho chức năng này có mở yêu cầu. Vì vậy, có thể tính năng này sẽ được triển khai trong tương lai.

Chúc may mắn!!!

Những gì khác để đọc về chủ đề này:

  1. Ba cấp độ tự động điều chỉnh trong Kubernetes và cách sử dụng chúng hiệu quả.
  2. Kubernetes theo tinh thần vi phạm bản quyền với một mẫu để triển khai.
  3. Kênh của chúng tôi Xung quanh Kubernetes trong Telegram.

Nguồn: www.habr.com

Thêm một lời nhận xét