Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

はじめに

Slide 4

Slide 4 text

話す内容 CoreOS Container Linux(CL) とbootkube を使ってk8s クラスタを ベアメタル環境に作成する方法を紹介 構築するクラスタの特徴 ホストOS のカー ネル更新をk8s から管理できる k8s のマスター コンポー ネントをk8s で管理できる

Slide 5

Slide 5 text

CoreOS Container Linux(CL) とは アプリケー ションをコンテナで動かすことに特化したホストOS 最初からコンテナランタイムが付属 最新のdocker / rkt 最小限のユー ザランド カー ネルの自動更新機能 数週間で新しいカー ネルが降ってくる

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

k8s 構築の流れ

Slide 8

Slide 8 text

MatchBox の用意と設定 MatchBox https://github.com/coreos/matchbox CL 向けのプロビジョンサー バ Redhat 系OS におけるkickstart みたいなもの MAC アドレスやHW のUUID などを元にインストー ルする内容 を設定できる terraform で設定を展開可能 NetworkBoot にはiPXE やDHCP なども必要 ( 割愛) [2]

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Terraform でMachBox の設定を展開 Typhoon というTerraform モジュー ルを利用 https://typhoon.psdn.io/ CL の上にbootkube でk8s を作るMatchBox の設定を展開 terraform のtls プラグインで証明書も自動生成

Slide 11

Slide 11 text

設定例

Slide 12

Slide 12 text

サー バの電源ON~BOOT MatchBox に展開された設定を元に各ロー ルのCL が立ち上がる 立ち上がったCL に対してtyphoon はssh で証明書を配布する terrafrom apply matchbox Network Boot controller01 controller02 controller03 worker01 worker02 worker03 証明書一式 terrafrom apply (ssh exec)

Slide 13

Slide 13 text

各Controller でetcd が起動 systemd によりコントロー ラー でetcd クラスタが立ち上がる controller01 controller02 controller03 worker01 worker02 worker03 etcd etcd etcd

Slide 14

Slide 14 text

各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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

仮設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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

完成

Slide 19

Slide 19 text

プラスアルファ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

感想 学習コスト高い 環境を一度整えればk8s 構築/ 運用は楽になってく Typhoon カスタマイズしたい 例えばカー ネルパラメー タ変更したり fork して修正するより他ない 現状etcd とkubelet は非k8s 配下 bootkube は現在etcd‑operator との統合中らしい まだk8s のアップデー トはそれなりに大変 全部のコンポー ネントがk8s に乗ったらkubernetes‑operator と か出るはず 今はk8s もimmutable な運用をするのが良い

Slide 22

Slide 22 text

おわりに CoreOS のエコシステムに乗っかったk8s のデプロイ方法を紹介 カー ネルの更新やk8s のControllePlane をk8s で管理できる ゆくゆくはすべてk8s で管理できるはず マイクロアドでは数百台規模の広告配信サー バをk8s 化していきた い人募集してます!

Slide 23

Slide 23 text

参考 1. https://www.slideshare.net/atoato88/kubernetes‑meetup‑tokyo‑ 8‑selfhosted‑kubernetes 2. https://qiita.com/kanga/items/73e589318a66e6813e15