Upgrade to Pro — share decks privately, control downloads, hide ads and more …

tech dojo openshift s2i using cli

Mats
March 24, 2021

tech dojo openshift s2i using cli

Mats

March 24, 2021
Tweet

More Decks by Mats

Other Decks in Technology

Transcript

  1. IBM Developer Dojo OpenShift 101 松島 輝昌 (Teruyoshi Matsushima) Red

    Hat Demand Creation Digital Center IBM Digital Sales @trtrbohz #IBMDojo #OpenShiftWorldTour
  2. 松島 輝昌 Teruyoshi Matsushima ⽇本アイ・ビー・エム デジタルセンター事業部 レッドハット・デマンドクリエーション SI企業でソフトウェアエンジニアとしてキャリアをスタート。 その後、医療機器メーカーにてインフラ開発も担当。 現在、IBMでRed

    Hatソリューションを展開するテクニカル・セールス としてお客様を絶賛⽀援中。 @trtrbohz 5 2014年6⽉ E2D3 ver0.1 企画・設計・開発 ⽇経ソフトウエア主催のOffice⽤アプリ開発コンテストにて特別賞受賞
  3. コンテナを使った開発の流れ Dockerfileなど Docker イメージなど コンテナ レジストリ マニフェストで コンテナ⾃体の 詳細を記述 開発者

    コンテナ イメージ作成 イメージの 登録 開発者 アプリ実⾏ アプリ開発 3段階のプロセス
  4. dockerを使った例 利⽤ Build Docker Runtime ソースや 構成情報 内部リポジトリー コンテナ・イメージ Pull

    run/exec dockerHub コンテナ dockerHub オンライン上にイメージを保管しておくコンテナレジストリの1種です。 様々なイメージの取得、⾃作イメージの保管ができます。 Dockerの操作は、提供されているDocker コマンド(CLI)を活⽤します。ユーザーは、元にな るDocker imageをコンテナ化することで、アプリケーションとして利⽤することができます。
  5. コンテナレジストリ Container Registryはコンテナ・イメージを保管しておくための領域であり、Docker Hubはその うちの⼀つです。Container Registryは様々な種類があり、環境・⽤途によって使い分けが可能 です。 種類 概要 例

    Docker Hub 様々なイメージが保管・公開されている。 公開されているイメージを取得したり、作成したイメー ジを保管したりすることができる。 料⾦を⽀払うことで、privateなレジストリとしても利⽤ 可能。 - クラウド・サービス 様々なクラウド・ベンダーなどが提供しているサービス。 各ユーザーのPrivateな領域として利⽤可能。 料⾦によって、サイズやアクセス回数の制限がある。 IBM Cloud Container Registry Amazon ECR GCP Container Registry Azure Container Registry OSS ユーザー固有の環境に独⾃で作成するRegistry。 環境・導⼊作業などは必要だが、基本的に⾃由に利⽤可 能。 NEXUS OCR (OpenShift Container Registry) また、各イメージはContainer Registryに作成された領域であるリポジトリ内に保存され、形式は下記の通りです。 <リポジトリ名>/<イメージ名>(:<tag>) (例: ibmcom/websphere-liberty → ibmcomリポジトリ内のwebsphere-libertyイメージ)
  6. dockerコマンド操作 イメージをdocker hubからpull > docker image pull gihyodocker/echo:latest イメージをコンテナ化して実⾏ >

    docker container run -d -t -p 9000:8080 gihyodocker/echo:latest -d:バックグラウンドで実⾏ -p:ポートフォワーディング コンテナを停⽌ > docker container stop <コンテナID> コンテナを削除 > docker container rm <コンテナID> イメージを削除 > docker image rm <イメージID>
  7. dockerコマンド集(主なもの) 概要 コマンド オプション イメージ取得 image pull {image}:{tag} イメージビルド image

    build {image}:{tag} イメージ⼀覧 image list タグの付与 image tag {image}:{tag} {image}:{新tag} イメージ削除 image rm {image id} コンテナ起動 container run {image}:{tag} -p {host port}:{container port} ポート公開 -d バックグラウンド起動 --rm 停⽌時にコンテナ削除 コンテナ⼀覧 ps -a 停⽌状態含む全てのコンテナを取得 コンテナ停⽌ container stop {container id} コンテナ削除 container rm {container id} コンテナ内でコマンド実⾏ container exec {container id} {command} -it インタラクティブに操作 ステータス確認 stats --no-stream ⼀回のみ表⽰
  8. コンテナのポータビリティ 👉 アプリケーション稼働に必要な依存ファイルを パッケージングできる 👉 物理サーバーに固定されない → 同じアーキテクチャの環境であれば ポータビリティが存在する 「僕の環境では動いた」

    問題が発⽣しない システム基盤 (クラウド) ホストOS システム基盤 (オンプレミス) ホストOS コン テナ エン ジン App1 Bin/Libs App2 Bin/Libs App3 Bin/Libs コン テナ エン ジン App3 Bin/Libs
  9. Kubernetesの特徴 スケーリング Podの管理・監視 リソースの抽象化 Node1 Pod1 Node2 Pod2 Node3 Node1

    Pod1 Node3 Pod2 Node2 Node1 Pod1 Node2 Node 3 Node1 Pod1 Node3 Pod2 Node2 Pod2 Pod2 レプリカ数を増やす・減らす レプリカ数を⼀定に保つ 環境依存から開放 リソースの抽象化 ⾃⼰回復性 ⾃動スケーリング インフラごとに異なる実装やサービスの詳細を知る 必要がなく、宣⾔的にインフラリソースを管理可能 Kubernetesは、現在のシステム状態が望まし い状態に⼀致するように動作 迅速で簡単なロールバックで、信頼性の⾼い コンテナイメージのビルドとデプロイを提供 ・複数ノードにコンテナを配備し、その運⽤状態の監視、回復、拡張までを⾃動で実⾏(オーケストレーション) Node Node Node apiVersion: apps/v1 kind: Deployment metadata: name: test-nginx #コンテナの名前 spec: selector: matchLabels: app: nginx #テンプレートを指定 replicas: 3 #レプリカ数(Podの数) template: #作成されるPodのテンプレート metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 #ポート番号 Deploy
  10. Kubernetesで覚えておきたい概念 Pod Kubernetes における最⼩の管理単位 - Podの中には 1つ以上 の コンテナが含まれる -

    Pod単位でスケールイン・スケールアウトする - PodごとにIPアドレスがアサインされる Pod IP 10.1.206.34 10.1.206.128
  11. Kubernetesで覚えておきたい概念 Deployment PodやReplicaSetを管理するためのオブジェクト - 無停⽌更新の定義 - Replicasetを複製する。 その上で、旧Replicasetの下にあるPodを1つずつ 減らしつつ、新Replicasetの下に新しいPodを作成 する。

    - ロールバックも可能 - Blue/Green Deploymentに利⽤ Replicaset1 Deployment1 Replicaset1 Deployment1 Deployment1 Replicaset1 Deployment1 Replicaset1 Deployment1 Replicaset1 Deployment1 Replicaset1
  12. コンテナーのオーケストレーション・ツール 理想状態を宣⾔すると、その状態を維持しようとする 3つの主要コンポーネント 👉 Pod 👉 Deployment 👉 Service Kubernetesのまとめ

    PodはDeploymentによって作成され、管理されます。 Deploymentによって作成されたPodへのアクセスは、 Serviceを使⽤することで容易になります。
  13. OpenShiftのしくみ OpenShift 4 Platform ⚓ 統合と⾃動化 ⚓ シームレスなKubernetesデプロイ ⚓ インストールの⾃動化

    ⚓ 1クリックでのプラットフォーム更新 ⚓ クラウドリソースのオートスケーリング
  14. OpenShiftのしくみ 1. カタログからApacheを選んで、ウイザードに沿ってデプロイを指定します 2. OpenShiftは⾃動的にgithub上に格納されているテンプレート定義ファイル(json)を⼊⼿します 3. ⼊⼿したテンプレートの指定に沿って、Dockerhub上に公開されているApacheのコンテナイメージを pullします 4. ウイザードで指定された名前や環境などを加味してイメージをbuildのうえ、OpenShiftの内部レジスト

    リーにpushします 5. 引きつづき、OpenShiftはテンプレートの指⽰に沿ってイメージ・ストリームをpodにデプロイするよう K8s(のReplication Controller)に指⽰します 6. 最後にserviceやrouteを構成して外部ユーザーがアクセスできるようにします K8s イメージ・ストリーム ユーザー dockerHub Github等 内部レジストリー 利⽤ Build Deploy あなた integrated docker registry. コンテナイメージをビルドして実⾏(デプロイ)する、という点は Dockerの時と同じですね。ただしK8s基盤上で動かすことで コンテナの運⽤周りが⾶躍的に便利になってます。
  15. Build Deploy K8s Runtime ソースや 構成情報 イメージ・ストリーム 利⽤ Build run/exec

    Docker Runtime ソースや 構成情報 内部レジストリー イメージ ユーザー Pull dockerHub Github等 内部レジストリー 利⽤ ← 素のKubernetesの守備範囲 → dockerとOpenShiftの処理の流れの対⽐
  16. OpenShiftコマンド操作 OpenShiftへログイン > oc login -u <ユーザーID> -p <パスワード> プロジェクト新規作成

    > oc new-project <プロジェクト名> アプリケーション作成 > oc new-app <コンテナイメージ> アプリケーションを公開 > oc expose svc/<アプリケーション名> アプリケーションを削除 > oc delete all -lapp=<アプリケーション名> プロジェクトを削除 > oc delete project <プロジェクト名> OpenShiftからログアウト > oc logout
  17. OpenShiftコマンド集(主なもの) 概要 コマンド オプション ログイン oc login -u developer -p

    hoge ログイン oc login -u developer -p hoge プロジェクトの作成 oc new-project <project-name> プロジェクトの作成 oc new-project <project-name> アプリケーションの作成 oc new-app <app-name> アプリケーションの作成 oc new-app <app-name> サービスの公開 oc expose svc/<app-name> サービスの公開 oc expose svc/<app-name> ステータス表⽰ oc status ステータス表⽰ oc status オブジェクトの詳細表⽰ oc get all オブジェクトの詳細表⽰ oc get all デプロイメント構成(dc) の詳細表⽰ oc describe dc open-liberty デプロイメント構成(dc)の 詳細表⽰ oc describe dc open-liberty アプリケーション⼀式の 削除 oc delete all -lapp=<app-name> アプリケーション⼀式の削 除 oc delete all -lapp=<app-name> プロジェクトの削除 oc delete project <project-name> プロジェクトの削除 oc delete project <project-name> プロジェクトのリスト oc projects プロジェクトのリスト oc projects ログアウト oc logout ログアウト oc logout ログイン oc login -u developer -p hoge ログイン oc login -u developer -p hoge プロジェクトの作成 oc new-project <project-name> プロジェクトの作成 oc new-project <project-name>
  18. CI/CD Workload Service Manage Workload Machine Learning Workload Virtual Private

    cloud Bare metal Public cloud Edge 開発ツールは、ユーザーの 選択と柔軟性を維持 Workload Abstraction Container Applications Any Resources Resource Abstraction 障害が起きても サービス影響を 伴わない設計 Kubernetesの適応範囲
  19. OpenShiftは、Kubernetesとの互換性を維持しながら、CICD機能を強化、開発者に代わって、ビルド、 リポジトリ登録、デプロイを⾃動実⾏します。 KubernetesとOpenShiftの違い OPENSHIFT 機能拡張 OpenShift CICD利⽤ アプリケーション (コンテナ) Kubernetes

    アプリケーション (コンテナ) Ubuntu / CentOS… Linux Kubernetes アプリケーション (コンテナ) コンテナ ランタイム Kubernetesの標準機能 で構築したアプリケーション どちらでも 動作可能 RHEL / RHCOS コンテナ ランタイム
  20. Red Hat OpenShift on IBM Cloud →略してROKS(Red Hat OpenShift の

    Kubernetes Service) マネージド・サービスのOpenShift ROKSは、業界をリードする商⽤コンテナ管理基盤であ るRed Hat OpenShiftのマネージド・サービ スです。 ROKSを使うことで、お客様はOpenShift を⽤いたイン フラの構築や維持、運⽤、および技 術習得の負担を減 らし、ビジネス競争⼒の源泉と なるアプリケーション の開発と管理に専念できる ようになります。
  21. IBM Cloud Paks OpenShiftが動く環境ならどこでも使える オンプレミスからIBM Cloud、さらには他社のハイブリッドクラウドまで、OpenShiftが動く 環境ならどこでも使えるアプリケーション開発/実⾏基盤 Cloud Pak for

    Applications ίϯςφ ϓϥοτϑΥʔϜ ӡ༻αʔϏε Cloud Pak for Data Cloud Pak for Integration Cloud Pak for Automation Cloud Pak for Multicloud Management ίϯςφԽ͞Εͨ *#.ιϑτ΢ΣΞ ίϯςφԽ͞Εͨ *#.ιϑτ΢ΣΞ ίϯςφԽ͞Εͨ *#.ιϑτ΢ΣΞ ίϯςφԽ͞Εͨ *#.ιϑτ΢ΣΞ ίϯςφԽ͞Εͨ *#.ιϑτ΢ΣΞ ΞϓϦέʔγϣϯͷ Ϗϧυ σϓϩΠ ࣮ߦ σʔλͷ ऩू ฤ੒ ղੳ ΞϓϦέʔγϣϯ σʔλ Ϋϥ΢υαʔϏε "1*ͷ౷߹ Ϗδωεɾϓϩηε ҙࢥܾఆ ίϯςϯπͷมֵ ϚϧνΫϥ΢υͷ Մࢹੑ Ψόφϯε ࣗಈԽ Cloud Pak for Security ίϯςφԽ͞Εͨ *#.ιϑτ΢ΣΞ ηΩϡϦςΟʔͷ σʔλɺπʔϧɺ ϫʔΫϑϩʔΛ ݁ͼ͚ͭΔ ίϯςφ ϓϥοτϑΥʔϜ ӡ༻αʔϏε ίϯςφ ϓϥοτϑΥʔϜ ӡ༻αʔϏε ίϯςφ ϓϥοτϑΥʔϜ ӡ༻αʔϏε ίϯςφ ϓϥοτϑΥʔϜ ӡ༻αʔϏε ίϯςφ ϓϥοτϑΥʔϜ ӡ༻αʔϏε IBM Cloud Systems Edge Private Other Cloud AWS Azure GCP 新規販売終了 後継サービスは WebSphere Hybrid Edition
  22. おまけ - OpenShift無料利⽤環境 OʼREILLY katakoda https://www.katacoda.com/openshift Try the beta Developer

    Sandbox for Red Hat OpenShift https://www.openshift.com/try IBM Open Labs https://developer.ibm.com/openlabs/openshift