Я расскажу о двух важных аспектах устранения неполадок OpenShift:
- Демоны OpenShift (OpenShift daemons)
- Поды (Pods) — наименьшая вычислительная единица
Кластер Openshift состоит из нескольких узлов, каждый из которых играет определенную роль.
MASTER node :
Мастер узел(ы) — это узел, содержащая плоскость управления. Плоскость управления включает в себя: сервер API, сервер controller manager и etcd. Мастер узел управляет узлами приложений/вычислений в кластере и планирует запуск подов на них.
Мастер ноды в основном обрабатывают запросы от клиентов (Нод, Пользователей, Администраторов и других инфраструктурных систем, развернутых (задеплоинных) в Openshift).
INFRASTRUCTURE (инфраструктурная) node :
На этих узлах выполняются специфичные для инфраструктуры службы, такие как маршрутизатор, реестр образов и другие инфраструктурные службы.
APPLICATION / COMPUTE (вычислительная) node :
Узел предоставляет среду выполнения для контейнеров. По сути, на этих узлах выполняется контейнерное приложение, а планирование работы этих модулей осуществляется мастер нодами.
BASTION node:
Этот узел служит основным сервером развертывания и управления кластером OpenShift. Он в основном используется администратором кластера для операций управления и развертывания.
Все узлы OpenShift (кроме Bastion) запускают службы «docker» и «atomic-openshift-node» под SystemD. Проверьте состояние этих служб, используя:
$ systemctl status atomic-openshift-node.service
$ systemctl status docker.service
Поскольку оба демона являются демонами SystemD, журналы можно получить с помощью команды journalctl
. Эти журналы помогут вам в случае, если эти демоны не запускаются или выходят из строя после первоначального запуска.
$ journalctl -u atomic-openshift-node
$ journalctl -u docker.service
Учитывая, что обе вышеупомянутые службы показывают статусы работы, пришло время посмотреть, все ли узлы общаются друг с другом и образуют кластер. Чтобы получить текущий статус и подробную информацию обо всех узлах OpenShift, выполните приведенную ниже команду на одном из узлов инфраструктуры. В приведенном ниже выводе обратите внимание на статус каждого узла: вы должны увидеть «Ready», что означает, что все в порядке. Вы также можете проверить, правильно ли сопоставлены роли с соответствующими узлами.
$ oc get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
appnode01 Ready compute 69d v1.11.0+d4cacc0 192.168.122.10 <none> Red Hat Enterprise Linux 3.10.0-957.1.3.el7.x86_64 docker://1.13.1
appnode02 Ready compute 69d v1.11.0+d4cacc0 192.168.122.11 <none> Red Hat Enterprise Linux 3.10.0-957.1.3.el7.x86_64 docker://1.13.1
infrnode01 Ready infra,master 69d v1.11.0+d4cacc0 192.168.122.12 <none> Red Hat Enterprise Linux 3.10.0-957.1.3.el7.x86_64 docker://1.13.1
infrnode02 Ready infra,master 69d v1.11.0+d4cacc0 192.168.122.13 <none> Red Hat Enterprise Linux 3.10.0-957.1.3.el7.x86_64 docker://1.13.1
infrnode03 Ready infra,master 69d v1.11.0+d4cacc0 192.168.122.14 <none> Red Hat Enterprise Linux 3.10.0-957.1.3.el7.x86_64 docker://1.13.1
Более подробную информацию о каждом узле можно получить с помощью команды: oc describe node
. Несколько важных деталей, которые вы можете отметить:
- Какая роль (compute или infra) сопоставлена хосту
- Сведения об операционной системе этого хоста
- Можно ли запланировать поды, если это вычислительный (compute) хост
- Статус ресурсов (диск, память, процессор и Pid).
- Текущее использование ресурсов на этом хосте.
- Какие поды работают на этом хосте
- Подробности о компонентах kubelet и kube-proxy
# oc describe node appnode01
Name: appnode01
Roles: compute
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=Standard_DS13_v2
beta.kubernetes.io/os=linux
...
node-role.kubernetes.io/compute=true
...
Taints: <none>
Unschedulable: false
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OutOfDisk False Fri, 24 Apr 2020 12:23:43 +0000 Wed, 11 Mar 2020 13:57:02 +0000 KubeletHasSufficientDisk kubelet has sufficient disk space available
MemoryPressure False Fri, 24 Apr 2020 12:23:43 +0000 Wed, 11 Mar 2020 13:57:02 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Fri, 24 Apr 2020 12:23:43 +0000 Wed, 11 Mar 2020 13:57:02 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Fri, 24 Apr 2020 12:23:43 +0000 Wed, 06 Feb 2019 18:17:16 +0000 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Fri, 24 Apr 2020 12:23:43 +0000 Wed, 11 Mar 2020 13:57:02 +0000 KubeletReady kubelet is posting ready status
Addresses:
InternalIP: 192.168.122.10
Hostname: appnode01
Capacity:
cpu: 8
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 57700476Ki
pods: 250
Allocatable:
cpu: 8
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 57598076Ki
pods: 250
System Info:
Machine ID: 6xa77495007y44b5z7983fa8f0e34d11
...
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://1.13.1
Kubelet Version: v1.11.0+d4cacc0
Kube-Proxy Version: v1.11.0+d4cacc0
ProviderID: azure:///subscriptions/adf9a38a26-d202–51d7–8405–9711d283af5c/resourceGroups/ajit-ktv-RG01-prod/providers/Microsoft.Compute/virtualMachines/APPNODE01
Non-terminated Pods: (14 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ewc-1 docker-registry-1–4xm2r 100m (1%) 0 (0%) 256Mi (0%) 0 (0%)
ewc-1 ec-api-2–8qgzs 0 (0%) 0 (0%) 2G (3%) 2G (3%)
...
test-project-2 cakephp-mysql-persistent-1-nktd6 0 (0%) 0 (0%) 512Mi (0%) 512Mi (0%)
test-project-2 mysql-1-nh8xc 0 (0%) 0 (0%) 512Mi (0%) 512Mi (0%)
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
- - - - - - - - - - -
cpu 410m (5%) 220m (2%)
memory 27680160256 (46%) 27327838720 (46%)
Events: <none>
Как упоминалось выше, мастер ноды запускают наиболее важные процессы управления. Проверка состояния и журналов этих процессов отличается от описанной выше, поскольку все эти процессы выполняются как статический под на мастер нодах.
Вы можете получить журналы для каждой службы:
API master-logs api api
Controller master-logs controllers controllers
ETCD master-logs etcd etcd
Теперь самое интересное, связанное с подами отладки, которые являются наименьшим вычислительным юнитом openshift/K8s.
Я классифицирую отладку подов (pod debugging) двумя способами:
- Под не запускается
- Под запустился, но не работает должным образом или выдает ошибки.
Я обнаружил, что oc debug POD_NAME
— один из лучших подходов для обработки любого из вышеупомянутых этапов пода. Эта команда запускает новый под и использует оболочку в качестве точки входа. Это позволяет вам проверить, что происходит во время выполнения фактической точки входа пода, и получить полезную информацию для устранения проблемы.
Чтобы просмотреть подробную информацию о работающем поде, используйте oc describe POD_NAME
. В приведенном ниже выводе следует отметить несколько важных вещей:
- Событие (Event) — это самый важный раздел, в котором нужно проверить, работает ли что-то в этом поде не так, как ожидалось. В большинстве случаев это даст вам представление о том, в чем может быть проблема.
- На каком хосте работает этот под
- Статус базового контейнера(ов)
$ oc describe pod ec-api-2-mlr9b
Name: ec-api-2-mlr9b
Namespace: ewc-1
Priority: 0
PriorityClassName: <none>
Node: appnode01/192.168.122.20
Start Time: Tue, 09 Apr 2019 22:22:36 +0000
Labels: deployment=ec-api-2
deploymentconfig=ec-api
name=ec-api
Annotations: openshift.io/deployment-config.latest-version=2
openshift.io/deployment-config.name=ec-api
openshift.io/deployment.name=ec-api-2
openshift.io/scc=restricted
Status: Running
IP: 10.128.3.20
Controlled By: ReplicationController/ec-api-2
Containers:
ec-api:
Container ID: docker://e83868f45c9a0a7032d3b410fd0f736cbca9edf731ad8b66bf92d2a6f5b6484
Image: docker-registry.default.svc:5000/ewc-1/ec-api@sha256:7ce495cd097f52c3ee53cc72bbbb9943714f16868da264d60492b93148198a7d
Image ID: docker-pullable://docker-registry.default.svc:5000/ewc-1/ec-api@sha256:7ce495cd097f52c3ee53cc72bbbb9943714f16868da264d60492b93148198a7d
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 09 Apr 2019 22:22:43 +0000
Ready: True
Restart Count: 0
Limits:
memory: 2G
Requests:
memory: 2G
Liveness: http-get http://:8080/ delay=60s timeout=5s period=10s #success=1 #failure=3
Readiness: http-get http://:8080/ delay=30s timeout=5s period=10s #success=1 #failure=3
Environment:
DB_USERNAME: <set to the key 'username' in secret 'ec-db'> Optional: false
DB_PASSWORD: <set to the key 'password' in secret 'ec-db'> Optional: false
...
Dkapua.config.dir=/etc/opt/ec/defaults
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-dwdbk (ro)
Volumes:
default-token-dwdbk:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-dwdbk
Optional: false
QoS Class: Burstable
Node-Selectors: node-role.kubernetes.io/compute=true
Tolerations: node.kubernetes.io/memory-pressure:NoSchedule
Events: <none>
Вы можете просмотреть журналы запущенного пода, выполняющего один контейнер внутри себя:
$ oc -n <PROJECT_NAME> logs <POD_NAME>
Для пода с несколькими контейнерами используйте опцию -c
, чтобы проверить журналы для определенного контейнера.
Если вы хотите отслеживать текущие журналы (аналогично команде tail -f), используйте опцию -f
вместе с приведенной выше командой.
$ oc -n <PROJECT_NAME> logs -f <POD_NAME>
Вы можете изучить несколько дополнительных опций для просмотра журналов за определенный период времени, начиная с определенной даты и времени и т. д.
https://blog.clairvoyantsoft.com/openshift-troubleshooting-aa7cc67b0334?gi=a750f4a08f39
Примечание:
Для поиска работающих служб origin на сервере, удобно использовать поиск по процессам:
sudo systemctl list-units | grep origin
origin-master-api.service
Atomic OpenShift Master API
origin-master-controllers.service
Atomic OpenShift Master Controllers
Страница с рекомендациями еще будет дополняться…