Админим с Буквой
5.4K subscribers
301 photos
8 videos
59 files
1.14K links
Канал о системном администрировании, DevOps и немного Инфобеза.

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
terraform create dockreg secret in k8s

resource "kubernetes_secret" "company-dkr-key" {
metadata {
name = "company-dkr-key"
namespace = "${kubernetes_namespace.company.metadata.0.name}"
}

data = {
".dockerconfigjson" = "{\"auths\":{\"${var.company-dkr-url}\":{\"username\":\"${var.company-dkr-user}\",\"password\":\"${var.company-dkr-password}\",\"email\":\"email\",\"auth\":\"${base64encode(format("%s:%s", var.company-dkr-user, var.company-dkr-password))}\"}}}"

## OR u can also do this from file
# ".dockercfg" = "${file("${path.module}/docker.cfg")}"

}

type = "kubernetes.io/dockercfg"
}

#terraform #docker #kubernetes
yaml to terraform tf converter

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

З.Ы. с CRD оно работать не умеет к сожалению

https://github.com/sl1pm4t/k2tf

#terraform #kubernetes
как проверить что у вас плохо настроена безопасность в k8s в gcp


curl -H 'Metadata-Flavor: Google' 169.254.169.254/computeMetadata/v1/instance/service-accounts/<SERVICE_ACCOUNT_EMAIL>/token

выполнять из любого пода внутри кластера.

#kubernetes #gcp
k8s resources capacity

kubectl get node -o json | jq -j  '.items[]|.metadata.name + ":" + "\n\tpod capacity: " + .status.capacity.pods + "\n\tcpu capacity: " + .status.capacity.cpu + "\n\tmemory capacity: " + .status.capacity.memory + "\n"'


result:

...
kubernetes-node-0:
pod capacity: 110
cpu capacity: 6
memory capacity: 12273236Ki
...


#kubernetes
как сбросить пароль на postgresql в запущенном docker контейнере без перезапуска

Рубрика "костылим с буквой"

ОСТОРОЖНО прочитанное далее может вызвать кровотечение из глаз и непреодолимое желание расшибить себе лоб рукой.

вы были предупреждены.

Раскатывал я тут хелм сентри... Дано: не работающий Job, который использует пароль из секрета, и криво написанный авторами чарт, в котором слетает пароль пользователя в postgres. Задача - установить в контенере на лету нужный пароль пользователя.



# получаем пароль который должен быть выставлен на постгре
kubectl -n sentry get secret sentry-sentry-postgresql -o yaml | awk '$1=/postgresql-password:/ {print $2}' | base64 -d; echo

# получаем ноду на которой крутится постгре и ssh-шимся на нее
kubectl -n sentry get po -o wide | awk '$1~/.*postgr.*/ {print $7}'

# получаем id контейнера и логинимся туда под рутом
docker ps | grep postgr | grep entry | awk '{print $1}'
docker exec -ti -u0 <container_id> bash

# узнаем пользователя под которым запущен постгре
grep Uid /proc/1/task/1/status

# разрешаем логиниться из-под локалхоста
sed -ibak 's/^\([^#]*\)md5/\1trust/g' /opt/bitnami/postgresql/conf/

# добавляем пользователя в систему и переходим в него
useradd postgres -u 1001
su postgres

# выставляем переменные окружения и релоадим сервис
export PGDATA=/bitnami/postgresql/data
/opt/bitnami/postgresql/bin/pg_ctl reload

# логинимся в postgres и выставляем пароль
psql -U postgres
ALTER USER postgres WITH PASSWORD 'XXX';

возвращаем назад изменения или перестартуем контейнер.


#рукиизжопы #костыли #postgresql #docker #sentry #kubernetes
kubeadm и интернетики

Во время своей работы эта утилита в самом начале лезет в интернеты чтобы скачать файл с версиями stable-1.txt. Если у вас на сервере нет прямого выхода в интернеты это приводит к 2-м вещам: долго выполняется и срет мусором в выхлоп команды. в качестве решения можно применить либо явное указание версии --kubernetes-version но это сработает не для всех команд kubeadm. по краней мере для kubeadm token create - нет. Исходники гласят следущее:

