Slide 1

Slide 1 text

運用性向上のためのベアメタルサーバ 制御機能の紹介 富士通株式会社 プラットフォームソフトウェア事業本部 Linuxソフトウェア事業部 開発部 古川 勇志郎、宋 書坤 0 Copyright 2020 FUJITSU LIMITED

Slide 2

Slide 2 text

発表者 古川 勇志郎(Furukawa Yushiro) ◼OSSコミュニティ開発リーダ ◼Kubernetes とか openstackとか Copyright 2020 FUJITSU LIMITED 宋 書坤(Song Shukun) ◼OSSコミュニティ開発エンジニア ◼Kubernetes とか Istioとか 1

Slide 3

Slide 3 text

アジェンダ ◼背景 ◼Cluster-API/Metal3-ioについて ◼我々が行っている機能開発の紹介 ◼まとめ Copyright 2020 FUJITSU LIMITED 2

Slide 4

Slide 4 text

背景 ◼ コンテナオーケストレーションによるサービスの運用が普及 ◼ 運用コスト最適化の観点から、すべてのサービスをクラウド上で運用する のではなく、ハイブリッドクラウド運用が増えてきている ◼ 下記の理由から、オンプレ環境でベアメタルサーバの要望あり Copyright 2020 FUJITSU LIMITED ワークロードの高いサービス HWアクセラレーションなどの特殊なデバイスを利用 ビジネスの都合上 扱うデータ量が多く、クラウドに移行させられない 性能 コスト 3

Slide 5

Slide 5 text

オンプレ環境におけるベアメタル運用の課題 ◼サービスが稼働可能な環境にするまでの手順が多く、複雑 ◼自動化は必須! ◼オンプレ環境でも、パブリッククラウドと同様に簡単に マシン管理(増設、運用)を可能にしたい Copyright 2020 FUJITSU LIMITED 導入・運用コスト削減 ベアメタル k8s 運用 4

Slide 6

Slide 6 text

オンプレ環境におけるベアメタル運用の課題 ◼サービスが稼働可能な環境にするまでの手順が多く、複雑 ◼自動化は必須! ◼オンプレ環境でも、パブリッククラウドと同様に簡単に マシン管理(増設、運用)を可能にしたい Copyright 2020 FUJITSU LIMITED 導入・運用コスト削減 Cluster-API Metal3-io 5

Slide 7

Slide 7 text

Cluster-API/Metal3-io について Copyright 2020 FUJITSU LIMITED • 全体像 • Cluster-APIのアーキテクチャ • Control-Planeができるまで • Metal3-ioのアーキテクチャ • ベアメタルサーバができるまで 6

Slide 8

Slide 8 text

Kubernetes クラスタ 全体像 Copyright 2020 FUJITSU LIMITED Cluster-API AWS VMware Azure GCP KVM インフラ クラスタ作成 (cluster.yaml) K8sクラスタ 7

Slide 9

Slide 9 text

◼ Kubernetes上でKubernetesクラスタを 管理するためのAPI 以下のプロバイダーを定義してCluster-API に命令することでK8sクラスタが作成される ◼ Infrastructure provider •マシン、ネットワークを提供 ◼ Control plane provider •K8sコンポを制御するための情報を提供 •参照実装:kubeadm control plane ◼ Bootstrap provider •K8sのノードにするための起動情報を提供 •参照実装:Cluster api bootstrap provider kubeadm(CABPK) Cluster-APIとは? Kubernetes cluster K8sノード Infrastructure Provider Bootstrap Provider K8sノード K8sノード Machine Copyright 2020 FUJITSU LIMITED Control Plane Provider 8

Slide 10

Slide 10 text

Kubernetes クラスタ Metal3-ioとは? ◼Kubernetesクラスタ向けベアメタルサーバ制御機能を提供 ◼ K8s上で動くアプリの一つ、K8sで管理される ◼ Cluster-APIのインフラプロバイダーの、ベアメタル担当のうちの一つ Copyright 2020 FUJITSU LIMITED Cluster-API AWS VMware Azure GCP KVM Metal3-io インフラ クラスタ作成 (cluster.yaml) 9

Slide 11

Slide 11 text

アーキテクチャの説明に入ります ◼Cluster-API + metal3-ioの場合のアーキテクチャ Copyright 2020 FUJITSU LIMITED 10

