С рабочей станции я могу перечислять модули, проверять состояние компонентов и т.д.
[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-Извините, если это звучит довольно ненормально. Я просто проверял человеческую страницу для дроссельной заслонки о том, как трубопровод работает рука об руку для дроссельной заслонки. Так что, проверяя пример страницы вручную, я застрял над '-' в приведенной ниже команде. На странице руководства в разделе 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. Если это сомнение ясно, мне было бы комфортно понять всю команду.
Заранее спасибо.
Релевантная часть, на которую следует обратить внимание, это -f -
(-
в вашем вопросе - это параметр опции -f
, указывающий имя файла)
Это означает чтение из/запись в файл -
, что является обычным специальным случаем для имен файлов. -
в данном контексте обычно означает stdin (при чтении) или stdout при записи.
То есть, первый процесс tar
записывает архив в stdout, который затем передается через throttle
, а затем передается второму процессу tar
, который читает архив из stdin.
Я разобью команду на части и объясню ее по частям:
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).