INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

Kubernetes: wait all pods actually terminated after scale to 0

№ 11269 В разделе "Sysadmin" от April 26th, 2021,
В подшивках: , ,

Use labels of deployment:

echo "$(date): Stop app pods"

kubectl -n default scale --replicas=0 deployment/my-application
kubectl -n default wait --for=delete pod -l app.kubernetes.io/name=appname \
                                         -l app.kubernetes.io/instance=my-application \
                                         --timeout=90s

echo "$(date): Start backup"

Нет комментариев »

Kubernetes: создание кастомных зон в DNS

№ 11263 В разделе "Sysadmin" от April 23rd, 2021,
В подшивках: ,

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

Для этого в конфигмап CoreDNS добавляем новый файл home.db:

  home.db: |
    home. IN      SOA     sns.dns.icann.org. noc.dns.icann.org. 2015082541  7200   3600 1209600 3600 
    gdns.home.            IN      A  8.8.8.8
    mqtt.home.         IN      A       1.1.1.2

А в Corefile указываем этот файл в качестве обслуживающего новую зону

  Corefile: |
    .:53 {
        ...
        file /etc/coredns/home.db home
    }

Ну и все, теперь в деплойменте можно указать новый файл для монтирования:

      volumes:
        - name: config-volume
          configMap:
            name: coredns
            items:
              - key: Corefile
                path: Corefile
              - key: home.db
                path: home.db

После обновления деплоймента под сам перезапустится и зона сразу заработает

root@mat-generator-app-6644bb76f-66vxd:/genmat# nslookup gdns.home
Server:         10.152.183.10
Address:        10.152.183.10#53

Name:   gdns.home
Address: 8.8.8.8

root@mat-generator-app-6644bb76f-66vxd:/genmat# nslookup mqtt.home
Server:         10.152.183.10
Address:        10.152.183.10#53

Name:   mqtt.home
Address: 1.1.1.2

Нет комментариев »

Заглушка для Kubernetis “сервис недоступен”

№ 11256 В разделе "Sysadmin" от March 28th, 2021,
В подшивках: , , ,

Назвал ее monkey502. Внутри закодировано 4 картинки, которые меняются в зависимости от количества обновлений страницы. Также страница обновляется самостоятельно 1 раз в минуту чтобы пользователь продолжил работать с урла на котором все остановилось. Образ базируется на минимальном образе nginx unit всего с 1 статической страницей.

Установить helm chart и настроить nginx ingress controller можно по инструкции здесь https://hub.docker.com/r/iam21h/monkey502. По ссылке приведена глобальная конфигурация, для отдельных ингресов используйте аннотации.

Нет комментариев »

Credentials and other secrets from Vault to your containers at startup

№ 11183 В разделах: Programming Sysadmin от January 2nd, 2021,
В подшивках: , , , ,

What if you stored your database credentials in Vault and want to make ENV variables with them for your application at container startup? You can do it for Kubernetes deployments or plain Docker containers with my small program vault-envs.

Add to your Dockerfile additional steps:

  • install my vault-envs programs that “converts” secret to ENV variables
  • create\modify entrypoint script where or call vault-envs and other pre-startup actions

Add to your Dockerfile steps:

...
...
# add Ubuntu\Debian repo and install vault-envs with fresh certificates
RUN curl http://deb.blindage.org/gpg-key.asc | apt-key add - && \
    echo "deb http://deb.blindage.org bionic main" | tee /etc/apt/sources.list.d/21h.list && \
    apt update
RUN apt install -y ca-certificates vault-envs

# copy entrypoint script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

Your entrypoint script will look like:

#!/bin/bash

...
...

export eval `vault-envs -token "$VAULT_TOKEN" \
        -vault-url https://vault.blindage.org \
        -vault-path /prod/crm/connection_postgres -envs-prefix "PG_"`

export eval `vault-envs -token "$VAULT_TOKEN" \
        -vault-url https://vault.blindage.org \
        -vault-path /prod/crm/connection_mysql -envs-prefix "MYSQL_"`

export eval `vault-envs -token "$VAULT_TOKEN" \
        -vault-url https://vault.blindage.org \
        -vault-path /prod/crm/connection_api`

...
...

exec "$@"

If some vars names is identical they will be overwritten at next vault-envs call, so I used prefix.

Now build image and run

docker run --rm -e VAULT_TOKEN=s.QQmLlqnHnRAEO9eUeoggeK1n crm printenv

and see results at container console:

...
VAULT_RETRIEVER=vault-envs
PG_DB_PASS=postgres
PG_DB_PORT=5432
PG_DB_USER=postgres
PG_DB_HOST=db-postgres
PG_DB_NAME=crm
MYSQL_DB_HOST=mysql.wordpress
MYSQL_DB_PASS=
MYSQL_DB_PORT=3306
MYSQL_DB_USER=root
MYSQL_DB_NAME=wordpress
API_HOST=http://crm/api
API_TOKEN=giWroufpepfexHyentOnWebBydHojGhokEpAnyibnipNirryesaccasayls4
...

Wooh! You did it.

Нет комментариев »

Add cache control and CORS to nginx ingress in Kubernetes

№ 11131 В разделе "Sysadmin" от November 3rd, 2020,
В подшивках: ,

annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri ~* \.(js|css|gif|jpe?g|png|woff|woff2|ico)) {
        expires 1M;
        add_header Cache-Control "public";
      }
    nginx.ingress.kubernetes.io/cors-allow-headers: >-
      DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,X-CSRF-Token,
      Authorization
    nginx.ingress.kubernetes.io/cors-allow-methods: 'GET, PUT, POST, DELETE, PATCH, OPTIONS'
    nginx.ingress.kubernetes.io/cors-allow-origin: '*'
    nginx.ingress.kubernetes.io/enable-cors: 'true'

Нет комментариев »

Яндекс.Метрика

Fortune cookie: Spam del giorno: IL MIO PRIMO HOMESEX VIDEO HARD