Практика устранения неполадок KubeSphere (3)

Kubernetes
Практика устранения неполадок KubeSphere (3)

Следующие две статьи:

После использования kubesphere я также зафиксировал некоторые проблемы с использованием, я надеюсь, что это может быть полезно для других, и испытать шелковисто-гладкую платформу управления контейнерами.

14. Ненормальное удаление контейнера

Я использовал helm для развертывания консула раньше и удалял консула позже

[root@master ~]# helm delete consul --purge

После проверки статуса пода в консуле всегда былоTerminating

[root@master ~]# kubectl get pods -n common-service
NAME             READY   STATUS        RESTARTS   AGE
consul-1         1/2     Terminating   1          24d
redis-master-0   1/1     Running       1          17d
redis-slave-0    1/1     Running       1          8d
redis-slave-1    1/1     Running       1          17d

Посмотреть статус

[root@master ~]# kubectl describe pods consul-1 -n common-service

Events:
  Type     Reason      Age                     From             Message
  ----     ------      ----                    ----             -------
  Warning  FailedSync  3m41s (x4861 over 22h)  kubelet, node02  error determining status: rpc error: code = DeadlineExceeded desc = context deadline exceeded

Предложение по утилизации:

  • Обновите докер до версии 18. В этой версии используется новый containerd и исправлено множество ошибок.
  • Если есть завершающее состояние, вы можете предоставить экспертам контейнера для расследования.Не рекомендуется принудительно удалять его, так как это может вызвать некоторые проблемы в бизнесе.

Предполагается, что это ошибка в версии 17 dockerd. доступныйkubectl -n cn-staging delete pod apigateway-6dc48bf8b6-clcwk --force --grace-period=0принудительно удалить модуль, ноdocker psвсе еще вижу контейнер

[root@master ~]# kubectl -n common-service delete pod consul-1 --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "consul-1" force deleted
[root@master ~]# kubectl get pods -n common-service
NAME             READY   STATUS    RESTARTS   AGE
redis-master-0   1/1     Running   1          17d
redis-slave-0    1/1     Running   1          8d
redis-slave-1    1/1     Running   1          17d

Посмотреть на узле2

[root@node02 ~]# docker ps -a |grep consul
b5ea9ace7779        fc6c0a74553d                                    "/entrypoint.sh /run…"   3 weeks ago         Up 3 weeks                                     k8s_consul_consul-1_common-service_5eb39c90-8503-4125-a2f0-63f177e36293_1
13192855eb6f        mirrorgooglecontainers/pause-amd64:3.1          "/pause"                 3 weeks ago         Exited (0) 23 hours ago                        k8s_POD_consul-1_common-service_5eb39c90-8503-4125-a2f0-63f177e36293_0

Используйте удобное состояние ресурса для выпуска, если оно существует в метаданных финализаторов, ресурсы k8sfinalizers, то ресурс вообще создается программой, а в метаданных ресурса создаетfinalizersДобавляется идентификатор, а это значит, что при удалении ресурса программа, создавшая ресурс, перед удалением должна произвести очистку, после очистки ей необходимо удалить идентификатор из ресурса.finalizers, и только тогда ресурс будет окончательно полностью удален. Например, некоторые ресурсы, созданные Rancher, будут записаныfinalizersлоготип.

Предложение по обработке:kubectl editВручную отредактируйте определение ресурса и удалите его.finalizers, затем снова посмотрите на ресурс, вы обнаружите, что он был удален.

Устранение неполадок пятнадцати исключений журнала k8s

После обновления от V2.0 до V2.1, после проверки Kubesphere, нет журнала

Сначала исключите, являются ли соответствующие модули, отвечающие за сбор журналов, нормальными, Fluent Bit + ElasticSearch

