Ferramenta de linha de comando (kubectl)

Kubernetes fornece um ferramenta de linha de comando para se comunicar com a camada de gerenciamento de um cluster Kubernetes usando a API do Kubernetes.

Esta ferramenta é chamada kubectl.

Para configuração, kubectl procura por um arquivo chamado config no diretório $HOME/.kube. Você pode especificar outros arquivos kubeconfig definindo a variável de ambiente KUBECONFIG ou configurando a flag --kubeconfig.

Esta visão geral abrange a sintaxe do kubectl, descreve as operações de comando e fornece exemplos comuns. Para detalhes sobre cada comando, incluindo todas as opções e subcomandos suportados, consulte a documentação de referência do kubectl.

Para instruções de instalação, consulte Instalando kubectl; para um guia rápido, consulte a folha de dicas. Se você está acostumado a usar a ferramenta de linha de comando docker, kubectl para Usuários Docker explica alguns comandos equivalentes para Kubernetes.

Sintaxe

Use a seguinte sintaxe para executar comandos kubectl da janela do seu terminal:

kubectl [command] [TYPE] [NAME] [flags]

onde command, TYPE, NAME e flags são:

  • command: Especifica a operação que você deseja executar em um ou mais recursos, por exemplo create, get, describe, delete.

  • TYPE: Especifica o tipo de recurso. Tipos de recursos não diferenciam maiúsculas de minúsculas e você pode especificar as formas singular, plural ou abreviada. Por exemplo, os seguintes comandos produzem a mesma saída:

    kubectl get pod pod1
    kubectl get pods pod1
    kubectl get po pod1
    
  • NAME: Especifica o nome do recurso. Nomes diferenciam maiúsculas de minúsculas. Se o nome for omitido, detalhes para todos os recursos são exibidos, por exemplo kubectl get pods.

    Ao realizar uma operação em vários recursos, você pode especificar cada recurso por tipo e nome ou especificar um ou mais arquivos:

    • Para especificar recursos por tipo e nome:

      • Para agrupar recursos se todos forem do mesmo tipo: TYPE1 name1 name2 name<#>.
        Exemplo: kubectl get pod example-pod1 example-pod2

      • Para especificar vários tipos de recursos individualmente: TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>.
        Exemplo: kubectl get pod/example-pod1 replicationcontroller/example-rc1

    • Para especificar recursos com um ou mais arquivos: -f file1 -f file2 -f file<#>

      • Use YAML em vez de JSON já que YAML tende a ser mais amigável ao usuário, especialmente para arquivos de configuração.
        Exemplo: kubectl get -f ./pod.yaml
  • flags: Especifica flags opcionais. Por exemplo, você pode usar as flags -s ou --server para especificar o endereço e porta do servidor de API do Kubernetes.

Se você precisar de ajuda, execute kubectl help da janela do terminal.

Autenticação dentro do cluster e sobrescritas de namespace

Por padrão, kubectl primeiro determinará se está sendo executado dentro de um pod, ou seja, em um cluster. Ele começa verificando as variáveis de ambiente KUBERNETES_SERVICE_HOST e KUBERNETES_SERVICE_PORT e a existência de um arquivo de token de conta de serviço em /var/run/secrets/kubernetes.io/serviceaccount/token. Se todos os três forem encontrados, a autenticação dentro do cluster é assumida.

Para manter a retrocompatibilidade, se a variável de ambiente POD_NAMESPACE for definida durante a autenticação dentro do cluster, ela sobrescreverá o namespace padrão do token da conta de serviço. Quaisquer manifestos ou ferramentas que dependam do namespace padrão serão afetados por isso.

Variável de ambiente POD_NAMESPACE

Se a variável de ambiente POD_NAMESPACE for definida, operações de linha de comando em recursos com namespace usarão por padrão o valor da variável. Por exemplo, se a variável for definida como seattle, kubectl get pods retornaria pods no namespace seattle. Isso ocorre porque pods são um recurso com namespace, e nenhum namespace foi fornecido no comando. Revise a saída de kubectl api-resources para determinar se um recurso possui namespace.

