Учора до ночі провозився з #clouddriver від #Spinnaker: це компонент, який відповідає за опрос стану хмарних сервісів (Kubernetes кластера, Docker регістрі). Под почав крашитись після перевода на нову #EKS ноду та вижирати доступні CPU ресурси.
Раніше я виявив, що така поведінка через накопичення команд опросу EKS кластерів та Docker регістрі. Справа у тому, що для обох процесів треба отрмати #AWS токени.
Для EKS це була команда:
```
aws eks get-token --cluster-name XXX --output json
```
Але в поді іноді її виконання займало до 10 секунд. AWS CLI написаний на #Python, тому працює повільно. Заміним цю команду на aws-iam-authenticator, який написаний на #Go та працює в 5-6 разів швидше:
```
aws-iam-authenticator token -i XXX
```
Наступна проблема з #Docker. Команда автентифікації була
```
aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d | sed 's/^AWS://'
```
Ця команда теж іноді по 10-15 секунд виконувалась та віджирала CPU. Токен дійсний на 12 годин, але опрос запускається кожні 5 хвилин, тому є сенс кеширувати його. Вигадав таку команду, не лякайтесь ;-) Її треба було саме однорядкову, тому що вона буде додана в #YAML конфіг #Spinnaker:
```
[ ! -f /tmp/ecr-token ] || \
[ $(( $(date +%s) - $(date +%s -r /tmp/ecr-token) )) -gt 36000 ] \
&& aws ecr get-authorization-token --output text \
--query "authorizationData[].authorizationToken" | \
base64 -d | sed "s/^AWS://" > /tmp/ecr-token; \
cat /tmp/ecr-token
```
Вона перевіряє наявність файла, якщо нема кешированого токена створює його та оновлює його якщо він старий, після просто видає його.
Після цього команди перестали накопичуватись на навантаження на под значнно впало.
Ліг спати щасливий як ніколи ;-)
#devops #troubleshooting
Раніше я виявив, що така поведінка через накопичення команд опросу EKS кластерів та Docker регістрі. Справа у тому, що для обох процесів треба отрмати #AWS токени.
Для EKS це була команда:
```
aws eks get-token --cluster-name XXX --output json
```
Але в поді іноді її виконання займало до 10 секунд. AWS CLI написаний на #Python, тому працює повільно. Заміним цю команду на aws-iam-authenticator, який написаний на #Go та працює в 5-6 разів швидше:
```
aws-iam-authenticator token -i XXX
```
Наступна проблема з #Docker. Команда автентифікації була
```
aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d | sed 's/^AWS://'
```
Ця команда теж іноді по 10-15 секунд виконувалась та віджирала CPU. Токен дійсний на 12 годин, але опрос запускається кожні 5 хвилин, тому є сенс кеширувати його. Вигадав таку команду, не лякайтесь ;-) Її треба було саме однорядкову, тому що вона буде додана в #YAML конфіг #Spinnaker:
```
[ ! -f /tmp/ecr-token ] || \
[ $(( $(date +%s) - $(date +%s -r /tmp/ecr-token) )) -gt 36000 ] \
&& aws ecr get-authorization-token --output text \
--query "authorizationData[].authorizationToken" | \
base64 -d | sed "s/^AWS://" > /tmp/ecr-token; \
cat /tmp/ecr-token
```
Вона перевіряє наявність файла, якщо нема кешированого токена створює його та оновлює його якщо він старий, після просто видає його.
Після цього команди перестали накопичуватись на навантаження на под значнно впало.
Ліг спати щасливий як ніколи ;-)
#devops #troubleshooting
