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

CoreOS Container Linuxで始めるベアメタルKubernetes

CoreOS Container Linuxで始めるベアメタルKubernetes

E867c26fd05aed731384496b1facffe2?s=128

kanga333

April 18, 2018
Tweet

More Decks by kanga333

Other Decks in Technology

Transcript

  1. CoreOS Container Linux で始める ベアメタルKubernetes kagawa shoichi (@kanga333) 2018/4/18 Japan

    Container Days v18.04 Meetup
  2. 自己紹介 @kanga333( 香川翔一) MicroAd,Inc インフラチー ム 広告配信サー バやデー タ基盤などを構築/ 運用

  3. はじめに

  4. 話す内容 CoreOS Container Linux(CL) とbootkube を使ってk8s クラスタを ベアメタル環境に作成する方法を紹介 構築するクラスタの特徴 ホストOS

    のカー ネル更新をk8s から管理できる k8s のマスター コンポー ネントをk8s で管理できる
  5. CoreOS Container Linux(CL) とは アプリケー ションをコンテナで動かすことに特化したホストOS 最初からコンテナランタイムが付属 最新のdocker / rkt

    最小限のユー ザランド カー ネルの自動更新機能 数週間で新しいカー ネルが降ってくる
  6. bootkube とは Self‑Hosted Kubernetes なクラスタを構築するツー ル k8s を使ってk8s のマスター コンポー

    ネントをデプロイする kube‑scheduler はdeployments kube‑api はdaemonsets(master のみ) など Kubernetes Meetup Tokyo #8 で詳しく解説されてる[1] bootkube は仮のマスター コンポー ネントを立ち上げたあと kubelet 配下にマスター コンポー ネントを立ち上げ直す
  7. k8s 構築の流れ

  8. MatchBox の用意と設定 MatchBox https://github.com/coreos/matchbox CL 向けのプロビジョンサー バ Redhat 系OS におけるkickstart

    みたいなもの MAC アドレスやHW のUUID などを元にインストー ルする内容 を設定できる terraform で設定を展開可能 NetworkBoot にはiPXE やDHCP なども必要 ( 割愛) [2]
  9. MatchBox の動作イメー ジ terrafrom apply matchbox Node01 MAC: 52:54:00:a1:9c:ae Node02

    MAC: 52:54:00:b2:2f:86 Network Boot Network Boot { "id": "node01", "profile": "k8s-controller", "selector": { "mac": "52:54:00:a1:9c:ae", "os": "installed" } } Kubernetes Controller Kubenetes Worker
  10. Terraform でMachBox の設定を展開 Typhoon というTerraform モジュー ルを利用 https://typhoon.psdn.io/ CL の上にbootkube

    でk8s を作るMatchBox の設定を展開 terraform のtls プラグインで証明書も自動生成
  11. 設定例

  12. サー バの電源ON~BOOT MatchBox に展開された設定を元に各ロー ルのCL が立ち上がる 立ち上がったCL に対してtyphoon はssh で証明書を配布する

    terrafrom apply matchbox Network Boot controller01 controller02 controller03 worker01 worker02 worker03 証明書一式 terrafrom apply (ssh exec)
  13. 各Controller でetcd が起動 systemd によりコントロー ラー でetcd クラスタが立ち上がる controller01 controller02

    controller03 worker01 worker02 worker03 etcd etcd etcd
  14. 各CL 上でsystemd kubelet が起動 systemd により全台でkubelet が立ち上がる kubelet はkube‑api につなぎに行こうとする

    controller01 controller02 controller03 worker01 worker02 worker03 kubelet kubelet kubelet kubelet kubelet kubelet etcd etcd etcd kube-api
  15. bootkube をコントロー ラー 1台で起動 bootkube により仮設のマスターpod が起動する 起動はkubelet のstatic pod

    により実現(‑‑pod‑manifest‑path) kubelet kubelet kubelet kubelet kubelet kubelet etcd etcd etcd bootkube kube-api kube- controller kube- scheduler controller01 controller02 controller03 worker01 worker02 worker03
  16. 仮設kube‑api を介して各種pod が起動 kubelet kubelet kubelet kubelet kubelet kubelet etcd

    etcd etcd bootkube kube-api kube- controller kube- scheduler controller01 controller02 controller03 worker01 worker02 worker03 kubeproxy kube-dns kubeproxy kubeproxy kubeproxy kubeproxy kubeproxy cni-pod cni-pod cni-pod cni-pod cni-pod cni-pod kube-api kube-api kube-api kube- controller kube- controller kube- scheduler kube- scheduler kubernetes
  17. bootkube の完了 仮設のマスタpod ととbootkube が停止 kubelet kubelet kubelet kubelet kubelet

    kubelet etcd etcd etcd controller01 controller02 controller03 worker01 worker02 worker03 kubeproxy kube-dns kubeproxy kubeproxy kubeproxy kubeproxy kubeproxy cni-pod cni-pod cni-pod cni-pod cni-pod cni-pod kube-api kube-api kube-api kube- controller kube- controller kube- scheduler kube- scheduler kubernetes
  18. 完成

  19. プラスアルファ

  20. container‑linux‑update‑operator https://github.com/coreos/container‑linux‑update‑operator ホストCL のカー ネルアップデー トを管理してくれるOperator 新カー ネルが降ってくると1台づつ順次アップデー トする locksmith

    をk8s 版 github からclone してkubectl apply で展開 c d c o n t a i n e r - l i n u x - u p d a t e - o p e r a t o r k u b e c t l a p p l y - f e x a m p l e s / d e p l o y - R
  21. 感想 学習コスト高い 環境を一度整えればk8s 構築/ 運用は楽になってく Typhoon カスタマイズしたい 例えばカー ネルパラメー タ変更したり

    fork して修正するより他ない 現状etcd とkubelet は非k8s 配下 bootkube は現在etcd‑operator との統合中らしい まだk8s のアップデー トはそれなりに大変 全部のコンポー ネントがk8s に乗ったらkubernetes‑operator と か出るはず 今はk8s もimmutable な運用をするのが良い
  22. おわりに CoreOS のエコシステムに乗っかったk8s のデプロイ方法を紹介 カー ネルの更新やk8s のControllePlane をk8s で管理できる ゆくゆくはすべてk8s

    で管理できるはず マイクロアドでは数百台規模の広告配信サー バをk8s 化していきた い人募集してます!
  23. 参考 1. https://www.slideshare.net/atoato88/kubernetes‑meetup‑tokyo‑ 8‑selfhosted‑kubernetes 2. https://qiita.com/kanga/items/73e589318a66e6813e15