O uso explícito de --namespace <value> sobrescreve este comportamento.

Como o kubectl lida com tokens de ServiceAccount

Se:

  • há um arquivo de token de conta de serviço do Kubernetes montado em /var/run/secrets/kubernetes.io/serviceaccount/token, e
  • a variável de ambiente KUBERNETES_SERVICE_HOST está definida, e
  • a variável de ambiente KUBERNETES_SERVICE_PORT está definida, e
  • você não especifica explicitamente um namespace na linha de comando do kubectl

então o kubectl assume que está sendo executado no seu cluster. A ferramenta kubectl procura o namespace daquela ServiceAccount (que é o mesmo namespace do Pod) e atua com esse namespace. Isso é diferente do que acontece fora de um cluster; quando o kubectl é executado fora de um cluster e você não especifica um namespace, o comando kubectl atua com o namespace definido para o contexto atual na sua configuração do cliente. Para alterar o namespace padrão para seu kubectl você pode usar o seguinte comando:

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

Operações

A seguinte tabela inclui descrições curtas e a sintaxe geral para todas as operações do kubectl:

OperaçãoSintaxeDescrição
alphakubectl alpha SUBCOMMAND [flags]Lista os comandos disponíveis que correspondem às funcionalidades alfa, que não são habilitadas por padrão nos clusters Kubernetes.
annotatekubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]Adiciona ou atualiza as anotações de um ou mais recursos.
api-resourceskubectl api-resources [flags]Lista os recursos de API que estão disponíveis.
api-versionskubectl api-versions [flags]Lista as versões de API que estão disponíveis.
applykubectl apply -f FILENAME [flags]Aplica uma alteração de configuração a um recurso de um arquivo ou stdin.
attachkubectl attach POD -c CONTAINER [-i] [-t] [flags]Conecta a um contêiner em execução para visualizar o fluxo de saída ou interagir com o contêiner (stdin).
authkubectl auth [flags] [options]Inspeciona autorização.
autoscalekubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]Escalona automaticamente o conjunto de pods que são gerenciados por um controlador de replicação.
certificatekubectl certificate SUBCOMMAND [options]Modifica recursos de certificado.
cluster-infokubectl cluster-info [flags]Exibe informações de endpoint sobre o nó principal e serviços no cluster.
completionkubectl completion SHELL [options]Gera código de completar automaticamente para o shell especificado (bash ou zsh).
configkubectl config SUBCOMMAND [flags]Modifica arquivos kubeconfig. Consulte os subcomandos individuais para detalhes.
convertkubectl convert -f FILENAME [options]Converte arquivos de configuração entre diferentes versões de API. Ambos os formatos YAML e JSON são aceitos. Nota - requer que o plugin kubectl-convert esteja instalado.
cordonkubectl cordon NODE [options]Marca o nó como não agendável.
cpkubectl cp <file-spec-src> <file-spec-dest> [options]Copia arquivos e diretórios "de" e "para" contêineres.
createkubectl create -f FILENAME [flags]Cria um ou mais recursos de um arquivo ou stdin.
deletekubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]Exclui recursos de um arquivo, stdin, ou especificando seletores de rótulo, nomes, seletores de recursos, ou recursos.
describekubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]Exibe o estado detalhado de um ou mais recursos.
diffkubectl diff -f FILENAME [flags]Compara arquivo ou stdin contra a configuração ativa.
drainkubectl drain NODE [options]Drena o nó em preparação para manutenção.
editkubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]Edita e atualiza a definição de um ou mais recursos no servidor usando o editor padrão.
eventskubectl eventsLista eventos
execkubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]Executa um comando contra um contêiner em um pod.
explainkubectl explain TYPE [--recursive=false] [flags]Obtém documentação de vários recursos. Por exemplo pods, nós, serviços, etc.
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]Expõe um controlador de replicação, service, ou pod como um novo serviço Kubernetes.
getkubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]Lista um ou mais recursos.
kustomizekubectl kustomize <dir> [flags] [options]Lista um conjunto de recursos de API gerados a partir de instruções em um arquivo kustomization.yaml. O argumento deve ser o caminho para o diretório contendo o arquivo, ou uma URL de repositório git com um sufixo de caminho especificando o mesmo em relação à raiz do repositório.
labelkubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]Adiciona ou atualiza os rótulos de um ou mais recursos.
logskubectl logs POD [-c CONTAINER] [--follow] [flags]Imprime os logs de um contêiner em um pod.
optionskubectl optionsLista de opções globais de linha de comando, que se aplicam a todos os comandos.
patchkubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]Atualiza um ou mais campos de um recurso usando o processo de merge estratégico de patch.
pluginkubectl plugin [flags] [options]Fornece utilitários para interagir com plugins.
port-forwardkubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]Encaminha uma ou mais portas locais para um pod.
proxykubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]Executa um proxy para o servidor de API do Kubernetes.
replacekubectl replace -f FILENAMESubstitui um recurso de um arquivo ou stdin.
rolloutkubectl rollout SUBCOMMAND [options]Gerencia o rollout de um recurso. Tipos de recursos válidos incluem: deployments, daemonsets e statefulsets.
runkubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags]Executa uma imagem especificada no cluster.
scalekubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]Atualiza o tamanho do controlador de replicação especificado.
setkubectl set SUBCOMMAND [options]Configura recursos de aplicação.
taintkubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]Atualiza os taints em um ou mais nós.
topkubectl top (POD | NODE) [flags] [options]Exibe o uso de recursos (CPU/Memória/Armazenamento) de pod ou nó.
uncordonkubectl uncordon NODE [options]Marca o nó como agendável.
versionkubectl version [--client] [flags]Exibe a versão do Kubernetes em execução no cliente e servidor.
waitkubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options]Experimental: Aguarda uma condição específica em um ou muitos recursos.