[root@master ~]# kubectl get po -n kubesphere-logging-system
NAME                                                              READY   STATUS      RESTARTS   AGE
elasticsearch-logging-curator-elasticsearch-curator-158086m9zv5   0/1     Completed   0          2d13h
elasticsearch-logging-curator-elasticsearch-curator-158095fmdlz   0/1     Completed   0          37h
elasticsearch-logging-curator-elasticsearch-curator-158103bwf8f   0/1     Completed   0          13h
elasticsearch-logging-data-0                                      1/1     Running     1          8d
elasticsearch-logging-data-1                                      1/1     Running     774        69d
elasticsearch-logging-discovery-0                                 1/1     Running     478        56d
elasticsearch-logging-kibana-94594c5f-q7sht                       1/1     Running     1          22d
fluent-bit-2b9kj                                                  2/2     Running     2          23h
fluent-bit-bf52m                                                  2/2     Running     2          23h
fluent-bit-pkb9f                                                  2/2     Running     2          22h
fluent-bit-twd98                                                  2/2     Running     2          23h
logging-fluentbit-operator-56c6b84b94-4nzzn                       1/1     Running     1          23h
logsidecar-injector-5cbf7bd868-cr2kh                              1/1     Running     1          11d
logsidecar-injector-5cbf7bd868-mp46g                              1/1     Running     1          22d

Зная, что логи раньше хранились через es, сопоставьте сервис kubesphere-logging-system с режимом NodePort, проверьте индекс и обнаружите, что только jaeger

curl elasticsearch-logging-data.kubesphere-logging-system.svc:9200/_cat/indices

После проверки индекс в норме

Просмотр битовых журналов Fluent

[root@master ~]# kubectl -n kubesphere-logging-system logs -f fluent-bit-2b9kj -c fluent-bit
I0207 13:53:25.667667       1 fluentbitdaemon.go:135] Start Fluent-Bit daemon...
Fluent Bit v1.0.5
Copyright (C) Treasure Data

[2020/02/07 13:53:26] [ info] [storage] initializing...
[2020/02/07 13:53:26] [ info] [storage] in-memory
[2020/02/07 13:53:26] [ info] [storage] normal synchronization mode, checksum disabled
[2020/02/07 13:53:26] [ info] [engine] started (pid=15)
[2020/02/07 13:53:26] [ info] [filter_kube] https=1 host=kubernetes.default.svc port=443
[2020/02/07 13:53:26] [ info] [filter_kube] local POD info OK
[2020/02/07 13:53:26] [ info] [filter_kube] testing connectivity with API server...
[2020/02/07 13:53:36] [ warn] net_tcp_fd_connect: getaddrinfo(host='kubernetes.default.svc'): Name or service not known
[2020/02/07 13:53:36] [error] [filter_kube] upstream connection error
[2020/02/07 13:53:36] [ warn] [filter_kube] could not get meta for POD fluent-bit-2b9kj

Раньше из-за системного диска данные контейнера докера переносились на диск данных, из-за формы ссылки сбор логов был ненормальным.

Шаг 1. Добавьте containerLogMountedPath в программу установки ConfigMap ks. Конкретный путь заполняется в соответствии с фактической средой

[root@master docker]# docker info -f '{{.DockerRootDir}}'
/data/docker
[root@master docker]# ll /var/lib/docker
lrwxrwxrwx. 1 root root 12 Oct 10 19:01 /var/lib/docker -> /data/docker

Шаг 2. Подождите, пока установщик автоматически обновит ConfigMap оператора fluent-bit, около нескольких минут. Пока containerLogMountedPath не будет обновлен до ConfigMap (старайтесь не изменять этот ConfigMap напрямую, чтобы не повлиять на будущие обновления).

Шаг 3. Перезапустите Fluent Bit

# 删除 fluent-bit Daemonset
[root@master ~]# kubectl scale -n kubesphere-logging-system deployment logging-fluentbit-operator --replicas=0
deployment.extensions/logging-fluentbit-operator scaled
[root@master ~]# kubectl delete -n kubesphere-logging-system daemonsets fluent-bit
daemonset.extensions "fluent-bit" deleted

# 重启 Fluent-bit Operator Deployment
[root@master ~]# kubectl scale -n kubesphere-logging-system deployment logging-fluentbit-operator --replicas=1
deployment.extensions/logging-fluentbit-operator scaled

