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 exemplocreate,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 exemplokubectl 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
- Use YAML em vez de JSON
já que YAML tende a ser mais amigável ao usuário, especialmente para arquivos de configuração.
-
-
flags: Especifica flags opcionais. Por exemplo, você pode usar as flags-sou--serverpara especificar o endereço e porta do servidor de API do Kubernetes.
Cuidado:
Flags que você especifica da linha de comando sobrescrevem valores padrão e quaisquer variáveis de ambiente correspondentes.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_HOSTestá definida, e - a variável de ambiente
KUBERNETES_SERVICE_PORTestá 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ção | Sintaxe | Descrição |
|---|---|---|
alpha |
kubectl 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. |
annotate |
kubectl 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-resources |
kubectl api-resources [flags] |
Lista os recursos de API que estão disponíveis. |
api-versions |
kubectl api-versions [flags] |
Lista as versões de API que estão disponíveis. |
apply |
kubectl apply -f FILENAME [flags] |
Aplica uma alteração de configuração a um recurso de um arquivo ou stdin. |
attach |
kubectl 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). |
auth |
kubectl auth [flags] [options] |
Inspeciona autorização. |
autoscale |
kubectl 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. |
certificate |
kubectl certificate SUBCOMMAND [options] |
Modifica recursos de certificado. |
cluster-info |
kubectl cluster-info [flags] |
Exibe informações de endpoint sobre o nó principal e serviços no cluster. |
completion |
kubectl completion SHELL [options] |
Gera código de completar automaticamente para o shell especificado (bash ou zsh). |
config |
kubectl config SUBCOMMAND [flags] |
Modifica arquivos kubeconfig. Consulte os subcomandos individuais para detalhes. |
convert |
kubectl 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. |
cordon |
kubectl cordon NODE [options] |
Marca o nó como não agendável. |
cp |
kubectl cp <file-spec-src> <file-spec-dest> [options] |
Copia arquivos e diretórios "de" e "para" contêineres. |
create |
kubectl create -f FILENAME [flags] |
Cria um ou mais recursos de um arquivo ou stdin. |
delete |
kubectl 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. |
describe |
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] |
Exibe o estado detalhado de um ou mais recursos. |
diff |
kubectl diff -f FILENAME [flags] |
Compara arquivo ou stdin contra a configuração ativa. |
drain |
kubectl drain NODE [options] |
Drena o nó em preparação para manutenção. |
edit |
kubectl 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. |
events |
kubectl events |
Lista eventos |
exec |
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] |
Executa um comando contra um contêiner em um pod. |
explain |
kubectl explain TYPE [--recursive=false] [flags] |
Obtém documentação de vários recursos. Por exemplo pods, nós, serviços, etc. |
expose |
kubectl 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. |
get |
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] |
Lista um ou mais recursos. |
kustomize |
kubectl 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. |
label |
kubectl 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. |
logs |
kubectl logs POD [-c CONTAINER] [--follow] [flags] |
Imprime os logs de um contêiner em um pod. |
options |
kubectl options |
Lista de opções globais de linha de comando, que se aplicam a todos os comandos. |
patch |
kubectl 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. |
plugin |
kubectl plugin [flags] [options] |
Fornece utilitários para interagir com plugins. |
port-forward |
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] |
Encaminha uma ou mais portas locais para um pod. |
proxy |
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] |
Executa um proxy para o servidor de API do Kubernetes. |
replace |
kubectl replace -f FILENAME |
Substitui um recurso de um arquivo ou stdin. |
rollout |
kubectl rollout SUBCOMMAND [options] |
Gerencia o rollout de um recurso. Tipos de recursos válidos incluem: deployments, daemonsets e statefulsets. |
run |
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags] |
Executa uma imagem especificada no cluster. |
scale |
kubectl 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. |
set |
kubectl set SUBCOMMAND [options] |
Configura recursos de aplicação. |
taint |
kubectl 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. |
top |
kubectl top (POD | NODE) [flags] [options] |
Exibe o uso de recursos (CPU/Memória/Armazenamento) de pod ou nó. |
uncordon |
kubectl uncordon NODE [options] |
Marca o nó como agendável. |
version |
kubectl version [--client] [flags] |
Exibe a versão do Kubernetes em execução no cliente e servidor. |
wait |
kubectl 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)
| NAME | SHORTNAMES | APIVERSION | NAMESPACED | KIND |
|---|---|---|---|---|
bindings |
v1 | true | Binding | |
componentstatuses |
cs |
v1 | false | ComponentStatus |
configmaps |
cm |
v1 | true | ConfigMap |
endpoints |
ep |
v1 | true | Endpoints |
events |
ev |
v1 | true | Event |
limitranges |
limits |
v1 | true | LimitRange |
namespaces |
ns |
v1 | false | Namespace |
nodes |
no |
v1 | false | Node |
persistentvolumeclaims |
pvc |
v1 | true | PersistentVolumeClaim |
persistentvolumes |
pv |
v1 | false | PersistentVolume |
pods |
po |
v1 | true | Pod |
podtemplates |
v1 | true | PodTemplate | |
replicationcontrollers |
rc |
v1 | true | ReplicationController |
resourcequotas |
quota |
v1 | true | ResourceQuota |
secrets |
v1 | true | Secret | |
serviceaccounts |
sa |
v1 | true | ServiceAccount |
services |
svc |
v1 | true | Service |
mutatingwebhookconfigurations |
admissionregistration.k8s.io/v1 | false | MutatingWebhookConfiguration | |
validatingwebhookconfigurations |
admissionregistration.k8s.io/v1 | false | ValidatingWebhookConfiguration | |
customresourcedefinitions |
crd,crds |
apiextensions.k8s.io/v1 | false | CustomResourceDefinition |
apiservices |
apiregistration.k8s.io/v1 | false | APIService | |
controllerrevisions |
apps/v1 | true | ControllerRevision | |
daemonsets |
ds |
apps/v1 | true | DaemonSet |
deployments |
deploy |
apps/v1 | true | Deployment |
replicasets |
rs |
apps/v1 | true | ReplicaSet |
statefulsets |
sts |
apps/v1 | true | StatefulSet |
tokenreviews |
authentication.k8s.io/v1 | false | TokenReview | |
localsubjectaccessreviews |
authorization.k8s.io/v1 | true | LocalSubjectAccessReview | |
selfsubjectaccessreviews |
authorization.k8s.io/v1 | false | SelfSubjectAccessReview | |
selfsubjectrulesreviews |
authorization.k8s.io/v1 | false | SelfSubjectRulesReview | |
subjectaccessreviews |
authorization.k8s.io/v1 | false | SubjectAccessReview | |
horizontalpodautoscalers |
hpa |
autoscaling/v2 | true | HorizontalPodAutoscaler |
cronjobs |
cj |
batch/v1 | true | CronJob |
jobs |
batch/v1 | true | Job | |
certificatesigningrequests |
csr |
certificates.k8s.io/v1 | false | CertificateSigningRequest |
leases |
coordination.k8s.io/v1 | true | Lease | |
endpointslices |
discovery.k8s.io/v1 | true | EndpointSlice | |
events |
ev |
events.k8s.io/v1 | true | Event |
flowschemas |
flowcontrol.apiserver.k8s.io/v1beta2 | false | FlowSchema | |
prioritylevelconfigurations |
flowcontrol.apiserver.k8s.io/v1beta2 | false | PriorityLevelConfiguration | |
ingressclasses |
networking.k8s.io/v1 | false | IngressClass | |
ingresses |
ing |
networking.k8s.io/v1 | true | Ingress |
networkpolicies |
netpol |
networking.k8s.io/v1 | true | NetworkPolicy |
runtimeclasses |
node.k8s.io/v1 | false | RuntimeClass | |
poddisruptionbudgets |
pdb |
policy/v1 | true | PodDisruptionBudget |
podsecuritypolicies |
psp |
policy/v1beta1 | false | PodSecurityPolicy |
clusterrolebindings |
rbac.authorization.k8s.io/v1 | false | ClusterRoleBinding | |
clusterroles |
rbac.authorization.k8s.io/v1 | false | ClusterRole | |
rolebindings |
rbac.authorization.k8s.io/v1 | true | RoleBinding | |
roles |
rbac.authorization.k8s.io/v1 | true | Role | |
priorityclasses |
pc |
scheduling.k8s.io/v1 | false | PriorityClass |
csidrivers |
storage.k8s.io/v1 | false | CSIDriver | |
csinodes |
storage.k8s.io/v1 | false | CSINode | |
csistoragecapacities |
storage.k8s.io/v1 | true | CSIStorageCapacity | |
storageclasses |
sc |
storage.k8s.io/v1 | false | StorageClass |
volumeattachments |
storage.k8s.io/v1 | false | VolumeAttachment |
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ída | Descriçã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 json |
Gera 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 kyaml |
Gera um objeto de API formatado em KYAML (alfa, requer variável de ambiente KUBECTL_KYAML="true"). |
-o name |
Imprime apenas o nome do recurso e nada mais. |
-o wide |
Saída no formato de texto simples com qualquer informação adicional. Para pods, o nome do nó é incluído. |
-o yaml |
Gera 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
Nota:
O comandokubectl get é geralmente usado para recuperar um ou mais
recursos do mesmo tipo de recurso. Ele possui um rico conjunto de flags que permite
personalizar o formato de saída usando a flag -o ou --output, por exemplo.
Você pode especificar a flag -w ou --watch para começar a observar atualizações para um
objeto específico. O comando kubectl describe é mais focado em descrever os muitos
aspectos relacionados de um recurso especificado. Ele pode realizar várias chamadas de API
para o servidor de API para construir uma visualização para o usuário. Por exemplo, o comando kubectl describe node
recupera não apenas as informações sobre o nó, mas também um resumo dos
pods executando nele, os eventos gerados para o nó, etc.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
- Leia a documentação de referência do
kubectl:- a referência de comandos kubectl
- a referência de argumentos de linha de comando
- Aprenda sobre convenções de uso do
kubectl - Leia sobre suporte ao JSONPath no kubectl
- Leia sobre como estender kubectl com plugins
- Para descobrir mais sobre plugins, veja plugin CLI de exemplo.