Понимать все или хотя бы большинство возможностей, которые нам предоставляет Kubernetes в рамках своих основных манифестов очень ценно, потому что там есть действительно полезные вещи, которые можно использовать для своих приложений.
Я сейчас описал всё на базе Deployment`а. То же самое касается выполнения других задач. У нас, оказывается, в кластере есть Job`ы, и на их базе можно сделать очень много всего. Например, smoke-тесты после релизов, выполнение миграции. А еще есть CronJob`ы, с помощью которых можно на базе кластера реализовывать выполнение каких-то задач по расписанию.
Также важно понимать, для чего нужны StatefulSet`ы и когда они могут пригодиться. По секрету скажу: они нужны не только для баз данных. Как еще их применяют, будем рассказывать на Вечерней школе «Kubernetes для разработчиков».
Как я уже говорил, это возможности, которые сам Kubernetes дает, и которые можно использовать в рамках своих приложений. Например, важно знать, что есть объект ConfigMap или Secret. Если вам нужно хранить какую-то секретную информацию, вы используете Secret , а в ConfigMap можете сложить свои конфиги, и можете их обновлять независимо от приложения, и они будут доезжать к вашему приложению при обновлении ConfigMap. А если ваше приложение научится замечать изменения своих конфигов на диске, то оно может даже бесшовно релоадиться при изменении всего лишь одного ConfigMap.
Здорово знать, что есть еще более хитрые штуки, например, Pod Disruption Budget.
Такие вещи нам позволяют управлять поведением кластера по отношению к вашему приложению в тот момент, когда ноды кластера выводятся системными администраторами на обслуживание. Это такой контракт в yaml-формате между разработчиком и системным администратором, который может создать разработчик.
Еще не могу не упомянуть про такие штуки как Ingress, Service. Хорошо понимать, что они позволяют вам сделать, как можно построить на сетевом уровне общение между своими компонентами в рамках Kubernetes. Как с помощью того же Ingress можно настроить своё приложение, его проксирование.
Хорошо бы, наверное, понимать, что такое Network Policies. Здесь тема находится на стыке того, что может делать разработчик, специалист по безопасности и системный администратор. Но все же разработчикам не повредит это знание и понимание того, что можно с помощью опять же встроенных средств Kubernetes ограничивать доступ к своим приложениям, разграничивать, кто может в него попасть, кто не может. Из каких namespace`ов, из каких Pod`ов, Service`ов и так далее.
И наконец, умение работать с какими-то шаблонизаторами типа Helm. Тут, думаю, читатели смогут сказать: «да это точно уже задача DevOps`ов, вы что-то от разработчиков хотите слишком много!» Но все же. Понимание, как вообще деплоить в Kubernetes с помощью Helm или с помощью kubectl, думаю тоже не будет лишним для разработчиков.
Потому что, во-первых, специально выделенные инженеры, которые могут за вас все это написать, есть далеко не у всех. Во-вторых, DevOps-инженеров обычно всё-таки меньше, чем разработчиков. Ну и умение в случае чего написать Helm chart для своего приложения или настроить CI/CD, не дожидаясь инженеров эксплуатации, написать себе туда kubectl apply или helm upgrade, я думаю, тоже никому не повредит.