# 检查 fluent-bit 是否起来
[root@master ~]# kubectl get po -n kubesphere-logging-system
NAME                                                              READY   STATUS              RESTARTS   AGE
elasticsearch-logging-curator-elasticsearch-curator-158086m9zv5   0/1     Completed           0          2d13h
elasticsearch-logging-curator-elasticsearch-curator-158095fmdlz   0/1     Completed           0          37h
elasticsearch-logging-curator-elasticsearch-curator-158103bwf8f   0/1     Completed           0          13h
elasticsearch-logging-data-0                                      1/1     Running             1          8d
elasticsearch-logging-data-1                                      1/1     Running             774        69d
elasticsearch-logging-discovery-0                                 1/1     Running             478        56d
elasticsearch-logging-kibana-94594c5f-q7sht                       1/1     Running             1          22d
fluent-bit-5rzpv                                                  0/2     ContainerCreating   0          3s
fluent-bit-nkzdv                                                  0/2     ContainerCreating   0          3s
fluent-bit-pwhw7                                                  0/2     ContainerCreating   0          3s
fluent-bit-w5t8k                                                  0/2     ContainerCreating   0          3s
logging-fluentbit-operator-56c6b84b94-d7vgn                       1/1     Running             0          5s
logsidecar-injector-5cbf7bd868-cr2kh                              1/1     Running             1          11d
logsidecar-injector-5cbf7bd868-mp46g                              1/1     Running             1          22d

Когда флюс-бит всех нод запущен, можно проверить, что лог восстановился

Ссылаться на:GitHub.com/плачущий шар/…

Ссылаться на:GitHub.com/плачущий шар/…

Хранилище 16 k8s

Есть модули, работающие ненормально, проверьте событие как исключение хранилища, проверьте статус ceph как исключение

[root@master test]# ceph -s
    cluster 774df8bf-d591-4824-949c-b53826d1b24a
     health HEALTH_WARN
            mon.master low disk space
     monmap e1: 1 mons at {master=10.234.2.204:6789/0}
            election epoch 14, quorum 0 master
     osdmap e3064: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v9076023: 192 pgs, 2 pools, 26341 MB data, 8231 objects
            64888 MB used, 127 GB / 190 GB avail
                 192 active+clean
  client io 17245 B/s wr, 0 op/s rd, 4 op/s wr
  

В kubelet по умолчанию стоит gc, а здесь вручную почистить файл докера

# 查看文件
[root@master overlay2]# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              34                  12                  8.463GB             5.225GB (61%)
Containers          46                  21                  836.6kB             836.5kB (99%)
Local Volumes       4                   0                   59.03MB             59.03MB (100%)
Build Cache         0                   0                   0B      

# 清理文件
[root@master overlay2]# docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N] y  

Семнадцать Изменить режим kube-proxy с iptables на ipvs

  • modeprobe между каждым узлом
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

yum install -y ipset ipvsadm

kubectl get configmap kube-proxy -n kube-system -oyaml

Просмотр текущего ipvsadm без правил

[root@master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  • Измените режим ipvs в configmap kube-proxy на ipvs на главном узле.

Удалить предыдущий модуль kube-proxy

[root@master ~]# kubectl get pod  -n kube-system|grep kube-proxy|awk '{print "kubectl delete po "$1" -n kube-system"}'|sh
pod "kube-proxy-2wnst" deleted	
pod "kube-proxy-bfrk9" deleted
pod "kube-proxy-kvslw" deleted

Проверьте через ipvsadm, что он был переключен.

18 Установка приложения

В Практике устранения неполадок 2 я записал использование терминала для установки приложений, в kubesphere 2.1 я могу использовать веб-интерфейс для установки приложений в хранилище приложений, добавленных комментариями в пространстве предприятия, и снова записывать шаги операции.

  • Добавьте репозиторий в репозиторий приложений в корпоративном пространстве.

  • Выбор установки приложения в конкретном проекте происходит из шаблона приложения

  • Выберите источник репо и найдите нужный пакет графиков.

Девятнадцать Служб

Благодаря KubeSphere наши собственные приложения получают широкие возможности управления сервисами, а режим sidercar istio используется для внедрения envoy для достижения серии канареечных выпусков, балансировки нагрузки, обнаружения и контроля трафика, ограничения тока, предохранителей и понижения сервисных сетей. В настоящее время я протестировал управление микросервисами в своем собственном приложении, и мне кажется, что им очень легко пользоваться. Позже у меня будет возможность записать процесс.

Я сам разобрался с конспектами k8s, и те, кто на подъеме, могут быстро учиться и общаться:GitHub.com/RedHat Series/Арвин…Поддержите KubeSphere, местную платформу управления контейнерами, и внесите свой вклад в сообщество.