Slide 12

Slide 12 text

アーキテクチャ(Cluster-API + metal3-io) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig Worker Custom Resource Definition Controller 参照 11

Slide 13

Slide 13 text

アーキテクチャ(Cluster-API + metal3-io) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig Worker 参照 Cluster情報: 1.インフラの情報 2.Control Planeの情報 3.Clusterのネットワーク情報(Pod cidr, Service cidr…) 12 Custom Resource Definition Controller

Slide 14

Slide 14 text

アーキテクチャ(Cluster-API + metal3-io) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig Worker 参照 InfraCluster: プロバイダーが提供する、Clusterの API endpointなどの情報 13 Custom Resource Definition Controller

Slide 15

Slide 15 text

アーキテクチャ(Cluster-API + metal3-io) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig Worker 参照 Control Planeを作るための情報 サーバ起動時のデータ 14 Custom Resource Definition Controller

Slide 16

Slide 16 text

アーキテクチャ(Cluster-API + metal3-io) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig Worker 参照 インフラとなるマシンを作るための テンプレート、プロバイダーが提供する OSイメージなどの情報 15 Custom Resource Definition Controller

Slide 17

Slide 17 text

アーキテクチャ(Cluster-API + metal3-io) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig Worker 参照 起動時データ (Bootstrap data) バックエンドのインフラにて 配備したいマシンの情報 配備対象のマシンの 状態管理 16 Custom Resource Definition Controller

Slide 18

Slide 18 text

アーキテクチャ(Cluster-API core) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig capi-controller-manager 参照 17 Custom Resource Definition Controller

Slide 19

Slide 19 text

アーキテクチャ(Control plane Provider) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig capi-kubeadm-control-plane- controller-manager 参照 18 Custom Resource Definition Controller

Slide 20

Slide 20 text

アーキテクチャ(Bootstrap Provider) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig capi-kubeadm-bootstrap- controller-manager 参照 19 Custom Resource Definition Controller

Slide 21

Slide 21 text

アーキテクチャ(Infrastructure Provider) Copyright 2020 FUJITSU LIMITED KubeadmConfigTemplate MachineDeployment Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Metal3MachineTemplate Metal3Machine Control plane Worker MachineSet Machine KubeadmConfig Machine KubeadmConfig capm3-controller-manager 参照 20 Custom Resource Definition Controller

Slide 22

Slide 22 text

Control Planeができるまでの処理 Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-controller-manager capi-kubeadm-control-plane-controller-manager capi-kubeadm-bootstrap-controller-manager capm3-controller-manager 21

Slide 23

Slide 23 text