func RunCreateToken(....) error {
// ClusterConfiguration is needed just for the call to LoadOrDefaultInitConfiguration
clusterCfg := &kubeadmapiv1beta2.ClusterConfiguration{
// KubernetesVersion is not used, but we set this explicitly to avoid
// the lookup of the version from the internet when executing LoadOrDefaultInitConfiguration
KubernetesVersion: kubeadmconstants.CurrentKubernetesVersion.String(),
}


а ClusterConfiguration объявляется вот так:

func SetDefaults_ClusterConfiguration(obj *ClusterConfiguration) {
if obj.KubernetesVersion == "" {
obj.KubernetesVersion = DefaultKubernetesVersion
}

соответственно если мы установим KubernetesVersion в нужное значение, то избежим похода за ним на сайт. поместим нужное значение в конфиг, например kubernetesVersion: v1.16.6 и запустим: kubeadm token create --config /etc/kubernetes/kubeadm-config.yml. Вуаля, проблема решена.

#kubernetes
Jeff Geerling, автор большого количества ролей на Ansible Galaxy, в связи с коронавирусом выложил книги Ansible for DevOps и Ansible for Kubernetes бесплатно. Можно будет скачивать и все последующие обновления.
https://www.jeffgeerling.com/blog/2020/you-can-get-my-devops-books-free-rest-month

#ansible #kubernetes
тут один коллега притащил. почитать чтоли на досуге..

att&ck матрица для кубера, занятно https://www.microsoft.com/security/blog/2020/04/02/attack-matrix-kubernetes/

#kubernetes #security
Немного полезных команд, которые я узнал за сегодня


для 3 хелма бекенд в котором по-умолчани хранятся данные о релизе - это секрет. этой командой их можно все найти:
kubectl get secret --all-namespaces -l "owner=helm"

Print the supported API resources on the server:
kubectl api-resources

#helm3 #kubernetes
AWS Cloud Week: опыт Mail.ru, JetBrains, Bitrix24, SoftServe, Kupibilet и Ciklum
https://go.aws/2AMw46F

#kubernetes #aws
Собрал стенд для обучения работы с hashicorp vault

Разворачивается через вагрант на локальных вм. Поднимается куб кластер в котором поднимается HA версия vault с бекендом на HA etcd.

НА - это не на, а аббревиатура. написано большими буквами потому что я не помню как пишется high availabilпыр-пыр-пыр. etcd используется вместо консула потому что почему бы и нет. разница в бэкенде не существенна при обучении работы с vault. (ну на самом деле, потому что консул в кубе можно развернуть только один кластер, а это значит что мы отдаем его только под секреты - ведь не шарить же его еще с кем-то если мы там храним секреты, а в данном случае кажется избыточным поднимать консул, ведь если у вас будет 20 нод, вы получите 20 реплик консула (так написан чарт), а у etcd по-прежнему останется 3. )

В данном репозитории ТОЛЬКО сам стенд. материалы для обучения продаются, как говорится, отдельно =)

https://github.com/bykvaadm/vault-on-kubernetes-stand

#virtualbox
#vagrant
#ansible
#kubernetes
#helm
#docker
#etcd
#ingress
#hashicorp
#vault
#обучение

З.Ы. поделились аналогичным стендом, на компоузах и с консулом. https://github.com/temalovepizza/vaultstuff
Подключаемся к jmx порту в контейнер в kubernetes

Для того чтобы это сделать нужно следующее:

1) прописать параметры:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.port=5000
-Dcom.sun.management.jmxremote.rmi.port=5000
-Djava.rmi.server.hostname=127.0.0.1

2) пробросить порт:

kubectl port-forward pod/XXX 5000

3) подключиться консолью https://visualvm.github.io (требует jdk)

открываем visualvm, ставим tools->plugins плагин visualvm-mbeans, перезапускаем, создаем remote connection к 127.0.0.1:5000, далее можем смотреть текущее состояние жавапроцесса и смотреть какие метрики далее получаются из вкладки mbeans.

ИЛИ

jconsole 127.0.0.1:5000 - у меня соединялось, выводило информацию и мгновенно дисконнект. пользоваться нормально не удалось.


#monitoring
#java
#kubernetes
Админим с Буквой
Собираем helm-чарт в gitlab-ci и пушим в docker registry Используем экспериментальную фичу с oci-registry в которую научился хелм. Это значит что мы можем чарты теперь просто пушить рядом с контейнерами докера с таким же именованием и тегированием. deploy_helm:…
В догонку к CI о сборке чарта, CI для деплоя это чарта

в этом деплое помимо докер конфига требуется еще сделать кубконфиг, в который поместить токен админа неймспейса (1 ci = 1 app = 1 admin = 1 ns). Здесь часть сниппета, остальное что пропущено абсолютно симметрично предыдущему посту.

```
  script:
- chmod 400 $DOCKERCONFIG
- chmod 400 $KUBECONFIG
- mkdir registry
- alias helm='docker run -v ${KUBECONFIG}:/root/.kube/config -v $(pwd)/regisry:/root/.cache/helm/registry -v $(pwd):/apps -v ${DOCKERCONFIG}:/root/.docker/config.json -e DOCKER_CONFIG="/root/.docker" -e HELM_REGISTRY_CONFIG="/root/.docker/config.json" -e HELM_EXPERIMENTAL_OCI=1 alpine/helm'
- helm chart pull company.com/helm/charts/debezium:$chart_version
- helm chart export rcompany.com/helm/charts/debezium:$chart_version
- helm upgrade --install -f .......
```

#helm
#gitlab
#kubernetes
Debezium helm chart

Мы с командой Ситимобил написали helm chart для разворачивания debezium в k8s. К сожалению корпоративного репозитория у нас нет, поэтому выкладываю так (по согласованию с руководством, естественно).

Чарт умеет разворачивать дебезиум, на запуске создавать или обновлять коннектор, дополняет апстримовый контейнер прометеус-метриками, а также создаст все нужные очереди в kafka.

Обратите внимание, в чарте используется подход 1 чарт = 1 коннектор, т.к. для высоконагруженных баз объединение конфигов играет злую шутку и может привести к долгому даунтайму. Приятного использования!

https://github.com/bykvaadm/debezium-helm-chart

З.ы. Дашборд для метрик выложим попозже

#debezium
#helm
#kafka
#mysql
#kubernetes