Олег Марков
Сравнение и интеграция Openshift и Kubernetes
Введение
Когда вы работаете с современной инфраструктурой, контейнеризация и автоматизация развёртывания становятся основой эффективного DevOps-процесса. Kubernetes (K8s) – один из самых популярных оркестраторов контейнеров с гибкой и расширяемой архитектурой. Однако по мере роста потребностей бизнеса в вопросах безопасности, управления пользователями и автоматизации внимания заслуживает платформа Openshift, построенная на базе Kubernetes и развивающая его возможности.
В этом материале я расскажу, чем Kubernetes и Openshift отличаются друг от друга, что умеют, какие преимущества даёт совместное использование и как можно интегрировать Openshift в существующий процесс разработки на Kubernetes. Мы рассмотрим примеры, особенности настройки, а также нюансы эксплуатации обеих платформ.
Kubernetes и Openshift: ключевые понятия
Что такое Kubernetes
Kubernetes — это open-source система для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Она позволяет вам управлять своим кластером контейнеров, распределять нагрузку, обеспечивать высокую доступность, автоматически восстанавливать сервисы в случае сбоев.
Ключевые компоненты Kubernetes:
- Pod — минимальная единица развертывания, группа контейнеров, которым требуется совместный доступ к ресурсу
- Deployment — объект, который отвечает за обновление и управление жизненным циклом приложений
- Service — абстракция над набором pod'ов, обеспечивающая сетевое взаимодействие
- ReplicaSet — поддерживает определенное количество подов в кластере
- Ingress — управляет внешним доступом к сервисам в кластере
Что такое Openshift
Openshift Platform — это корпоративная платформа, разработанная Red Hat, которая использует Kubernetes в качестве ядра, добавляя в него дополнительные возможности, такие как инструменты безопасности, развитые средства управления пользователями, встроенный регистр Docker-образов, web-консоль и множество других готовых инструментов для CI/CD.
Основные компоненты Openshift:
- Кластеры Openshift со встроенными средствами безопасности (RBAC, SCC)
- Веб-интерфейс для управления и мониторинга
- Source-to-Image (S2I) — собственная технология сборки контейнеров из исходников
- Поддержка интеграции с внешними LDAP/AD
- Встроенный registry для хранения Docker-образов
- Интеграция с Jenkins и поддержка pipelines
Почему отличается Openshift от Kubernetes
Главное отличие — Openshift включает дополнительный функционал и предоставляет более строгие политики безопасности из «коробки». Kubernetes выступает в роли конструктора, который нужно дополнительно обвязывать нужными сервисами, а Openshift идёт с готовым набором решений и удобной web-консолью.
Сравнительная таблица возможностей
Kubernetes | Openshift | |
---|---|---|
Ядро платформы | Kubernetes OSS | На базе Kubernetes |
UI/консоль | Выборочно | Встроенная веб-консоль |
RBAC | Есть | Расширен, дополнительный SCC |
Обновления | Вручную | Упрощённые, автоматизированные |
Мониторинг | Нужно доустанавливать | По умолчанию интегрирован |
Registration образов | Через сторонние Registry | Собственный встроенный Registry |
S2I (Source-to-Image) | Нет | Да |
Гарантии поддержки | Нет (community) | Коммерческая поддержка Red Hat |
Открытый исходный код | Да | Да (Некоторые компоненты — нет) |
Функциональные различия на практике
Безопасность и политика прав
Openshift по умолчанию более строго относится к безопасности. Например, в Kubernetes вы без особых ограничений можете запускать контейнеры с root-правами, тогда как в Openshift это максимально ограничивается с помощью SecurityContextConstraints (SCC).
Давайте сравним:
Kubernetes (пример Pod, который может стартовать с root):
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app
image: nginx
# по умолчанию контейнеры стартуют с root
Openshift (запуск контейнера ограничен):
Если вы попробуете запустить контейнер с root-правами без политики "anyuid", получите ошибку:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app
image: nginx
securityContext:
# Здесь попытка явно задать пользователя root
runAsUser: 0
Система SCC в Openshift заблокирует такой запуск — обратите на это внимание.
Сборка и публикация контейнеров
В Kubernetes обычно используют внешние CI/CD системы (Jenkins, Gitlab-CI, Tekton) и Docker Registry для сборки и хранения образов. В Openshift встроена собственная Source-to-Image (S2I) технология и registry, что ускоряет работу разработчика.
Пример пайплайна на Openshift (BuildConfig):
yaml
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
name: my-java-app
spec:
source:
git:
uri: "https://github.com/myrepo/my-app.git"
strategy:
type: Source
sourceStrategy:
from:
kind: ImageStreamTag
name: 'openjdk:11'
В этом пайплайне исходники из репозитория собираются на основе готового образа OpenJDK и автоматически сохраняются во внутренний реестр.
Управление пользователями и доступом
Openshift поддерживает интеграцию с LDAP, Active Directory, а также предоставляет расширенную модель RBAC и проектирование namespaces как «проекты».
Для добавления пользователя из LDAP в Openshift:
bash
oc adm groups sync --type=ldap --sync-config=ldap-sync.yaml
В Kubernetes для расширенной поддержки приходится настраивать внешние OIDC провайдеры, дополнительно подключать инструменты вроде Keycloak.
Веб-интерфейс
Openshift «из коробки» оснащён web UI, который достаточно удобен для большинства задач — управление кластерами, просмотр логов, деплой приложений, мониторинг ресурса, CI/CD. В Kubernetes стандартного web UI нет (Kubernetes Dashboard можно установить дополнительно, но он функционально проще).
Контроллеры и расширяемость
Kubernetes предоставляет большое количество встроенных контроллеров и CRD (CustomResourceDefinition), что позволяет гибко расширять платформу, писать свои операторы. Openshift тоже поддерживает CRD, а также содержит собственные ресурсы (Route, BuildConfig), которые отсутствуют в «чистом» Kubernetes.
Пример создания объекта Route в Openshift: ```yaml apiVersion: route.openshift.io/v1 kind: Route metadata: name: my-service spec: to: kind: Service name: my-service
Route обеспечивает удобный HTTP(S) доступ в кластер извне
В Kubernetes для аналогичного функционала потребуется настроить Ingress-контроллер (например, NGINX Ingress), настроить DNS и сертификаты.
### Развертывание и обновление кластеров
В Kubernetes установка чаще всего производится вручную (например, с помощью kubeadm) или через дополнительные инструменты (Rancher, Kops, Kubespray). Openshift поставляется как полностью интегрированное решение, установка которого автоматизирована (OpenShift Installer, OKD для community-версии).
Для обновления кластера пользователи Kubernetes обычно используют kubectl apply или специальные утилиты, следят за совместимостью компонентов (etcd, kube-apiserver и т.д.), а Openshift содержит автоматизированные сценарии обновления, которые доступны прямо из консоли.
### CI/CD: пайплайны и автоматизация
В Openshift есть встроенная поддержка пайплайнов, интеграция с Jenkins и OpenShift Pipelines (на базе Tekton) для автоматизации процессов.
**Создание пайплайна в Openshift:**
yaml
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: simple-pipeline
spec:
tasks:
- name: build taskRef: name: buildah
- name: deploy runAfter: ["build"] taskRef: name: k8s-deploy ``` Здесь показано, как можно организовать пайплайн просто на YAML без использования внешних инструментов.
Kubernetes пайплайны чаще организуют через внешние платформы.
Мониторинг и логирование
Kubernetes требует самостоятельной интеграции Prometheus, Grafana, EFK/ELK (Elasticsearch, Fluentd, Kibana) для сбора и анализа логов, мониторинга состояния кластеров. Openshift включает эти инструменты и настраивает их автоматически на этапе установки.
Интеграция Openshift с Kubernetes: совместная эксплуатация
Когда стоит интегрировать Openshift и Kubernetes
- У вас уже есть Kubernetes-кластер, интегрированный в CI/CD процесс, и появляются требования корпоративного уровня (автоматизация безопасности, web-консоль, поддержка S2I).
- Разные команды используют как Openshift, так и K8s, при необходимости обмениваться ресурсами (образами, конфигами, helm-чартами).
- Требуется повысить безопасность разработки через Openshift, но часть кластера продолжает работать на Kubernetes.
Способы интеграции
1. Совместное хранение образов
Openshift registry может быть использован другими Kubernetes-кластерами как внешний Docker Registry.
# Логинимся в registry Openshift из Kubernetes-нод
docker login <openshift-registry-url> -u <user> -p <token>
После этого вы можете в Kubernetes просто указать путь к образу в Openshift registry в spec контейнера.
2. Общие Helm Charts и манифесты
Большинство YAML-манифестов, написанных для чистого Kubernetes, совместимы с Openshift, хотя Route, SCC и BuildConfig специфичны для Openshift. Старайтесь отделять специфичный функционал через шаблоны/Helm charts и использовать их универсально.
3. Federation (федерация кластеров)
Если необходимо совместно управлять несколькими кластерами, можно воспользоваться Federation v2 (Kubernetes multi-cluster management), либо внешними платформами (например, Rancher, Red Hat Advanced Cluster Management).
4. Использование CustomResourceDefinition (CRD)
Вы можете описать пользовательские ресурсы, которые поддерживаются одновременно во всех кластерах.
5. Синхронизация секретов и конфигов
Для организации единой системы управления секретами (например, Vault, Sealed Secrets), чтобы использовать идентичные секреты в обоих типах кластеров.
Ограничения и подводные камни интеграции
- Не все API ресурсы Openshift доступны в стандартном Kubernetes (Route, SCC, BuildConfig и т.д.)
- Некоторые инструменты (например, OpenShift Console) невозможно развернуть вне Openshift-кластера.
- Security Policies отличаются — убедитесь, что ваши контейнеры не требуют root-доступа.
- Version skew — Openshift может использовать другие версии компонентов K8s, обратите внимание на совместимость.
Заключение
Openshift — это надстройка над Kubernetes, ориентированная на корпоративный уровень автоматизации и управления, с расширенными возможностями безопасности и интеграцией CI/CD. Выберите Kubernetes, если вам нужна максимальная гибкость и контроль, либо Openshift, если важны безопасность, поддержка и богатая экосистема инструментов без необходимости ручной донастройки.
Часто для крупных проектов интеграция Openshift в существующую инфраструктуру на Kubernetes позволяет объединить лучшее из двух миров: стандартизацию процессов, расширенные политики безопасности и прозрачную автоматизацию CI/CD.
Частозадаваемые технические вопросы по теме статьи и ответы на них
Как я могу мигрировать приложения с Kubernetes в Openshift без переписывания манифестов?
Для большинства стандартных ресурсов (Deployments, Services, ConfigMaps) переписывать ничего не нужно — они полностью совместимы. Однако убедитесь, что ваши контейнеры могут запускаться не от root. Если вы используете Ingress-ресурсы, рассмотрите миграцию на Openshift Routes или настройте Ingress Controller в Openshift.
Можно ли использовать Helm Charts из Kubernetes в Openshift?
Да, большинство Helm charts подходят без изменений. Специфичные ресурсы типа Ingress стоит заменить на Route (либо добавить поддержку обоих вариантов в шаблоне). Убедитесь, что charts не используют PSP или политики, отсутствующие в Openshift.
Как разрешить пользовательскому контейнеру запускаться с root в Openshift?
Создайте custom SecurityContextConstraints и добавьте пользователя или сервис-аккаунт в неё:
oc adm policy add-scc-to-user anyuid -z <serviceaccount>
Это даст сервис-аккаунту право запускать контейнер с root.
Как подключить внешний Registry в Openshift для загрузки образов?
Воспользуйтесь командой:
bash
oc create secret docker-registry myregistrykey --docker-server=<server> --docker-username=<user> --docker-password=<password> --docker-email=<email>
oc secrets link default myregistrykey --for=pull
Теперь Openshift сможет подтягивать образы из внешнего Registry.
Как организовать свой CI/CD pipeline для Openshift без Jenkins?
Используйте Openshift Pipelines (на базе Tekton). Создайте пайплайн через yaml-манифесты — это не требует отдельного сервера Jenkins и лучше масштабируется в Kubernetes/Openshift средах.
Постройте личный план изучения Kubernetes до уровня Middle — бесплатно!
Kubernetes — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Kubernetes
Лучшие курсы по теме

Kubernetes и Helm
Антон Ларичев
Docker и Ansible
Антон Ларичев