Control Planeができるまでの処理(1/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-controller-manager Cluster controller 1.Clusterリソースに基づいて、Metal3Cluster, kubeadmControlPlaneの所属情報 (ownerRef)を設定 2.Metal3Clusterの状態や情報(apiendpointなど)を監視して、Clusterに反映させる 22

Slide 24

Slide 24 text

Control Planeができるまでの処理(2/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-controller-manager Cluster controller 1.Clusterリソースに基づいて、Metal3Cluster, kubeadmControlPlaneのownerRefを設定 2.Metal3Clusterの状態や情報(apiendpointなど)を監視して、Clusterに反映させる 23

Slide 25

Slide 25 text

Control Planeができるまでの処理(3/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-kubeadm-control-plane-controller-manager Kubeadm control plane controller 1.KubeadmControlPlaneのOwnerRefに記載されている所有者(Owner)の状態をチェック 2.InfraMachineTemplateによってInfraMachineを作成 3.自身のSpec.kubeadmConfigSpecによってKubeadmConfigを作成 4.作成したInfraMachineとKubeadmConfigをもとにMachineを作成 24

Slide 26

Slide 26 text

Control Planeができるまでの処理(4/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-kubeadm-control-plane-controller-manager Kubeadm control plane controller 1.KubeadmControlPlaneのOwnerRefに記載されているOwnerの状態をチェック 2.InfraMachineTemplateによって起動したいサーバのOS情報など( InfraMachine)を作成 3.自身のSpec.kubeadmConfigSpecによってKubeadmConfigを作成 4.作成したInfraMachineとKubeadmConfigをもとにMachineを作成 25

Slide 27

Slide 27 text

Control Planeができるまでの処理(5/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-kubeadm-control-plane-controller-manager Kubeadm control plane controller 1.KubeadmControlPlaneのOwnerRefに記載されているOwnerの状態をチェック 2.InfraMachineTemplateによってInfraMachineを作成 3.自身のSpec.kubeadmConfigSpecによってKubeadmConfigを作成 4.作成したInfraMachineとKubeadmConfigをもとにMachineを作成 26

Slide 28

Slide 28 text

Control Planeができるまでの処理(6/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-kubeadm-control-plane-controller-manager Kubeadm control plane controller 1.KubeadmControlPlaneのOwnerRefに記載されているOwnerの状態をチェック 2.InfraMachineTemplateによってInfraMachineを作成 3.自身のSpec.kubeadmConfigSpecによってKubeadmConfigを作成 4.作成したInfraMachineとKubeadmConfigをもとにMachineを作成 27

Slide 29

Slide 29 text

Control Planeができるまでの処理(7/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-kubeadm-bootstrap-controller-manager Kubeadm config controller 1. Pending状態のMachineに対して、BootstrapConfig.Status.BootstrapDataを設定 (マシン起動時に必要な情報:ex. Cloud-init、kubeadm initなど) 28

Slide 30

Slide 30 text

Control Planeができるまでの処理(8/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capi-controller-manager Machine controller 関連するMetal3Machineの状態などを監視して、Machine自身の稼働状態 (pending、provisioning、provisioned、running)を設定 29

Slide 31

Slide 31 text

Control Planeができるまでの処理(9/9) Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine capm3-controller-manager Metal3Machine Controller Machineを参照してMetal3Machine情報を更新し、Machineをprovisioningする Control Planeの完成 30

Slide 32

Slide 32 text

Cluster-APIとmetal3-ioとの関連 Copyright 2020 FUJITSU LIMITED Cluster Metal3MachineTemplate Metal3Cluster KubeadmControlPlane Metal3Machine Control plane KubeadmConfig Machine Metal3-io あくまでデータ Ex. Ubuntu20作りたい 実際に ベアメタルサーバを配備 Ex. Ubuntu20をプロビジョニング 31

Slide 33

Slide 33 text

Metal³のアーキテクチャ Metal3Machine BareMetalHost Bare Metal Server Copyright 2020 FUJITSU LIMITED capm3-controller-manager ホストインベントリ BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server 要求 Bare metal server backend Baremetal Operator 32

Slide 34

Slide 34 text

Metal³のアーキテクチャ Metal3Machine BareMetalHost Bare Metal Server Copyright 2020 FUJITSU LIMITED capm3-controller-manager ホストインベントリ BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server 要求 Baremetal Operator Bare metal server backend ベアメタルサーバを表すCRD BareMetalHostのグループ 配備したいサーバ情報 33

Slide 35

Slide 35 text

Metal³のアーキテクチャ Metal3Machine BareMetalHost Bare Metal Server Copyright 2020 FUJITSU LIMITED capm3-controller-manager Metal3Machine Controller ホストのインベントリから適切なBareMetalHostを抽出し、baremetalhostオブジェクトの情報を 更新(bootstrap dataなど) ホストインベントリ BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server 要求 34

Slide 36

Slide 36 text

Metal³のアーキテクチャ Metal3Machine BareMetalHost Bare Metal Server Copyright 2020 FUJITSU LIMITED Baremetal Operator Bare metal host controller Baremetalhostリソースを監視し、ベアメタルサーバの命令をバックエンドに対して発行 ホストインベントリ BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server 要求 35

Slide 37

Slide 37 text

Metal³のアーキテクチャ Metal3Machine BareMetalHost Bare Metal Server Copyright 2020 FUJITSU LIMITED Bare metal server backend Openstack Ironic Baremetal operatorから指示をもらい、 ベアメタルサーバを配備 (inspect、電源管理、OSインストールなど) ホストインベントリ BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server BareMetalHost Bare Metal Server 要求 バックエンドには Openstack Ironicを流用 • OpenStack Foundationにて 品質が確保 • 開発コスト削減 36

Slide 38

Slide 38 text

【補足】OpenStack Ironicとは? ◼ 物理マシンの配備を行うコンポーネント ベアメタル(BM: Bare Metal)プロビジョニング ◼ テナント利用者はNova経由でベアメタルサーバを配備可能 Hypervisor Provide same API for users Manage VMs Manage BMs Give me an instance Flavor Flavor … … Copyright 2020 FUJITSU LIMITED 37

Slide 39

Slide 39 text

ベアメタルサーバが配備されるまでの動き ベアメタルサーバ:配備可能な状態へと移行 電源ON ⇒ PXEboot ⇒ initramfs起動 ⇒ inspection(HW情報収集) BaremtalHostの State: Registering ⇒ Inspecting ⇒ READY Copyright 2020 FUJITSU LIMITED BareMetalHost が作成される BareMetalHost Metal3Machine と が関連づく ベアメタルサーバ:プロビジョニング(配備)される 電源ON ⇒ PXEboot ⇒ initramfs起動 ⇒ OSイメージ転送 ⇒ 再起動 BaremtalHostの State: READY ⇒ Provisioning ⇒ Provisioned ① ② 38

Slide 40

Slide 40 text

• RAID/BIOS自動設定(本日は説明省略) • クラスタオートリサイズ • ネットワーク自動設定 私たちが開発に取り組んでいる機能 Copyright 2020 FUJITSU LIMITED 39

Slide 41

Slide 41 text

◼ ワークロードの負荷に応じたクラスタ規模の自動調整機能 ◼ この実現に向けて、下記の機能を開発中: ◼ ネットワーク自動設定 ◼ ベアメタルサーバのソフトリセット クラスタオートリサイズ 本番環境 Worker Node Worker Node テスト環境 Master Node Worker Node Master Node 本番環境 Master Node Worker Node Worker Node テスト環境 Master Node Worker Node Copyright 2020 FUJITSU LIMITED 40

Slide 42

Slide 42 text

◼ ワークロードの負荷に応じたクラスタ規模の自動調整機能 ◼ この実現に向けて、下記の機能を開発中: ◼ ネットワーク自動設定 ◼ クラスタのオートスケール機能 ◼ ベアメタルサーバのソフトリセット クラスタオートリサイズ 本番環境 Worker Node Worker Node テスト環境 Master Node Worker Node Master Node 本番環境 Master Node Worker Node Worker Node テスト環境 Master Node Worker Node Copyright 2020 FUJITSU LIMITED コミュニティに提案するも、以下の理由で承認されず: • 規模が大きすぎて、Metal3の役割を超えている • ベアメタルサーバの再配備の時間(2, 30分)は許容できないし オートスケールは無意味になる 41

Slide 43

Slide 43 text

Baremetal Server NIC NIC Copyright 2020 FUJITSU LIMITED Metal3-ioの管理対象 0/1 0/2 自動設定対象 ◼K8sのAPIの延長でベアメタルサーバの隣接スイッチに VLANなどの自動設定を行う ◼現在開発中 ネットワーク自動設定(1/2) 42

Slide 44

Slide 44 text

◼ SwitchのCRDと制御用コントローラーを追加 (Create, delete, configure vlan …) ◼ 物理スイッチの設定はAnsibleを利用 ◼ 現在は、自社スイッチ向けのAnsible-collectionsを開発中 ネットワーク自動設定(2/2) Kubernetes cluster Switch Switch Bare Metal Server Switch Controller Machine BareMetalHost 管理LAN 業務LAN Copyright 2020 FUJITSU LIMITED BareMetal BMC NIC 43

Slide 45

Slide 45 text

まとめ ◼Kubernetes、Cluster-API、metal3-ioについて紹介 ◼オンプレ環境でのKubernetes導入・運用コスト削減 ◼それぞれのアーキテクチャと処理の流れについて説明 ◼我々が Metal3-ioにて開発中の機能について紹介 Copyright 2020 FUJITSU LIMITED 44

Slide 46

Slide 46 text

Metal3-ioコミュニティにて マルチベンダサポートを充実させましょう 終わりに https://github.com/metal3-io https://groups.google.com/forum/#!forum/metal3-dev #cluster-api-baremetal channel on Kubernetes slack Copyright 2020 FUJITSU LIMITED 45

Slide 47

Slide 47 text

Copyright 2020 FUJITSU LIMITED 46

Slide 48

Slide 48 text

Copyright 2020 FUJITSU LIMITED 47