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

NoOps を目指して Kubernetes ネイティブな物理データセンターを作る

NoOps を目指して Kubernetes ネイティブな物理データセンターを作る

CloudNative Days Fukuoka 2019 講演資料

ymmt2005

April 16, 2019
Tweet

More Decks by ymmt2005

Other Decks in Technology

Transcript

  1. 自己紹介 ▌サイボウズ株式会社で20年ほど ⚫ CTO, 開発本部長, 運用本部長など歴任 ⚫ cybozu.com 開発プロジェクトの責任者 ⚫

    現在は Neco というプロジェクトの責任者 ▌きれいなコード、リファクタ、ドキュメントが好き ⚫ Software Entropy Reducer を名乗ってます
  2. サイボウズ & cybozu.com ▌グループウェアの開発・販売 ⚫ 「サイボウズ Office」は 20 年以上ベストセラー ⚫

    もともとはパッケージソフトウェア販売 ▌cybozu.com ⚫ 自社グループウェアを SaaS で提供 ⚫ 2011年11月からサービス開始
  3. 単調に規模が拡大してきた -5000 0 5000 10000 15000 20000 25000 30000 35000

    40000 45000 2011 2012 2013 2014 2015 2016 2017 2018 契約社数 契約社数 二次回帰 線形回帰 需要予測が容易 強気の投資が可能
  4. cybozu.com の中身 ▌レガシーなアプリ(Office, メールワイズ) ⚫ C++ の CGI, 組み込みのデータベース(sqlite) ▌独自開発の自社インフラ

    ⚫ VM, ストレージ, ロードバランサ等 ▌巨大なモノリス ⚫ インフラ+デプロイ+モニタリング+ログ基盤
  5. NoOps とは NoOps Definition v1.0 より https://github.com/noopsjapan/community/blob/master/DEFINITION.md NoOpsはNo Uncomfortable Ops(システム運用の嬉しくないこと

    をなくす)を目指すための技術、アーキテクチャ、それを実現するための 活動を指します。このアプローチの代表例に、コンテナを活用した高回 復性設計、DevOpsの活用、モニタリングと構成設定の自動化、SRE によるToil削減活動、などがあります。 NoOpsを実現するためのシステムが備えるべき代表的な能力には、高 い回復性、可観測性、構成可能性、安全性の担保があります。これら NoOpsの能力を活用することで、例えば、Self-Healing、In-flight renewing, Adaptive Scale, Safety Everywhereなどのエクス ペリエンスを実現することが可能になります。
  6. なぜ Kubernetes? ▌物理サーバーに直接依存させたくない ⚫ 毎年数百台を増強・入れ替えするため → コンテナ or VM でアプリは動作

    ▌コンテナ・マイクロサービス時代の「勝ち馬」 ⚫ エコシステムが拡大を続けている ▌優れた設計 ⚫ 宣言的 API で大規模分散システムの運用を容易に ⚫ 拡張性が高く、様々な機能をアドオンできる
  7. Neco の設計原則 ▌Be Declarative ⚫ Kubernetes 以外もすべて、宣言的に操作可能にする ▌Define by Software

    ⚫ 特定の目的に縛られたサーバー・ネットワークを作らない ⚫ サーバー・ネットワークの役割をソフトウェアで変更する ▌Test Everything ⚫ 継続的なデリバリーには試験は自動化しないといけない ⚫ データセンターで動作するすべての機能を自動試験する
  8. こんな順番で作ってきました 1. 仮想データセンターの構築ツールを準備 2. 標準化されたラックを単純増設可能にする 3. BGP で OS から経路制御可能にする

    4. 大量のサーバーをネットブートで管理する 5. 機能試験をアップグレードも含め自動化する 6. デリバリ作業を宣言的(GitOps)にする
  9. placemat ▌仮想データセンター構築ツール ⚫ L2 ネットワーク=Linux ブリッジ ⚫ ルーター=BIRDコンテナ ⚫ サーバー=QEMU/KVM

    ▌機能 ⚫ YAML で宣言的に環境構築 ⚫ Virtual BMC (IPMI) ⚫ UEFI HTTP Boot kind: Network name: ext-net type: external use-nat: true address: 192.168.1.0/24 --- kind: DataFolder name: data files: - name: sabakan file: sabakan - name: sabactl file: sabactl --- kind: Image name: ubuntu file: ubuntu-18.04-server-cloudimg-amd64.img --- kind: Node name: host1 interfaces: - ext-net cpu: 1 memory: 1G volumes: - kind: image name: root image: ubuntu copy-on-write: true - kind: vvfat name: data folder: data --- …
  10. サーバー管理&ネットブート ▌Kubernetes Node には CoreOS を採用 ⚫ ネットワークブートに最適化 ⚫ コンテナを動かす機能しかない

    → サーバー再起動で OS がバージョンアップ! ▌サーバーの IP アドレスや状態管理、ネット ワークブートのためのソフトウェアを開発 ⚫ github.com/cybozu-go/sabakan
  11. Kubernetes の自動運用 ▌Kubernetes を動かすには以下が必要 ⚫ etcd, 認証局, kubelet など管理プログラム ⚫

    Kubernetes 自体の運用はなかなかの手間 ▌自動運用ツールを開発 ⚫ sabakan と同じく、管理サーバー上で動作 ⚫ github.com/cybozu-go/cke
  12. 管理サーバーの構成 Ubuntu Ubuntu Ubuntu ……… 手作業管理はしんどい! etcd etcd etcd Vault

    Serf etcdpasswd Sabakan CKE Vault Serf etcdpasswd Sabakan CKE Vault Serf etcdpasswd Sabakan CKE データは etcd クラスタに保存 Made by Neco
  13. 自動デリバリツール neco ▌管理サーバーの構築・運用を自動化 ⚫ etcd, Vault クラスタのブートストラップ ⚫ 管理サーバーの追加・削除 ⚫

    管理サーバー上のアプリの自動更新(GitOps) ▌プロジェクトと同名のレポジトリで管理 ⚫ github.com/cybozu-go/neco ⚫ placemat の仮想 DC 上で push 毎に CI
  14. neco Build Test Neco の CI パイプライン CKE sabakan DC

    Test neco その他 CKE sabakan その他 push push pull push tag push/ daily placemat すべてを結合して 仮想データセンター 上でテスト 仮想DC上のテスト • ブートストラップ • アップグレード • クラスタ機能テスト • 停電復旧テスト • …
  15. GitOps で pull 型デリバリー Boot Server Boot Server neco-updater etcd

    etcd CKE sabakan CKE sabakan neco-worker neco-worker 最新リリースのチェック neco CKE sabakan その他 push tag deb パッケージを ビルド&リリース download
  16. 物理サーバーの自動管理 ▌BIOS や BMC をネットブート後に自動設定 ⚫ github.com/cybozu-go/setup-hw ⚫ BMC 経由で故障パーツの監視機能もあり

    ▌Hashicorp serf で障害検知 ⚫ ネットワーク応答不能ノードを検知 ⚫ sabakan で状態を変えて、CKE が自動で Kubernetes クラスタをメンテナンス
  17. 今年に入ってからの成果 ▌Argo CD で k8s アプリを継続デリバリ ⚫ これも GitOps で

    pull 型 ▌MetalLB で LoadBalancer を実装 ▌Prometheus でモニタリング ▌PodSecurityPolicy で危険な Pod を防止 ▌Calico で NetworkPolicy を実装 (Coming soon)
  18. Neco as of Apr. 2019 GitHub Argo CD Neco CD

    Ubuntu 管理サーバー Sabakan CKE Made by Neco 3~5台 管理サーバーを自動更新 CoreOS Coil CoreOS Coil CoreOS Coil CoreOS Coil ネット ブート Kubernetes 自動管理 Argo CD Prometheus MetalLB Calico … アプリを 自動管理
  19. なぜ、今あえて物理データセンターか ▌全面 IaaS という選択肢も合理的でありえる ⚫ 実際、U.S. 向けは AWS に移行予定 ▌合理性だけじゃない、気持ち

    ⚫ 海外企業がデータセンターを総取りでいいのか ⚫ ハードウェアを含めたコンピューターが好きだ ⚫ 俺たちならやれる、自信がある
  20. Neco の設計原則 ▌Be Declarative ⚫ Kubernetes 以外もすべて、宣言的に操作可能にする ▌Define by Software

    ⚫ 特定の目的に縛られたサーバー・ネットワークを作らない ⚫ サーバー・ネットワークの役割をソフトウェアで変更する ▌Test Everything ⚫ 継続的なデリバリーには試験は自動化しないといけない ⚫ データセンターで動作するすべての機能を自動試験する
  21. Neco 流データセンターの作り方 1. 仮想データセンターの構築ツールを準備する 2. 標準化されたラックを単純増設可能にする 3. BGP で OS

    から経路制御可能にする 4. 大量のサーバーをネットブートで管理する 5. 機能試験を徹底的に自動化する 6. デリバリ作業を宣言的(GitOps)にする
  22. 今後の予定 ▌マルチテナント環境の整備 ⚫ 一般開発者の利用に向けて認証やセキュリティを充実 ▌ミドルウェア as a Service の開発 ⚫

    YAML ひとつ書けば指定したサイズの Elasticsearch クラスタが準備される仕組み ⚫ MySQL も同様に ▌オブジェクトストレージ ⚫ Ceph 運用を自動化する Rook で実装予定