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

Windows コンテナ Dojo 第5回 OpenShift で学ぶ Kubernetes 入門

Windows コンテナ Dojo 第5回 OpenShift で学ぶ Kubernetes 入門

Red Hat OpenShiftの環境 (Red Hat OpenShift LocalまたはDeveloper Sandbox for Red Hat OpenShift) を利用し、主にコマンド中心で次のシナリオを体験します
・OCコマンドからOpenShiftに接続する
・Docker HubにあるNginxのイメージ(root権限不要のもの)を展開する
・起動中のPodを削除する
・PodをServiceで公開する
・ルートを作成する(※ KubenetesではなくOpenShiftの機能)
・ルートを使ってアプリにアクセスする
・DeploymentのPod数を増やす
・Deploymentに使っているコンテナイメージを更新する
・イメージの更新を取り消し、前のバージョンに戻す

E5eb221d34d4ffbe973f8542b4c3a00e?s=128

Akira Onishi (IBM)
PRO

July 21, 2022
Tweet

More Decks by Akira Onishi (IBM)

Other Decks in Programming

Transcript

  1. ೔ຊΞΠɾϏʔɾΤϜגࣜձࣾ ςΫϊϩδʔࣄۀຊ෦ ΧελϚʔɾαΫηε ϓϦϯγύϧɾϚωʔδϟʔ ݉ 8JOEPXT$POUBJOFS1PSUJOH1SPHSBNਪਐϦʔμʔ େ੢ জ "LJSB0OJTIJ!JCNDPN 5XJUUFS!POJBL

     IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ IUUQTXXXMJOLFEJODPNJOPOJBL Windows ίϯςφ %PKP ୈճ 0QFO4IJGUͰֶͿ ,VCFSOFUFTೖ໳
  2. ࣗݾ঺հ 1SPQFSUZ 7BMVF ࢯ໊ େ੢ জ 5XJUUFS-JOLFE*O POJBL *5ۀքྺ ೥໨

    ௚ۙͷ৬ྺ Microsoft ೥ *#.೥໨ )BTI5BH ͍͍Ͷ͐੩Ԭੜ׆ ࠲ӈͷ໏ ౿·Εͯ΋ͳ্ཱ͓͕ͪΔಓͷ૲ Α͘࢖͏ٕ ೴಺ม׵Ͱࣗ෼ΛϙδςΟϒʹ IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ 'BDFCPPLʮ͓ʹ͋͘ʯͰݕࡧ
  3. ୈճͷൣғ 3FE)BU0QFO4IJGUΛ,VCFSOFUFTͱͯ͠ར༻ ,VCFDUM ίϚϯυΛ࢖ͬͯ؀ڥΛૢ࡞ ˞ମݧ͕த৺ͷͨΊɺ,VCFSOFUFTΛ໢ཏతʹ ղઆ͢ΔηογϣϯͰ͸͋Γ·ͤΜɻ

  4. 0QFO4IJGUɺϋΠϒϦουΫϥ΢υઓུ

  5. ,VCFSOFUFTϓϥοτϑΥʔϜ https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/ ίϯςφͷ͋Δ΂͖ঢ়ଶΛ એݴతʹهड़ɺ ͦΕʹԠ࣮ͨ͡ߦɺࣗಈԽ ෛՙ෼ࢄɺࣗݾम෮ ػີ৘ใͱߏ੒؅ཧ

  6. ,VCFSOFUFTΞʔΩςΫνϟʔ %# FUDE "1*4FSWFS $MJFOU6TFS LVCFDUM $-* 8BUDIFS $POUSPMMFS /FUXPSLT

    7PMVNFT 4FDSFUT  3FRVFTU .POJUPS ,VCFSOFUFT͸σʔλϕʔε FUDE ͷΑ͏ͳ΋ͷ 8BUDIFSͱ$POUSPMMFS͕σʔλϕʔε಺ͷมߋΛ൓ө͢Δ "1*4FSWFS͸ IUUQ3&45ʹΑΔσʔλϕʔεͷϑϩϯτΤϯυ /PEF /PEF 1PE #BTF04,FSOFM $POUBJOFS 3VOUJNF *NBHFT -JCFSUZ 6CVOUV ,VCFMFU ,VCF 1SPYZ 1PE4FSWJDF $ $ $
  7. ,VCFSOFUFTͷϫʔΫϩʔυ https://kubernetes.io/ja/docs/concepts/workloads/ 1PE,VCFSOFUFT಺Ͱ ࡞੒ɾ؅ཧͰ͖Δ ίϯϐϡʔςΟϯάͷ ࠷খͷσϓϩΠՄೳͳϢχοτ ίϯςφͷΠϯελϯεʣ %FQMPZNFOUల։ͷཧ૝తͳঢ়ଶ 3FQMJDBTFU1PEͷෳ੡໨ඪ

  8. ࠓ೔ͷ࿩୊ 3FE)BU0QFO4IJGUͷ؀ڥΛར༻͠ɺ ओʹίϚϯυத৺Ͱ࣍ͷγφϦΦΛମݧ͠·͢ ɾ0$ίϚϯυ͔Β0QFO4IJGUʹ઀ଓ͢Δ ɾ%PDLFS)VCʹ͋Δ/HJOYͷΠϝʔδ SPPUݖݶෆཁͷ΋ͷ Λల։͢Δ ɾىಈதͷ1PEΛ࡟আ͢Δ ɾ1PEΛ4FSWJDFͰެ։͢Δ ɾϧʔτΛ࡞੒͢Δ

    ˞,VCFSOFUFTͰ͸ͳ͘0QFO4IJGUͷػೳ ɾϧʔτΛ࢖ͬͯΞϓϦʹΞΫηε͢Δ ɾ%FQMPZNFOUͷ1PE਺Λ૿΍͢ ɾ%FQMPZNFOUʹ࢖͍ͬͯΔίϯςφΠϝʔδΛߋ৽͢Δ ɾΠϝʔδͷߋ৽ΛऔΓফ͠ɺલͷόʔδϣϯʹ໭͢
  9. ࢀߟ%PDLFS)VCΠϝʔδΛ࢖͏৔߹ͷ஫ҙ఺ IUUQTDMPVESFEIBUDPNCMPHEFQMPZJOHJNBHFTGSPNEPDLFSIVC IUUQTDMPVESFEIBUDPNCMPHHFUUJOHBOZEPDLFSJNBHFSVOOJOHJOZPVSPXOPQFOTIJGUDMVTUFS https://cloud.redhat.com/blog/managing-sccs-in-openshift https://docs.openshift.com/container-platform/4.10/authentication/managing-security-context-constraints.html Docker Hubに公開されて いるコンテナイメージの中 には、LinuxのRoot権限を 必要とするものがあり、

    OpenShiftのセキュリティ 設定により動作しない場合 があります
  10. 3FE)BU0QFO4IJGUͷ؀ڥΛىಈ 3FE)BU0QFO4IJGU-PDBMΛ͓࣋ͪͷ৔߹ DSD TUBSU͋Δ͍͸(6*ϝχϡʔ͔Βىಈ ͋Δ͍͸ %FWFMPQFS4BOECPYGPS3FE)BU0QFO4IJGU΁ ઀ଓ

  11. PD ίϚϯυͷ༗ޮԽ 3FE)BU0QFO4IJGU-PDBMͷ৔߹ IUUQTBDDFTTSFEIBUDPNEPDVNFOUBUJPOFOVTSFE@IBU@PQFOTIJGU@MPDBMIUNMHFUUJOH@TUBSUFE@HVJEFVTJOH@HTHBDDFTTJOHUIFPQFOTIJGUDMVTUFSXJUIPD@HTH 8JOEPXT 1PXFS4IFMM DSD PDFOWc*OWPLF&YQSFTTJPO .BD04 FWBM

    DSD PDFOW GUIから [Open developer terminal]を 選択すると oc コマンドが有効化され たターミナル (Windowsの場合は PowerShell)が起動します
  12. PD ίϚϯυͷμ΢ϯϩʔυ ΋͠3FE)BU0QFO4IJGU-PDBM؀ڥΛߏஙͰ͖ͣɺ %FWFMPQFS4BOECPYΛར༻͢Δ৔߹ɺԼه63-͔Β PD ίϚϯυΛऔಘ 3FE)BUΞΧ΢ϯτ͕ඞཁ IUUQTDPOTPMFSFEIBUDPNPQFOTIJGUEPXOMPBETUPPMPD PDίϚϯυͷ;JQϑΝΠϧʹLVCFDUMίϚϯυؚ͕·Ε͍ͯ·͢

  13. LVCFDUM ίϚϯυͷμ΢ϯϩʔυ https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/ kubectl コマンドは演習で必須です Ocコマンドをダウンロードした⽅は 同梱のkubectlを使ってください もし今後、個別にkubectlの インストールが必要な場合は、 このスライドにあるURLを参照し、

    インストール⽅法に従って、 コマンドを有効にしてください
  14. PDίϚϯυͱLVCFDUMίϚϯυ OC コマンド kubectl コマンド Red Hat OpenShift API Server

    (クラスタAPI) Kubernetes API Server https://docs.openshift.com/container-platform/4.10/cli_reference/openshift_cli/usage-oc-kubectl.html https://kubernetes.io/ja/docs/concepts/overview/kubernetes-api/ https://docs.openshift.com/container-platform/4.10/rest_api/index.html Red Hat OpenShift クラスタ Kubernetes クラスタ ※ kubectlからOpenShift API Serverへは接続できません
  15. Kubectl cluster-info のエラーメッセージ (developerアカウントでは権限が⾜りていない) To further debug and diagnose cluster

    problems, use 'kubectl cluster-info dump'. Error from server (Forbidden): services is forbidden: User "developer" cannot list resource "services" in API group "" in the namespace "kube-system" ԋशPD ίϚϯυͱ LVCFDUM ίϚϯυ PD MPHJOVEFWFMPQFSQEFWFMPQFSIUUQTBQJDSDUFTUJOH PD OFXQSPKFDULVCF LVCFDUM DMVTUFSJOGP LVCFDUM DPOGJHHFUDPOUFYUT PD MPHPVU PD MPHJOVLVCFBENJO Qύεϫʔυ IUUQTBQJDSDUFTUJOH PD QSPKFDULVCF oc new-project kube101 のエラーメッセージ (Developer Sandboxだと許可されていない) Error from server (Forbidden): You may not request a new project via this API.
  16. ԋश4BOECPYͷ৔߹ ↓の oc コマンド⾏をコピー

  17. ԋशίϯςφΠϝʔδ͔ΒΞϓϦల։ LVCFDUM DSFBUFEFQMPZNFOUOHJOYBQQJNBHFOHJOYJODOHJOYVOQSJWJMFHFEBMQJOF LVCFDUM HFUQPET

  18. ԋशىಈதͷ1PEΛ࡟আ͢Δ LVCFDUM HFUQPET LVCFDUM EFMFUFQPE1PE໊ OHJOYBQQYYYY  LVCFDUM HFUQPET IUUQTWJEFPJCNDPNDIBOOFMWJEFPEFMFUF1PE#Z,VCFDUM

  19. ԋश4FSWJDFΛ࡞੒͢Δ LVCFDUM FYQPTFEFQMPZNFOUOHJOYBQQUZQF/PEF1PSUQPSU LVCFDUM HFUTFSWJDFOHJOYBQQ Pod 1 Label: app=nginx Port:32582

    https://kubernetes.io/ja/docs/concepts/services-networking/service/
  20. ԋशϧʔτΛ࡞੒͢Δ 1. OpenShiftのコンソールを開き、 画⾯左上のメニューから [Administrator]パースペクティブに 切り替えます 2. [ネットワーク] > [ルート]を選びます

    3. [ルートの作成]をクリックします https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.10/html/networking/_configuring-routes ※ もし[ルートの作成]が表⽰されて いない場合kubeadminとしてログインが必要
  21. ԋशϧʔτΛ࡞੒͢Δ ଓ͖ 4. 必須項⽬を⼊⼒します 名前: nginx-app パス: /web サービス: nginx-app

    ターゲットポート: 8080 → 8080 (TCP) 5. [作成]をクリックします
  22. ԋशϧʔτΛ࢖ͬͯΞϓϦʹΞΫηε 1.[場所]に書かれているURLにアクセス 2.次のページが表⽰されるのを確認 404 Not Found nginx/1.15.12

  23. ԋश%FQMPZNFOUͷ1PE਺Λ૿΍͢ LVCFDUM TDBMFEFQMPZNFOUOHJOYBQQSFQMJDBT IUUQTWJEFPJCNDPNDIBOOFMWJEFPLVCFDUM4DBMF%FQMPZNFOU --replicas= の数字を変えて、実⾏されているPodの数が 変化することを確認しましょう Red Hat OpenShiftの実⾏環境で利⽤できるリソースに

    制約がある場合、必ずしも全てのPodが起動するとは 限りません (Kubernetesとしては宣⾔された値に近づく よう努⼒しますが、利⽤可能なシステムリソースが 確保できない場合は展開できないこともあります)
  24. ԋश%FQMPZNFOUͷΠϝʔδมߋ LVCFDUM TFUJNBHFEFQMPZNFOUOHJOYBQQOHJOYVOQSJWJMFHFEOHJOYJODOHJOYVOQSJWJMFHFE LVCFDUM SPMMPVUTUBUVTEFQMPZNFOUOHJOYBQQ IUUQTWJEFPJCNDPNDIBOOFMWJEFPLVCFDUM4FU*NBHFSPMMPVUVOEP nginxinc/nginx-unprivileged:1.15.12-alpine nginxinc/nginx-unprivileged:1

  25. nginxinc/nginx-unprivileged:1 ԋशมߋͨ͠ΠϝʔδͷऔΓফ͠ LVCFDUM SPMMPVUVOEPEFQMPZNFOUOHJOYBQQ IUUQTWJEFPJCNDPNDIBOOFMWJEFPLVCFDUM4FU*NBHFSPMMPVUVOEP nginxinc/nginx-unprivileged:1.15.12-alpine

  26. PS C:¥Users¥containerdev> oc login -u developer -p developer https://api.crc.testing:6443 >>

    oc new-project kube101 >> kubectl cluster-info >> kubectl config get-contexts Login successful. You have one project on this server: "test" Using project "test". Now using project "kube101" on server "https://api.crc.testing:6443". You can add applications to this project with the 'new-app' command. For example, try: oc new-app rails-postgresql-example to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application: kubectl create deployment hello-node --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 -- /agnhost serve-hostname To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. Error from server (Forbidden): services is forbidden: User "developer" cannot list resource "services" in API group "" in the namespace "kube-system" CURRENT NAME CLUSTER AUTHINFO NAMESPACE crc-admin api-crc-testing:6443 kubeadmin default crc-developer api-crc-testing:6443 developer default * kube101/api-crc-testing:6443/developer api-crc-testing:6443 developer/api-crc-testing:6443 kube101 test/api-crc-testing:6443/developer api-crc-testing:6443 developer/api-crc-testing:6443 test PS C:¥Users¥containerdev> kubectl create deployment nginx-app --image=nginxinc/nginx-unprivileged:1.15.12-alpine >> >> kubectl get pods >> deployment.apps/nginx-app created NAME READY STATUS RESTARTS AGE nginx-app-7668764795-nfxxf 0/1 ContainerCreating 0 0s PS C:¥Users¥containerdev> kubectl delete pod nginx-app-7668764795-nfxxf pod "nginx-app-7668764795-nfxxf" deleted PS C:¥Users¥containerdev> kubectl get pods NAME READY STATUS RESTARTS AGE nginx-app-7668764795-s7k6n 1/1 Running 0 6s PS C:¥Users¥containerdev> kubectl expose deployment nginx-app --type="NodePort" --port=8080 >> kubectl get service nginx-app service/nginx-app exposed NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-app NodePort 10.217.5.113 <none> 8080:32542/TCP 0s PS C:¥Users¥containerdev> kubectl scale deployment nginx-app --replicas=5 deployment.apps/nginx-app scaled PS C:¥Users¥containerdev> kubectl get pods NAME READY STATUS RESTARTS AGE nginx-app-7668764795-5vqc9 1/1 Running 0 7s nginx-app-7668764795-7vmqf 1/1 Running 0 7s nginx-app-7668764795-s7k6n 1/1 Running 0 3m24s nginx-app-7668764795-swkt9 1/1 Running 0 7s nginx-app-7668764795-v7hz2 1/1 Running 0 7s PS C:¥Users¥containerdev> kubectl set image deployment/nginx-app nginx-unprivileged=nginxinc/nginx-unprivileged:1 deployment.apps/nginx-app image updated PS C:¥Users¥containerdev> kubectl rollout status deployment/nginx-app deployment "nginx-app" successfully rolled out PS C:¥Users¥containerdev> kubectl rollout undo deployment nginx-app deployment.apps/nginx-app rolled back PS C:¥Users¥containerdev> 演習確認︓ Developer Sandbox for OpenShift Red Hat OpenShift Local (Windows 11 Pro)
  27. ·ͱΊ 3FE)BU0QFO4IJGUͷ؀ڥΛར༻͠ɺ ओʹίϚϯυத৺Ͱ࣍ͷγφϦΦΛମݧ ɾ0$ίϚϯυ͔Β0QFO4IJGUʹ઀ଓ͢Δ ɾ%PDLFS)VCʹ͋Δ/HJOYͷΠϝʔδ SPPUݖݶෆཁͷ΋ͷ Λల։͢Δ ɾىಈதͷ1PEΛ࡟আ͢Δ ɾ1PEΛ4FSWJDFͰެ։͢Δ ɾϧʔτΛ࡞੒͢Δ

    ˞,VCFSOFUFTͰ͸ͳ͘0QFO4IJGUͷػೳ ɾϧʔτΛ࢖ͬͯΞϓϦʹΞΫηε͢Δ ɾ%FQMPZNFOUͷ1PE਺Λ૿΍͢ ɾ%FQMPZNFOUʹ࢖͍ͬͯΔίϯςφΠϝʔδΛߋ৽͢Δ ɾΠϝʔδͷߋ৽ΛऔΓফ͠ɺલͷόʔδϣϯʹ໭͢
  28. ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独⾃の⾒解を反映したものです。それらは情報 提供の⽬的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助⾔を意図したものではなく、またそのような結果を⽣むも のでもありません。本講演資料に含まれている情報については、完全性と正確性を期するよう努⼒しましたが、「現状のまま」提供され、明⽰または暗 ⽰にかかわらずいかなる保証も伴わないものとします。本講演資料またはその他の資料の使⽤によって、あるいはその他の関連によって、いかなる損害 が⽣じた場合も、IBMは責任を負わないものとします。 本講演資料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかな る保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使⽤を規定する適⽤ライセンス契約の条項を変更することを意図したもので もなく、またそのような結果を⽣むものでもありません。 本講演資料でIBM製品、プログラム、またはサービスに⾔及していても、IBMが営業活動を⾏っているすべての国でそれらが使⽤可能であることを暗⽰ するものではありません。本講演資料で⾔及している製品リリース⽇付や製品機能は、市場機会またはその他の要因に基づいてIBM独⾃の決定権をもっ

    ていつでも変更できるものとし、いかなる⽅法においても将来の製品または機能が使⽤可能になると確約することを意図したものではありません。本講 演資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上⾼の向上、またはその他の結果が⽣じると述べる、または暗⽰すること を意図したものでも、またそのような結果を⽣むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使⽤し た測定と予測に基づいています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラ ミングの量、⼊出⼒構成、ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、 個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。 記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使⽤したか、またそれらのお客様が達成した結果の実例として⽰された ものです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 IBM、IBM ロゴ、ibm.com、IBM Cloud、IBM Cloud Paksは、 世界の多くの国で登録されたInternational Business Machines Corporationの商標です。他 の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 Microsoft, Windows, Windows Server, .NET Framework, .NET, .NET Coreは、Microsoft Corporationの商標または登録商標です。