«kubectl get» vs «kubectl logs» - разное поведение

С рабочей станции я могу перечислять модули, проверять состояние компонентов и т.д.

[dude@bionic K8s]$ kubectl get componentstatuses
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-2               Healthy   {"health":"true"}
etcd-0               Healthy   {"health":"true"}
etcd-1               Healthy   {"health":"true"}

[dude@bionic K8s]$ kubectl get svc -A
NAMESPACE     NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes   ClusterIP   10.32.0.1    <none>        443/TCP                  41d
kube-system   kube-dns     ClusterIP   10.32.0.10   <none>        53/UDP,53/TCP,9153/TCP   49m

[dude@bionic K8s]$ kubectl get pod -n kube-system coredns-574fc576d6-4hbl4
NAME                       READY   STATUS             RESTARTS   AGE
coredns-574fc576d6-4hbl4   0/1     CrashLoopBackOff   13         46m

Но когда я хочу просмотреть журналы (для отладки CrashLoop выше), я получаю ошибку сертификата:

[dude@bionic K8s]$ kubectl logs -n kube-system coredns-574fc576d6-4hbl4
plugin/kubernetes: Get "https://10.32.0.1:443/version?timeout=32s": x509: certificate is valid for 172.16.68.221, 172.16.68.222, 172.16.68.223, 172.16.68.69, 127.0.0.1, not 10.32.0.1

Почему это? Моя установка - это гапрокси перед тремя управляющими узлами. Haproxy находится на 172.16.68.69, который настроен в моем kubeconfig:

apiVersion: v1
clusters:
- cluster:
    server: https://172.16.68.69:6443

Это как по какой-то причине «kubectl logs» решает как-то обнаружить ClusterIP и использовать его напрямую, в то время как другие команды kubectl используют правильно настроенный сервер.

-121--310158- что такое '-' в примере команды man throttle Извините, если это звучит довольно ненормально. Я просто проверял человеческую страницу для дроссельной заслонки о том, как трубопровод работает рука об руку для дроссельной заслонки. Так что, проверяя ручной пример страницы, я застрял...

Извините, если это звучит довольно ненормально. Я просто проверял человеческую страницу для дроссельной заслонки о том, как трубопровод работает рука об руку для дроссельной заслонки. Так что, проверяя пример страницы вручную, я застрял над '-' в приведенной ниже команде. На странице руководства в разделе EXAMPLE первый пример был следующим:

   To limit the bandwidth of a tar back-up to a remote server to 1 Mbit/s, type:

   $ tar czf - . | throttle -m 1 | ssh host 'tar xzf - -C /bak'

Теперь здесь я хотел понять '-' сразу после czf и '-' после xzf. Если это сомнение ясно, мне было бы комфортно понять всю команду.

Заранее спасибо.

0
задан 7 May 2021 в 17:19
2 ответа

Релевантная часть, на которую следует обратить внимание, это -f - (- в вашем вопросе - это параметр опции -f, указывающий имя файла)

Это означает чтение из/запись в файл -, что является обычным специальным случаем для имен файлов. - в данном контексте обычно означает stdin (при чтении) или stdout при записи.

То есть, первый процесс tar записывает архив в stdout, который затем передается через throttle, а затем передается второму процессу tar, который читает архив из stdin.

0
ответ дан 7 May 2021 в 19:59

Я разобью команду на части и объясню ее по частям:

tar czf - .

Эта команда говорит tar создать архив из текущего каталога и сохранить вывод в файл, указанный аргументом -f. Здесь файл -, что означает стандартный вывод.

Символ | принимает стандартный вывод от левой команды и передает его как стандартный ввод правой команде.

В данном случае вывод tar передается в качестве ввода команде throttle -m 1, которая затем предоставляет вывод последней команде:

ssh host 'tar xzf - -C /bak'

Вывод передается по SSH команде tar, запущенной на host, используя SSH в качестве транспорта. Аргумент xzf - означает, что tar читает со стандартного ввода и извлекает архив. Перед извлечением tar переходит в каталог /bak.

В качестве резюме, при создании архива, -f - означает, что tar выводит результат на стандартный вывод (stdout).

При извлечении архива -f - означает, что tar считывает входной архив со стандартного ввода (stdin).

1
ответ дан 7 May 2021 в 19:59

Теги

Похожие вопросы