Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.

Повернутися до звичайного перегляду сторінки.

Інструмент командного рядка (kubectl)

    Kubernetes надає інструмент командного рядка для взаємодії із кластером Kubernetes, панеллю управління, використовуючи API Kubernetes.

    Цей інструмент має назву kubectl.

    Для отримання налаштувань kubectl шукає файл config в теці $HOME/.kube. Ви можете вказати інший файл kubeconfig у змінній оточення KUBECONFIG або у значенні ключа --kubeconfig.

    Тут ми розглянемо синтаксис команд kubectl, опис операторів та розберемо їх на прикладах. Докладніше про кожну команду, включаючи всі підтримувані прапорці та підкоманди, див. довідкову документацію kubectl.

    Інструкції з встановлення знаходяться у статті Встановлення kubectl; короткий посібник є у шпаргалці. Якщо ви звикли користуватись інструмент командного рядка docker, kubectl для користувачів Docker пояснює деякі еквівалентні команди для Kubernetes.

    Синтаксис

    Використовуйте наступний синтаксис для виконання команд kubectl у вашому терміналі:

    kubectl [команда] [ТИП] [ІМʼЯ] [прапорці]
    

    де команда, ТИП, ІМʼЯ та прапорці визначаються наступним чином:

    • команда: Вказує операцію, яку ви хочете виконати з одним чи кількома ресурсами, наприклад create, get, describe, delete.

    • ТИП: Вказує тип ресурсу. Типи ресурсів нечутливі до регістру, і можна вказувати форми однини, множини чи абревіатури. Наприклад, наступні команди виводять той самий результат:

      kubectl get pod pod1
      kubectl get pods pod1
      kubectl get po pod1
      
    • ІМʼЯ: Вказує імʼя ресурсу. Імена чутливі до регістру. Якщо імʼя відсутнє, виводяться деталі для всіх ресурсів, наприклад kubectl get pods.

      При виконанні операції над кількома ресурсами можна вказати кожен ресурс за типом та іменем або вказати один чи кілька файлів:

      • Щоб вказати ресурси за типом та іменем:

        • Щоб групувати ресурси, якщо вони всі є тим самим типом: ТИП1 імʼя1 імʼя2 імʼя<#>.
          Приклад: kubectl get pod example-pod1 example-pod2.

        • Щоб вказати кілька типів ресурсів окремо: ТИП1/імʼя1 ТИП1/імʼя2 ТИП2/імʼя3 ТИП<#>/імʼя<#>.
          Приклад: kubectl get pod/example-pod1 replicationcontroller/example-rc1.

      • Щоб вказати ресурси за допомогою одного чи кількох файлів: -f файл1 -f файл2 -f файл<#>.

    • прапорці: Є необовʼязковими. Наприклад, ви можете використовувати прапорці -s або --server, щоб вказати адресу та порт сервера API Kubernetes.

    Якщо вам потрібна допомога, виконайте команду kubectl help у вікні термінала.

    Автентифікація та перевизначення простору імен в кластері

    Типово kubectl спочатку визначатиме, чи він виконується в середині Podʼа, і отже, в кластері. Програма починає з перевірки наявності змінних середовища KUBERNETES_SERVICE_HOST та KUBERNETES_SERVICE_PORT, а також наявності файлу токена облікового запису служби за шляхом /var/run/secrets/kubernetes.io/serviceaccount/token. Якщо всі три умови виконуються, вважається, що використовується автентифікація в кластері.

    Для забезпечення зворотної сумісності, якщо під час автентифікації в кластері встановлено змінну середовища POD_NAMESPACE, вона перевизначить типовий простір імен скориставшись токеном облікового запису служби. Це буде впливати на будь-які маніфести або інструменти, які покладаються на типовий простір імен.

    Змінна середовища POD_NAMESPACE

    Якщо змінна середовища POD_NAMESPACE встановлена, операції CLI для ресурсів з обмеженим простором імен будуть отримувати типове значення від цієї змінної. Наприклад, якщо змінна встановлена в seattle, kubectl get pods поверне Podʼи з простору імен seattle. Це тому, що Podʼи є ресурсом з обмеженим простором імен, і ми не вказали команді простір імен в командному рядку. Ознайомтесь з виводом kubectl api-resources, щоб визначити, чи ресурс має обмежений простір імен чи ні.

    Явне використання --namespace <value> перевизначає цю поведінку.

    Як kubectl обробляє токени ServiceAccount

    Якщо:

    • маємо файл токена облікового запису служби Kubernetes, змонтований за шляхом /var/run/secrets/kubernetes.io/serviceaccount/token, і
    • встановлено змінну середовища KUBERNETES_SERVICE_HOST, і
    • встановлено змінну середовища KUBERNETES_SERVICE_PORT, і
    • ви не вказуєте простір імен явно в командному рядку kubectl

    тоді kubectl вважатиме, що він працює в вашому кластері. Інструмент kubectl знаходить простір імен цього облікового запису служби (це такий самий простір імен, що й у Podʼа) та діє відповідно до цього простору імен. Це відрізняється від того, що відбувається поза кластером; коли kubectl працює за межами кластера і ви не вказуєте простір імен, команда kubectl діє в просторі імен, встановленому для поточного контексту у вашій конфігурації клієнта. Щоб змінити типовий простір імен для kubectl, ви можете використовувати наступну команду:

    kubectl config set-context --current --namespace=<namespace-name>
    

    Операції

    Наступна таблиця містить короткі описи та загальний синтаксис для всіх операцій kubectl:

    ОпераціяСинтаксисОпис
    alphakubectl alpha SUBCOMMAND [flags]Вивести список доступних команд, які відповідають альфа-функціям, які зазвичай не є активованими у кластерах Kubernetes.
    annotatekubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]Додати або оновити анотації одного чи кількох ресурсів.
    api-resourceskubectl api-resources [flags]Вивести список доступних ресурсів API.
    api-versionskubectl api-versions [flags]Вивести список доступних версій API.
    applykubectl apply -f FILENAME [flags]Застосувати зміну конфігурації до ресурсу з файлу або stdin.
    attachkubectl attach POD -c CONTAINER [-i] [-t] [flags]Приєднатися до запущеного контейнера для перегляду виводу або взаємодії з контейнером (stdin).
    authkubectl auth [flags] [options]Перегляд авторизації.
    autoscalekubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]Автоматично масштабувати набір Podʼів, керованих контролером реплікації.
    certificatekubectl certificate SUBCOMMAND [options]Змінити ресурси сертифікатів.
    cluster-infokubectl cluster-info [flags]Показати інформацію про точки доступу майстра та служб в кластері.
    completionkubectl completion SHELL [options]Вивести код функції автозавершення оболонки для bash або zsh.
    configkubectl config SUBCOMMAND [flags]Змінити файли kubeconfig. Див. окремі команди для отримання деталей.
    convertkubectl convert -f FILENAME [options]Конвертувати файли конфігурації між різними версіями API. Приймаються формати YAML та JSON. Примітка — потрібно встановити втулок kubectl-convert.
    cordonkubectl cordon NODE [options]Позначити вузол як недоступний для планування.
    cpkubectl cp <file-spec-src> <file-spec-dest> [options]Копіювати файли та теки в та з контейнерів.
    createkubectl create -f FILENAME [flags]Створити один чи кілька ресурсів з файлу або stdin.
    deletekubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]Видалити ресурси з файлу, stdin або вказати селектори міток, імена, селектори ресурсів або ресурси.
    describekubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]Показати докладний стан одного чи кількох ресурсів.
    diffkubectl diff -f FILENAME [flags]Показати розбіжності між файлом або stdin від робочої конфігурації.
    drainkubectl drain NODE [options]Звільнити вузол від ресурсів для підготовки його до обслуговування.
    editkubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]Редагувати та оновити визначення одного чи кількох ресурсів на сервері за допомогою типового редактора.
    eventskubectl eventsВивести список подій.
    execkubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]Виконати команду в контейнері у Podʼі.
    explainkubectl explain TYPE [--recursive=false] [flags]Отримати документацію про різні ресурси, такі як Podʼи, вузли, служби і т. д.
    exposekubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]Надати доступ ззовні до контролеру реплікації, Service або Pod, як до нового Service Kubernetes.
    getkubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]Вивести список ресурсів.
    kustomizekubectl kustomize <dir> [flags] [options]Вивести список ресурсів API, згенерованих з інструкцій у файлі kustomization.yaml. Аргумент повинен бути шляхом до теки, що містить файл, або URL репозиторію git з суфіксом шляху, який вказує на те ж саме відносно кореня репозиторію.
    labelkubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]Додати або оновити мітки одного чи кількох ресурсів.
    logskubectl logs POD [-c CONTAINER] [--follow] [flags]Вивести логи контейнера у Podʼі.
    optionskubectl optionsСписок глобальних параметрів командного рядка, які застосовуються до всіх команд.
    patchkubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]Оновити одне чи кілька полів ресурсу за допомогою процесу стратегічного обʼєднання патчів.
    pluginkubectl plugin [flags] [options]Надає інструменти для взаємодії з втулками.
    port-forwardkubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]Переспрямувати один або декілька локальних портів у Pod.
    proxykubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]Запустити проксі до сервера API Kubernetes.
    replacekubectl replace -f FILENAMEЗамінити ресурс з файлу або stdin.
    rolloutkubectl rollout SUBCOMMAND [options]Керувати розгортанням ресурсу. Дійсні типи ресурсів: Deployment, DaemonSet та StatefulSet.
    runkubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags]Запустити вказаний образ у кластері.
    scalekubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]Оновити розмір вказаного контролера реплікації.
    setkubectl set SUBCOMMAND [options]Налаштувати ресурси застосунку.
    taintkubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]Оновити taint на одному чи декількох вузлах.
    topkubectl top (POD | NODE) [flags] [options]Показати використання ресурсів (CPU/Memory/Storage) для Podʼу чи вузла.
    uncordonkubectl uncordon NODE [options]Позначити вузол як доступний для планування.
    versionkubectl version [--client] [flags]Показати версію Kubernetes, яка працює на клієнті та сервері.
    waitkubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options]Експериментально: чекати на певний стан одного чи кількох ресурсів.

    Щоб дізнатися більше про операції, що виконують команди, див. довідку kubectl.

    Типи ресурсів

    У наступній таблиці наведено список всіх підтримуваних типів ресурсів та їх скорочених аліасів.

    (Цей вивід можна отримати за допомогою kubectl api-resources і був актуальним на момент Kubernetes 1.25.0)

    ІМʼЯСКОРОЧЕННЯВЕРСІЯ APIВИМІРЮВАНИЙТИП
    bindingsv1trueBinding
    componentstatusescsv1falseComponentStatus
    configmapscmv1trueConfigMap
    endpointsepv1trueEndpoints
    eventsevv1trueEvent
    limitrangeslimitsv1trueLimitRange
    namespacesnsv1falseNamespace
    nodesnov1falseNode
    persistentvolumeclaimspvcv1truePersistentVolumeClaim
    persistentvolumespvv1falsePersistentVolume
    podspov1truePod
    podtemplatesv1truePodTemplate
    replicationcontrollersrcv1trueReplicationController
    resourcequotasquotav1trueResourceQuota
    secretsv1trueSecret
    serviceaccountssav1trueServiceAccount
    servicessvcv1trueService
    mutatingwebhookconfigurationsadmissionregistration.k8s.io/v1falseMutatingWebhookConfiguration
    validatingwebhookconfigurationsadmissionregistration.k8s.io/v1falseValidatingWebhookConfiguration
    customresourcedefinitionscrd,crdsapiextensions.k8s.io/v1falseCustomResourceDefinition
    apiservicesapiregistration.k8s.io/v1falseAPIService
    controllerrevisionsapps/v1trueControllerRevision
    daemonsetsdsapps/v1trueDaemonSet
    deploymentsdeployapps/v1trueDeployment
    replicasetsrsapps/v1trueReplicaSet
    statefulsetsstsapps/v1trueStatefulSet
    tokenreviewsauthentication.k8s.io/v1falseTokenReview
    localsubjectaccessreviewsauthorization.k8s.io/v1trueLocalSubjectAccessReview
    selfsubjectaccessreviewsauthorization.k8s.io/v1falseSelfSubjectAccessReview
    selfsubjectrulesreviewsauthorization.k8s.io/v1falseSelfSubjectRulesReview
    subjectaccessreviewsauthorization.k8s.io/v1falseSubjectAccessReview
    horizontalpodautoscalershpaautoscaling/v2trueHorizontalPodAutoscaler
    cronjobscjbatch/v1trueCronJob
    jobsbatch/v1trueJob
    certificatesigningrequestscsrcertificates.k8s.io/v1falseCertificateSigningRequest
    leasescoordination.k8s.io/v1trueLease
    endpointslicesdiscovery.k8s.io/v1trueEndpointSlice
    eventsevevents.k8s.io/v1trueEvent
    flowschemasflowcontrol.apiserver.k8s.io/v1beta2falseFlowSchema
    prioritylevelconfigurationsflowcontrol.apiserver.k8s.io/v1beta2falsePriorityLevelConfiguration
    ingressclassesnetworking.k8s.io/v1falseIngressClass
    ingressesingnetworking.k8s.io/v1trueIngress
    networkpoliciesnetpolnetworking.k8s.io/v1trueNetworkPolicy
    runtimeclassesnode.k8s.io/v1falseRuntimeClass
    poddisruptionbudgetspdbpolicy/v1truePodDisruptionBudget
    podsecuritypoliciespsppolicy/v1beta1falsePodSecurityPolicy
    clusterrolebindingsrbac.authorization.k8s.io/v1falseClusterRoleBinding
    clusterrolesrbac.authorization.k8s.io/v1falseClusterRole
    rolebindingsrbac.authorization.k8s.io/v1trueRoleBinding
    rolesrbac.authorization.k8s.io/v1trueRole
    priorityclassespcscheduling.k8s.io/v1falsePriorityClass
    csidriversstorage.k8s.io/v1falseCSIDriver
    csinodesstorage.k8s.io/v1falseCSINode
    csistoragecapacitiesstorage.k8s.io/v1trueCSIStorageCapacity
    storageclassesscstorage.k8s.io/v1falseStorageClass
    volumeattachmentsstorage.k8s.io/v1falseVolumeAttachment

    Параметри виводу

    Використовуйте наступні розділи для отримання інформації про те, як ви можете форматувати або сортувати вивід деяких команд. Докладні відомості щодо команд, які підтримують різні параметри виводу, див. в документації по kubectl.

    Форматування виводу

    Стандартний формат виводу для всіх команд kubectl – це читабельний текстовий формат. Щоб вивести деталі у вашому терміналі у певному форматі, ви можете додати параметр -o або --output до підтримуваної команди kubectl.

    Синтаксис

    kubectl [команда] [ТИП] [ІМʼЯ] -o <формат_виводу>
    

    Залежно від операції kubectl, підтримуються наступні формати виводу:

    Формат виводуОпис
    -o custom-columns=<специфікація>Вивести таблицю, використовуючи розділений комою список власних стовпців.
    -o custom-columns-file=<імʼя_файлу>Вивести таблицю, використовуючи шаблон власних стовпців у файлі <імʼя_файлу>.
    -o jsonВивести обʼєкт API у форматі JSON.
    -o jsonpath=<шаблон>Вивести поля, визначені в виразі jsonpath.
    -o jsonpath-file=<імʼя_файлу>Вивести поля, визначені в виразі jsonpath у файлі <імʼя_файлу>.
    -o nameВивести лише імʼя ресурсу і нічого більше.
    -o wideВивести у текстовому форматі з будь-якою додатковою інформацією. Для Pod включно з імʼям вузла.
    -o yamlВивести обʼєкт API у форматі YAML.
    Приклад

    Тут наступна команда виводить інформацію про Pod у форматі YAML:

    kubectl get pod web-pod-13je7 -o yaml
    

    Нагадування: Дивіться довідку kubectl для отримання деталей щодо підтримуваних форматів виводу для кожної команди.

    Власні стовпці

    Щоб визначити власні стовпці та виводити лише ті деталі, які вам потрібні у вигляді таблиці, ви можете використовувати опцію custom-columns. Ви можете вибрати визначення спеціальних стовпців під час складення параметрів команди або використовувати файл шаблону: -o custom-columns=<spec> або -o custom-columns-file=<filename>.

    Приклади

    З використанням параметрів в командному рядку:

    kubectl get pods <pod-name> -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
    

    З використанням файлу шаблону template.txt:

    kubectl get pods <pod-name> -o custom-columns-file=template.txt
    

    де template.txt містить:

    NAME          RSRC
    metadata.name metadata.resourceVersion
    

    Результати виводу будуть виглядати як для використання шаблону, так і для параметрів командного рядка, як:

    NAME           RSRC
    submit-queue   610995
    

    Стовпці на стороні сервера

    kubectl підтримує отримання конкретної інформації в стовпці щодо обʼєктів від сервера. Це означає, що для будь-якого заданого ресурсу сервер поверне стовпці та рядки, що стосуються цього ресурсу, для показу його клієнту. Це дозволяє отримати послідовний, зручний для читання вивід для різних клієнтів, які використовуються для одного і того ж кластера, оскільки сервер ізолює деталі виведення.

    Ця функція стандартно увімкнена. Щоб вимкнути її, додайте прапорець --server-print=false до команди kubectl get.

    Приклади

    Щоб вивести інформацію про стан Podʼа, використовуйте команду на зразок наступної:

    kubectl get pods <pod-name> --server-print=false
    

    Вивід буде подібний до:

    NAME       AGE
    pod-name   1m
    

    Сортування списку обʼєктів

    Щоб вивести обʼєкти в відсортованому списку у вашому вікні термінала, ви можете додати прапорець --sort-by до команди kubectl. Впорядкуйте ваші обʼєкти, вказавши будь-яке числове чи рядкове поле з прапорцем --sort-by. Для вказання поля використовуйте вираз jsonpath.

    Синтаксис

    kubectl [команда] [ТИП] [ІМ'Я] --sort-by=<вираз_jsonpath>
    
    Приклад

    Щоб вивести список Podʼів, відсортованих за назвами, зробіть наступне:

    kubectl get pods --sort-by=.metadata.name
    

    Приклади: Загальні операції

    Використовуйте цей набір прикладів, щоб ознайомитися з тим, як використовувати найпоширеніші операції kubectl:

    kubectl apply — Застосувати або оновити ресурс із файлу чи stdin.

    # Створити службу, використовуючи визначення у файлі example-service.yaml.
    kubectl apply -f example-service.yaml
    
    # Створити контролер реплікації, використовуючи визначення у файлі example-controller.yaml.
    kubectl apply -f example-controller.yaml
    
    # Створити обʼєкти, які визначені у файлах з розширеннями .yaml, .yml, або .json у теці <directory>.
    kubectl apply -f <directory>
    

    kubectl get — Показати відомості про один чи кілька ресурсів.

    # Показати всі Podʼі у форматі звичайного тексту.
    kubectl get pods
    
    # Показати всі Podʼі у форматі звичайного тексту та додаткову інформацію (наприклад, імʼя вузла).
    kubectl get pods -o wide
    
    # Показати контролер реплікації із вказаним імʼям у форматі звичайного тексту. Порада: Ви можете скоротити та замінити тип ресурсу 'replicationcontroller' на скорочену назву 'rc'.
    kubectl get replicationcontroller <rc-name>
    
    # Показати всі контролери реплікації та служби разом у форматі звичайного тексту.
    kubectl get rc,services
    
    # Показати всі daemonsets у форматі звичайного тексту.
    kubectl get ds
    
    # Показати всі Podʼи, які працюють на вузлі server01
    kubectl get pods --field-selector=spec.nodeName=server01
    

    kubectl describe — Показати детальний стан одного чи кількох ресурсів, включаючи ті, які ще не ініціалізовані.

    # Показати деталі вузла із ім'ям <node-name>.
    kubectl describe nodes <node-name>
    
    # Показати деталі Podʼу із ім'ям <pod-name>.
    kubectl describe pods/<pod-name>
    
    # Показати деталі всіх Podʼів, які керуються контролером реплікації із вказаним ім'ям <rc-name>.
    # Памʼятайте: Будь-які Podʼи, які створює контролер реплікації, отримують префікс із імʼям контролера реплікації.
    kubectl describe pods <rc-name>
    
    # Показати всі Podʼи
    kubectl describe pods
    

    kubectl delete — Видалити ресурси або з використанням файлу, або з stdin, або вказавши селектори міток, імена, селектори ресурсів чи самі ресурси.

    # Видалити Pod, використовуючи тип та імʼя, вказане у файлі pod.yaml.
    kubectl delete -f pod.yaml
    
    # Видалити всі Podʼи та служби із міткою '<label-key>=<label-value>'.
    kubectl delete pods,services -l <label-key>=<label-value>
    
    # Видалити всі Podʼи, включаючи неініціалізовані.
    kubectl delete pods --all
    

    kubectl exec — Виконати команду у контейнері Podʼу.

    # Отримати вивід виконання команди 'date' у Podʼі <pod-name>. Типово вивід виконується з першого контейнера.
    kubectl exec <pod-name> -- date
    
    # Отримати вивід виконання команди 'date' у контейнері <container-name> Podʼу <pod-name>.
    kubectl exec <pod-name> -c <container-name> -- date
    
    # Отримати інтерактивний TTY та виконати /bin/bash у Podʼі <pod-name>. Типово вивід виконується з першого контейнера.
    kubectl exec -ti <pod-name> -- /bin/bash
    

    kubectl logs — Вивести логи для контейнера у Podʼі.

    # Отримати логи із Podʼу <pod-name>.
    kubectl logs <pod-name>
    
    # Почати виведення логів у режимі стрічки із Podʼу <pod-name>. Це схоже на команду 'tail -f' у Linux.
    kubectl logs -f <pod-name>
    

    kubectl diff — Переглянути відмінності запропонованих оновлень кластера.

    # Відмінності ресурсів, включених у "pod.json".
    kubectl diff -f pod.json
    
    # Відмінності, отримані з stdin.
    cat service.yaml | kubectl diff -f -
    

    Приклади: Створення та використання втулків

    Використовуйте цей набір прикладів, щоб ознайомитися із написанням та використанням втулків kubectl:

    # створіть простий втулок будь-якою мовою та зробить файл виконуваним
    # так, щоб він починався префіксом "kubectl-"
    cat ./kubectl-hello
    
    #!/bin/sh
    
    # цей втулок виводить слова "hello world"
    echo "hello world"
    

    Дайте втулку права на виконання:

    chmod a+x ./kubectl-hello
    
    # та перемістіть його в місце, яке є у вашому шляху (PATH)
    sudo mv ./kubectl-hello /usr/local/bin
    sudo chown root:root /usr/local/bin
    
    # Ви зараз створили та "встановили" втулок kubectl.
    # Ви можете почати використовувати цей втулок, викликаючи його з kubectl, 
    # ніби це звичайна команда
    kubectl hello
    
    hello world
    
    # Ви можете "вилучити" втулок, видаливши його з теки у вашому
    # $PATH, де ви його розмістили
    sudo rm /usr/local/bin/kubectl-hello
    

    Щоб переглянути всі втулки, доступні для kubectl, використовуйте команду kubectl plugin list:

    kubectl plugin list
    

    Вивід буде схожий на:

    The following kubectl-compatible plugins are available:
    
    /usr/local/bin/kubectl-hello
    /usr/local/bin/kubectl-foo
    /usr/local/bin/kubectl-bar
    

    kubectl plugin list також попереджає вас про втулки, які не мають прав на виконання, або які перекриваються з іншими втулками; наприклад:

    sudo chmod -x /usr/local/bin/kubectl-foo # вилучити права виконання
    kubectl plugin list
    
    The following kubectl-compatible plugins are available:
    
    /usr/local/bin/kubectl-hello
    /usr/local/bin/kubectl-foo
      - попередження: /usr/local/bin/kubectl-foo визначено як втулок, але він не є виконавчим
    /usr/local/bin/kubectl-bar
    
    error: one plugin warning was found
    

    Ви можете думати про втулки як про можливість будувати більш складні функції на основі наявних команд kubectl:

    cat ./kubectl-whoami
    

    Наступні кілька прикладів передбачають, що ви вже зробили так, що kubectl-whoami має наступний вміст:

    #!/bin/bash
    
    # цей втулок використовує команду `kubectl config` для виведення
    # інформації про поточного користувача, на основі вибраного контексту
    kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'
    

    Запуск вищезазначеної команди дає вам вивід із зазначенням користувача для поточного контексту у вашому файлі KUBECONFIG:

    # зробіть файл виконавчим
    sudo chmod +x ./kubectl-whoami
    
    # та перемістіть його у ваш шлях (PATH)
    sudo mv ./kubectl-whoami /usr/local/bin
    
    kubectl whoami
    Current user: plugins-user
    

    Що далі