Para saber mais sobre operações de comando, consulte a documentação de referência do kubectl.

Tipos de recursos

A seguinte tabela inclui uma lista de todos os tipos de recursos suportados e seus pseudônimos (aliases) abreviados.

(Esta saída pode ser obtida de kubectl api-resources, e estava precisa a partir do Kubernetes 1.25.0)

NAMESHORTNAMESAPIVERSIONNAMESPACEDKIND
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

Opções de saída

Use as seguintes seções para informações sobre como você pode formatar ou classificar a saída de determinados comandos. Para detalhes sobre quais comandos suportam as várias opções de saída, consulte a documentação de referência do kubectl.

Formatando a saída

O formato de saída padrão para todos os comandos kubectl é o formato de texto simples legível por humanos. Para exibir detalhes na janela do seu terminal em um formato específico, você pode adicionar as flags -o ou --output a um comando kubectl suportado.

Sintaxe

kubectl [command] [TYPE] [NAME] -o <output_format>

Dependendo da operação do kubectl, os seguintes formatos de saída são suportados:

Formato de saídaDescrição
-o custom-columns=<spec>Imprime uma tabela usando uma lista separada por vírgulas de colunas personalizadas.
-o custom-columns-file=<filename>Imprime uma tabela usando o template de colunas personalizadas no arquivo <filename>.
-o jsonGera um objeto de API formatado em JSON.
-o jsonpath=<template>Imprime os campos definidos em uma expressão jsonpath.
-o jsonpath-file=<filename>Imprime os campos definidos pela expressão jsonpath no arquivo <filename>.
-o kyamlGera um objeto de API formatado em KYAML (alfa, requer variável de ambiente KUBECTL_KYAML="true").
-o nameImprime apenas o nome do recurso e nada mais.
-o wideSaída no formato de texto simples com qualquer informação adicional. Para pods, o nome do nó é incluído.
-o yamlGera um objeto de API formatado em YAML. KYAML é um dialeto experimental específico do Kubernetes do YAML, e pode ser interpretado como YAML.
Exemplo

