Kubectl: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 11: Строка 11:
   
 
==Сортировка==
 
==Сортировка==
  +
 
<code>
 
<code>
 
kubectl get events --sort-by=.metadata.creationTimestamp
 
kubectl get events --sort-by=.metadata.creationTimestamp
 
</code>
 
</code>
  +
  +
==Поиск по полю==
  +
Скорее всего это все можно делать используя <code>-o jsonpath</code> но я встречал неоднократные упоминания о багах, по-тому использую <code>jq</code>
  +
===простое условие==
  +
Получить только имя репликасетов у которых число реплик = 1
  +
<code>
  +
kubectl get rs -o json | jq -r '.items[] |select(.status.replicas==1) | .metadata.name'
  +
</code>
  +
  +
===Поиск специфичного объекта===
  +
Получить секрет(ы) у которых в аннотации в поле <code>.metadata.annotations."lcm.mirantis.com/cluster-secret-type"</code> значение <code>"kubeconfig"</code> <BR>
  +
(Пример специфичен для окружений определенного вида, но работает для любых объектов)
  +
<code>
  +
kubectl get secret -A -o json | jq ' .items[] | select(.metadata.annotations."lcm.mirantis.com/cluster-secret-type"=="kubeconfig") | .metadata.name'
  +
</code>
  +
  +
Как писать такие запросы:
  +
* Получить список, тут видно что все объекты помешены в List <code>.items[]</code>
  +
<PRE>
  +
{
  +
"apiVersion": "v1",
  +
"items": [
  +
{
  +
"apiVersion": "v1",
  +
"kind": "Secret",
  +
"metadata": {
  +
"annotations": {
  +
"kubernetes.io/service-account.name": "default",
  +
"kubernetes.io/service-account.uid": "1ccf69fb-2f37-4684-bb16-19a8f20fd2fe"
  +
},
  +
</PRE>
  +
* Конструкция <code> jq '.items[] | <команда>' проверяет каждый элемент списка, возвращая только соответствующие условию (в примере это условие <code>select(.metadata.annotations."lcm.mirantis.com/cluster-secret-type"=="kubeconfig")</code>)
  +
* <code>.metadata.name</code> - вывести имя (но тут можно и содержимое или другое поле по желанию)

Версия 14:41, 19 февраля 2024

Шпаргалка по kubectl

--show-managed-fields - посмотреть какие были операции с объектом

иногда помогает найти когда были работы с объектом, например меняли ли его недавно (может не работать с CRD)
kubectl -n kaas get secret iam-api-secrets --show-managed-fields -o yaml

Сортировка

kubectl get events --sort-by=.metadata.creationTimestamp

Поиск по полю

Скорее всего это все можно делать используя -o jsonpath но я встречал неоднократные упоминания о багах, по-тому использую jq

=простое условие

Получить только имя репликасетов у которых число реплик = 1

kubectl get rs  -o json | jq -r '.items[] |select(.status.replicas==1) | .metadata.name'

Поиск специфичного объекта

Получить секрет(ы) у которых в аннотации в поле .metadata.annotations."lcm.mirantis.com/cluster-secret-type" значение "kubeconfig"
(Пример специфичен для окружений определенного вида, но работает для любых объектов) kubectl get secret -A -o json | jq ' .items[] | select(.metadata.annotations."lcm.mirantis.com/cluster-secret-type"=="kubeconfig") | .metadata.name'

Как писать такие запросы:

  • Получить список, тут видно что все объекты помешены в List .items[]
{
  "apiVersion": "v1",
  "items": [
    {
      "apiVersion": "v1",
      "kind": "Secret",
      "metadata": {
        "annotations": {
          "kubernetes.io/service-account.name": "default",
          "kubernetes.io/service-account.uid": "1ccf69fb-2f37-4684-bb16-19a8f20fd2fe"
        },
  • Конструкция jq '.items[] | <команда>' проверяет каждый элемент списка, возвращая только соответствующие условию (в примере это условие select(.metadata.annotations."lcm.mirantis.com/cluster-secret-type"=="kubeconfig"))
  • .metadata.name - вывести имя (но тут можно и содержимое или другое поле по желанию)