Red Hat OpenShift

DevOpsコンテナOpenShiftKubernetesエンタープライズRed HatPaaS

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のリリーススケジュールに依存
  • 設定複雑性: 高機能ゆえの設定項目の多さ

主要リンク

書き方の例

プロジェクト作成とアプリケーションデプロイ

# プロジェクト(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 # 権限付与