Neste exemplo, o seguinte comando gera os detalhes para um único pod como um objeto formatado em YAML:

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

Lembre-se: Consulte a documentação de referência do kubectl para detalhes sobre qual formato de saída é suportado por cada comando.

Colunas personalizadas

Para definir colunas personalizadas e gerar apenas os detalhes que você deseja em uma tabela, você pode usar a opção custom-columns. Você pode escolher definir as colunas personalizadas inline ou usar um arquivo de template: -o custom-columns=<spec> ou -o custom-columns-file=<filename>.

Exemplos

Inline:

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

Arquivo de template:

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

onde o arquivo template.txt contém:

NAME          RSRC
metadata.name metadata.resourceVersion

O resultado da execução de qualquer comando é similar a:

NAME           RSRC
submit-queue   610995

Colunas do lado do servidor

kubectl suporta receber informações específicas de colunas do servidor sobre objetos. Isso significa que para qualquer recurso dado, o servidor retornará colunas e linhas relevantes para esse recurso, para o cliente imprimir. Isso permite uma saída legível por humanos consistente entre clientes usados contra o mesmo cluster, fazendo com que o servidor encapsule os detalhes da impressão.

Esta funcionalidade está habilitada por padrão. Para desabilitá-la, adicione a flag --server-print=false ao comando kubectl get.

Exemplos

Para imprimir informações sobre o status de um pod, use um comando como o seguinte:

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

A saída é similar a:

NAME       AGE
pod-name   1m

Classificando objetos de lista

Para gerar objetos em uma lista classificada na janela do seu terminal, você pode adicionar a flag --sort-by a um comando kubectl suportado. Classifique seus objetos especificando qualquer campo numérico ou string com a flag --sort-by. Para especificar um campo, use uma expressão jsonpath.

Sintaxe

kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
Exemplo

Para imprimir uma lista de pods classificados por nome, você executa:

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

Exemplos: Operações comuns

Use o seguinte conjunto de exemplos para ajudar você a se familiarizar com a execução das operações kubectl comumente usadas:

kubectl apply - Aplica ou atualiza um recurso de um arquivo ou stdin.

# Cria um serviço usando a definição em example-service.yaml.
kubectl apply -f example-service.yaml

# Cria um controlador de replicação usando a definição em example-controller.yaml.
kubectl apply -f example-controller.yaml

# Cria os objetos que são definidos em qualquer arquivo .yaml, .yml ou .json dentro do diretório <directory>.
kubectl apply -f <directory>

kubectl get - Lista um ou mais recursos.

# Lista todos os pods em formato de saída de texto simples.
kubectl get pods

# Lista todos os pods em formato de saída de texto simples e inclui informações adicionais (como nome do nó).
kubectl get pods -o wide

# Lista o controlador de replicação com o nome especificado em formato de saída de texto simples. Dica: Você pode encurtar e substituir o tipo de recurso 'replicationcontroller' com o alias 'rc'.
kubectl get replicationcontroller <rc-name>

# Lista todos os controladores de replicação e services juntos em formato de saída de texto simples.
kubectl get rc,services

# Lista todos os daemon sets em formato de saída de texto simples.
kubectl get ds

# Lista todos os pods executando no nó server01
kubectl get pods --field-selector=spec.nodeName=server01

kubectl describe - Exibe o estado detalhado de um ou mais recursos, incluindo os não inicializados por padrão.

# Exibe os detalhes do nó com nome <node-name>.
kubectl describe nodes <node-name>

# Exibe os detalhes do pod com nome <pod-name>.
kubectl describe pods/<pod-name>

# Exibe os detalhes de todos os pods que são gerenciados pelo controlador de replicação chamado <rc-name>.
# Lembre-se: Qualquer pod que seja criado pelo controlador de replicação recebe um prefixo com o nome do controlador de replicação.
kubectl describe pods <rc-name>

# Descreve todos os pods
kubectl describe pods

