- PVSM.RU - https://www.pvsm.ru -
Прошлая неделя подарила два «вкусных» релиза из Open Source-мира контейнеров: практически одновременно обновились Docker (версия 17.06) и Kubernetes (версия 1.7). Какие возможности они принесли? В статье представлена информация из анонсов и release notes этих релизов с небольшими уточнениями по некоторым из ключевых изменений.
28 июня был представлен Docker CE (Community Edition) 17.06 [1] — первый выпуск контейнерной системы, собранный с помощью проекта Moby, анонсированного в апреле. Подробнее о Moby мы уже писали [2].
Главной фичей релиза стала поддержка многоэтапных сборок (multi-stage builds), суть которой заключается в возможности описывать в одном Dockerfile
несколько этапов сборки образа для того, чтобы в конечный образ не попадали промежуточные данные, которые не требуются. Очевидный пример, который приводят в Docker: Java-разработчики обычно используют Apache Maven для компиляции своих приложений, однако Maven не нужен в конечном контейнере (образе) для запуска этих приложений. Теперь можно оформить Dockerfile
таким образом, что сам Maven будет использоваться в промежуточном образе (для сборки), но не попадёт в конечный (для запуска).
Вот вариант Dockerfile
для простого приложения [3] на Java Spring Boot:
FROM node:latest AS storefront
WORKDIR /usr/src/atsea/app/react-app
COPY react-app/package.json .
RUN npm install
COPY . /usr/src/atsea/app
RUN npm run build
FROM maven:latest AS appserver
WORKDIR /usr/src/atsea
COPY pom.xml .
RUN mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve
COPY . .
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests
FROM java:8-jdk-alpine
WORKDIR /static
COPY --from=storefront /usr/src/atsea/app/react-app/build/ .
WORKDIR /app
COPY --from=appserver /usr/src/atsea/target/AtSea-0.0.1-SNAPSHOT.jar .
ENTRYPOINT ["java", "-jar", "/app/AtSea-0.0.1-SNAPSHOT.jar"]
CMD ["--spring.profiles.active=postgres"]
Как видно, две подготовительные стадии здесь используют Node.js и Apache Maven для сборки приложения, однако результирующий образ будем компактным, не имея в своём составе ни Node.js, ни Maven.
Примечание: До настоящего времени у себя в компании мы для этих целей использовали фичу под названием артефакты в собственной Open Source-утилите dapp [4] (её обзор см. здесь [5]).
Метрики Docker теперь могут использоваться в плагинах. Для демонстрации приводится пример плагина, который проксирует запросы на метрику, доступную в нём:
$ docker plugin install --grant-all-permissions cpuguy83/docker-metrics-plugin-test:latest
$ curl http://127.0.0.1:19393/metrics
Но это лишь демонстрация, а реальное предназначение этого новшества — отправлять с помощью плагинов собранные метрики в какой-либо внешний сервис или делать их доступными для сборки другим сервисом (например, Prometheus).
Плагины теперь также могут использоваться и для логов (т.е. для реализации logging drivers), а вывод списка всех драйверов журналирования добавлен в docker info
. Кроме того, реализацию docker service logs
, которая с прошлого релиза (17.05) может показывать и логи индивидуальных заданий (/task/{id}/logs
в REST), перенесли из ветки Edge в Stable, поэтому теперь легко получить обобщённые логи для всего сервиса, запущенного в Swarm.
Стала возможной привязка сервисов к сетям внутри узла (node-local): Host, Macvlan, IPVlan, Bridge, local-scope. Приводимый для Macvlan пример — это создание специфичных для узла сетевых конфигураций на рабочих узлах и сети на управляющем узле, которая будет их применять:
[Wrk-node1]$ docker network create --config-only --subnet=10.1.0.0/16 local-config
[Wrk-node2]$ docker network create --config-only --subnet=10.2.0.0/16 local-config
[Mgr-node2]$ docker network create --scope=swarm --config-from=local-config -d macvlan
mynet
[Mgr-node2]$ docker service create --network=mynet my_new_service
Кроме того, во внутренние алгоритмы Service Discovery привнесены изменения [6], которые призваны улучшить логику её работы.
Ряд новшеств получил режим Swarm, а в частности:
$ echo "This is a config" | docker config create test_config -
$ docker service create --name=my-srv --config=test_config …
$ docker exec -it 37d7cfdff6d5 cat test_config
This is a config
docker swarm ca --rotate
);--datapath-addr
для docker swarm init
, указывающий сетевой интерфейс для изоляции заданий управления (control traffic) от данных приложений (data traffic) — полезно в случае приложений, производящих большую нагрузку на ввод/вывод;/var/run
).Более подробный лог изменений в Docker 17.06 вместе с ссылками на коммиты можно найти в Docker CE release notes [7]. А для любителей смотреть и слушать есть 8-минутное видео [8] с рассказом и демонстрацией основных новшеств.
29 июня был представлен Kubernetes 1.7 [9], главными нововведениями которого названы улучшения в безопасности, поддержке stateful-приложений, расширяемости платформы. Что за этим стоит?
StatefulSet
, используемых для деплоя stateful-приложений. Стратегия обновлений определяется полем spec.updateStrategy
, поддерживающим сейчас два значения: OnDelete
и RollingUpdate
.StatefulSets
более быстрого масштабирования и запуска приложений, не требующих строгой очередности, настраиваемой теперь через Pod Management Policy [16]. Такие приложения теперь могут запускаться параллельно и без ожидания получения подом определённых статусов (Running, Ready).StorageClasses
внутри StatefulSets
теперь можно получить доступ к локальному хранилищу через стандартный интерфейс PVC/PV.DaemonSets
.APIService
, который реализуется через extension-apiserver
внутри пода, работающего в кластере Kubernetes.Автор: Флант
Источник [26]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/259423
Ссылки в тексте:
[1] Docker CE (Community Edition) 17.06: http://blog.docker.com/2017/06/announcing-docker-17-06-community-edition-ce/
[2] уже писали: https://habrahabr.ru/company/flant/blog/329136/
[3] простого приложения: https://github.com/dockersamples/atsea-sample-shop-app
[4] dapp: https://github.com/flant/dapp
[5] её обзор см. здесь: https://habrahabr.ru/company/flant/blog/324274/
[6] изменения: https://github.com/docker/libnetwork/pull/1796/commits/d64e71e4f7e23c2cc71f26d56b651e78a58bbae7
[7] Docker CE release notes: https://docs.docker.com/release-notes/docker-ce/
[8] 8-минутное видео: https://www.youtube.com/watch?v=-NeaXUGEK_g
[9] Kubernetes 1.7: http://blog.kubernetes.io/2017/06/kubernetes-1.7-security-hardening-stateful-application-extensibility-updates.html
[10] Network Policy API: https://kubernetes.io/docs/concepts/services-networking/network-policies/
[11] Node authorizer: https://kubernetes.io/docs/admin/authorization/node/
[12] шифрования секретов: https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
[13] kubelet TLS bootstrapping: https://kubernetes.io/docs/admin/kubelet-tls-bootstrapping/
[14] Audit: https://kubernetes.io/docs/tasks/debug-application-cluster/audit/
[15] автоматических обновлений: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets
[16] Pod Management Policy: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
[17] Local Storage: https://kubernetes.io/docs/concepts/storage/volumes/#local
[18] Умный откат: https://kubernetes.io/docs/tasks/manage-daemon/rollback-daemon-set/
[19] StorageOS Volume: https://kubernetes.io/docs/concepts/storage/volumes/#storageos
[20] Агрегация API: https://kubernetes.io/docs/concepts/api-extension/apiserver-aggregation/
[21] Container Runtime Interface (CRI): https://github.com/kubernetes/community/blob/master/contributors/devel/container-runtime-interface.md
[22] containerd: https://habrahabr.ru/company/flant/blog/325358/
[23] Dynamic Admission: https://kubernetes.io/docs/admin/extensible-admission-controllers/
[24] Policy-based Federated Resource Placement: https://kubernetes.io/docs/tasks/federation/set-up-placement-policies-federation/
[25] руководство по миграции: https://kubernetes.io/docs/tasks/access-kubernetes-api/migrate-third-party-resource/
[26] Источник: https://habrahabr.ru/post/332160/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.