Red Hat OpenShift
DevOpsツール
Red Hat OpenShift
概要
Red Hat OpenShiftは、エンタープライズ向けKubernetesプラットフォームとして、Kubernetesに開発者ツール、セキュリティ、運用機能を追加したコンテナプラットフォームです。
詳細
Red Hat OpenShift(オープンシフト)は、Red Hatが開発・提供するエンタープライズ向けコンテナアプリケーションプラットフォームです。Kubernetesをベースとし、開発者の生産性向上とエンタープライズレベルのセキュリティ・運用性を両立させています。Source-to-Image(S2I)による自動ビルド、統合開発者コンソール、豊富なCI/CDツール、高度なセキュリティ機能(SELinux、RBAC、Pod Security Standards)を提供。IBM買収(2019年)後は、ハイブリッドクラウド戦略の中核として位置づけられ、オンプレミス、パブリッククラウド、エッジ環境での一貫した運用を実現。OpenShift Container Platform(OCP)、OpenShift Dedicated、Red Hat OpenShift Service on AWS(ROSA)等の豊富な提供形態により、企業のクラウドネイティブ変革を支援。金融、製造、政府機関等のミッションクリティカルなワークロードでの採用が進んでおり、特にエンタープライズでのKubernetes導入において、サポートと管理性を重視する企業での利用が拡大しています。
メリット・デメリット
メリット
- エンタープライズサポート: Red Hatによる24時間365日サポート
- 開発者エクスペリエンス: Web UI、CLI、IDE統合による高い生産性
- セキュリティ: デフォルトでセキュアな設定とコンプライアンス対応
- 自動化機能: S2I、GitOpsによる継続的デプロイメント
- ハイブリッドクラウド: 複数環境での一貫したプラットフォーム
- 運用性: 統合監視、ログ管理、アップデート自動化
- ベンダーサポート: エンタープライズレベルのSLA保証
- 豊富なテンプレート: すぐに使える多数のアプリケーションテンプレート
デメリット
- コスト: サブスクリプション費用とリソースオーバーヘッド
- ベンダーロックイン: Red Hat エコシステムへの依存
- 学習コスト: Kubernetes + OpenShift固有機能の習得
- リソース消費: 標準Kubernetesより多くのリソースが必要
- カスタマイズ制限: エンタープライズ向け機能による一部制約
- バージョン管理: Red Hatのリリーススケジュールに依存
- 設定複雑性: 高機能ゆえの設定項目の多さ
主要リンク
- Red Hat OpenShift公式サイト
- OpenShift公式ドキュメント
- OpenShift Developer Console
- OpenShift GitHub リポジトリ
- Red Hat Hybrid Cloud
- OpenShift Learning Portal
書き方の例
プロジェクト作成とアプリケーションデプロイ
# プロジェクト(Namespace)作成
oc new-project my-application
# Source-to-ImageでGitリポジトリからデプロイ
oc new-app https://github.com/sclorg/nodejs-ex.git
oc expose service nodejs-ex
# ビルド状況確認
oc logs -f bc/nodejs-ex
DeploymentConfig(OpenShift特有)
# deploymentconfig.yaml
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: web-app-dc
spec:
replicas: 3
selector:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: web-app:latest
ports:
- containerPort: 8080
triggers:
- type: ConfigChange
- type: ImageChange
imageChangeParams:
automatic: true
containerNames:
- web-app
from:
kind: ImageStreamTag
name: web-app:latest
ImageStreamとBuildConfig
# imagestream.yaml
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: my-app-image
spec:
tags:
- name: latest
from:
kind: DockerImage
name: my-registry/my-app:latest
---
# buildconfig.yaml
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
name: my-app-build
spec:
source:
type: Git
git:
uri: https://github.com/user/my-app.git
ref: main
strategy:
type: Source
sourceStrategy:
from:
kind: ImageStreamTag
name: nodejs:16-ubi8
output:
to:
kind: ImageStreamTag
name: my-app-image:latest
triggers:
- type: GitHub
github:
secret: github-webhook-secret
- type: ConfigChange
Route(外部公開)
# route.yaml
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: web-app-route
spec:
host: web-app.apps.cluster.example.com
to:
kind: Service
name: web-app-service
port:
targetPort: 8080
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect
セキュリティコンテキスト制約(SCC)
# scc.yaml
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
name: custom-scc
allowHostDirVolumePlugin: false
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegedContainer: false
allowedCapabilities: []
defaultAddCapabilities: []
requiredDropCapabilities:
- KILL
- MKNOD
- SETUID
- SETGID
runAsUser:
type: MustRunAsRange
uidRangeMin: 1000000000
uidRangeMax: 2000000000
seLinuxContext:
type: MustRunAs
fsGroup:
type: MustRunAs
Operatorを使用したデータベースデプロイ
# postgresql-operator.yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgres-cluster
spec:
instances: 3
postgresql:
parameters:
max_connections: "200"
shared_buffers: "256MB"
bootstrap:
initdb:
database: myapp
owner: appuser
secret:
name: postgres-credentials
storage:
size: 10Gi
storageClass: fast-ssd
oc CLI 基本操作
# ログインとプロジェクト管理
oc login https://api.cluster.example.com:6443
oc projects
oc project my-project
# アプリケーション管理
oc get all # すべてのリソース表示
oc new-app --name=myapp --image=nginx:latest
oc expose service myapp # Route作成
oc scale dc/myapp --replicas=5 # スケーリング
# ビルド・デプロイ管理
oc start-build myapp # ビルド開始
oc rollout latest dc/myapp # 最新バージョンデプロイ
oc rollback dc/myapp # ロールバック
# 監視・デバッグ
oc logs -f bc/myapp # ビルドログ
oc logs -f dc/myapp # アプリケーションログ
oc rsh <pod-name> # Pod内シェル
oc port-forward service/myapp 8080:8080
# セキュリティ・権限管理
oc adm policy add-scc-to-user anyuid system:serviceaccount:myproject:default
oc create sa myservice-account # ServiceAccount作成
oc policy add-role-to-user view user1 # 権限付与