kubectl delete - Exclui recursos de um arquivo, stdin, ou especificando seletores de rótulo, nomes, seletores de recursos, ou recursos.

# Exclui um pod usando o tipo e nome especificados no arquivo pod.yaml.
kubectl delete -f pod.yaml

# Exclui todos os pods e services que têm o rótulo '<label-key>=<label-value>'.
kubectl delete pods,services -l <label-key>=<label-value>

# Exclui todos os pods, incluindo os não inicializados.
kubectl delete pods --all

kubectl exec - Executa um comando contra um contêiner em um pod.

# Obtém saída da execução de 'date' do pod <pod-name>. Por padrão, a saída é do primeiro contêiner.
kubectl exec <pod-name> -- date

# Obtém saída da execução de 'date' no contêiner <container-name> do pod <pod-name>.
kubectl exec <pod-name> -c <container-name> -- date

# Obtém um TTY interativo e executa /bin/bash do pod <pod-name>. Por padrão, a saída é do primeiro contêiner.
kubectl exec -ti <pod-name> -- /bin/bash

kubectl logs - Imprime os logs de um contêiner em um pod.

# Retorna um snapshot dos logs do pod <pod-name>.
kubectl logs <pod-name>

# Inicia o streaming dos logs do pod <pod-name>. Isso é similar ao comando Linux 'tail -f'.
kubectl logs -f <pod-name>

kubectl diff - Visualiza um diff das atualizações propostas para um cluster.

# Compara recursos incluídos em "pod.json".
kubectl diff -f pod.json

# Compara arquivo lido do stdin.
cat service.yaml | kubectl diff -f -

Exemplos: Criando e usando plugins

Use o seguinte conjunto de exemplos para ajudar você a se familiarizar com a escrita e uso de plugins do kubectl:

# cria um plugin simples em qualquer linguagem e nomeia o arquivo executável resultante
# para que comece com o prefixo "kubectl-"
cat ./kubectl-hello
#!/bin/sh

# este plugin imprime as palavras "hello world"
echo "hello world"

Com um plugin escrito, vamos torná-lo executável:

chmod a+x ./kubectl-hello

# e movê-lo para um local no nosso PATH
sudo mv ./kubectl-hello /usr/local/bin
sudo chown root:root /usr/local/bin

# Você agora criou e "instalou" um plugin kubectl.
# Você pode começar a usar este plugin invocando-o do kubectl como se fosse um comando regular
kubectl hello
hello world
# Você pode "desinstalar" um plugin, removendo-o da pasta no seu
# $PATH onde você o colocou
sudo rm /usr/local/bin/kubectl-hello

Para visualizar todos os plugins que estão disponíveis para kubectl, use o subcomando kubectl plugin list:

kubectl plugin list

A saída é similar a:

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 também avisa sobre plugins que não são executáveis, ou que são sombreados por outros plugins; por exemplo:

sudo chmod -x /usr/local/bin/kubectl-foo # remove permissão de execução
kubectl plugin list
The following kubectl-compatible plugins are available:

/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
  - warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
/usr/local/bin/kubectl-bar

error: one plugin warning was found

Você pode pensar em plugins como um meio de construir funcionalidades mais complexas sobre os comandos kubectl existentes:

cat ./kubectl-whoami

Os próximos exemplos assumem que você já fez kubectl-whoami ter o seguinte conteúdo:

#!/bin/bash

# este plugin faz uso do comando `kubectl config` para gerar
# informações sobre o usuário atual, baseado no contexto atualmente selecionado
kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'

Executar o comando acima fornece uma saída contendo o usuário para o contexto atual no seu arquivo KUBECONFIG:

# torna o arquivo executável
sudo chmod +x ./kubectl-whoami

# e o move para o seu PATH
sudo mv ./kubectl-whoami /usr/local/bin

kubectl whoami
Current user: plugins-user

Próximos passos

Última modificação October 26, 2025 at 5:07 PM PST: [pt-br] Update reference/kubectl/_index.md (#52562) (96c6972b7f)