Slide 1

Slide 1 text

ICTSCにおける k8s運用の話 Takeru Hayasaka(@takemioIO) 2021/03/07 ICTSC2020 LT会 https://unsplash.com/photos/SInhLTQouEk 1

Slide 2

Slide 2 text

自己紹介 1. 竹/TakeruHayasaka/@takemioIOと言います k8sの運用とかなんでもやってる人 2. パケット処理書きすぎてoptionなしL3までなら 目で読めるようになった.... 3. 最近の趣味はなろう小説を漁ること 4. 来年から京都に行くんですが地元が宮城で 友達と彼女がいないので募集しています。 助けてください(メソメソ) 5. #ictsc_bar_night でトラコンBAR というトークショウをやってる 2

Slide 3

Slide 3 text

アウトライン 1. Overview: 今年のk8sのトポロジー 2. ICTSCにおけるk8s運用とは? • プロビジョニング編 • ストレージ 編 • ネットワーク編 • 監視編 • アプリケーション編 3. まとめと一年を振り返ってみて 3

Slide 4

Slide 4 text

Overview https://unsplash.com/photos/ur7BDi9MpXg 4

Slide 5

Slide 5 text

ICTSCにおいてのk8sクラスタ ICTSCにおいてのk8sクラスタはさくらのクラウドに全て乗ってる • スコアサーバーを載せたり • 監視基盤を載せたり • VMのプロビジョニングをするためのツールを載せたり... とかの所謂出来れば落としたくないものとかを載せて動かす 運用を行っています • 主に面倒を常に見てるのは大体4-5人ぐらい (@takemioIOが取りまとめや全体のアーキテクトをやってるが 運営がこれ欲しいとか言って雑にPRが飛んでくることもある) • 基本インフラ紹介をあまりちゃんとされないところの裏方さんです コンテスト直前によくSREみたいなことをやってると思ってもらうと イメージしやすいかも??? 5

Slide 6

Slide 6 text

k8sクラスタの論理構成 6

Slide 7

Slide 7 text

k8sクラスタを含めた全体像 7

Slide 8

Slide 8 text

ICTSCにおいてのk8sクラスタ • prd: 皆さんがアクセスするものを載せるやつ • dev: 壊していいやつ • wsp: 監視系やCDなどを載せるところ • 1クラスタあたりのリソース • global v4addr /27 • master x 3 • 1node: 4vcpu, 8mem, disk 100 • worker x 3 • 1node: 8vcpu, 32mem, disk 250 • (LB + BGP Router) x 3 • 1node: 4vcpu, 8mem, disk 40 • こんなに大量のリソースのご提供はさくらインターネット様からの リソースで動いている。ありがとうございます🙇‍♀ 8

Slide 9

Slide 9 text

ICTSCにおいての運用リポジトリ 9

Slide 10

Slide 10 text

ICTSCにおいてのmanifestリポジトリ 10

Slide 11

Slide 11 text

ICTSCにおいての運用リポジトリ 11

Slide 12

Slide 12 text

ICTSCにおいての運用リポジトリ 12

Slide 13

Slide 13 text

ICTSCにおいての運用リポジトリ 13

Slide 14

Slide 14 text

ICTSCにおいての運用リポジトリ 14

Slide 15

Slide 15 text

ICTSCにおいての運用リポジトリ 15

Slide 16

Slide 16 text

ICTSCにおいての運用リポジトリ 😇 16

Slide 17

Slide 17 text

ICTSCにおいての運用リポジトリ なんとかワイワイ検証をしつつ、 SREぽい裏方さんをやっています🙇‍♀🙇‍♀🙇‍♀ 17

Slide 18

Slide 18 text

プロビジョニング編 https://unsplash.com/photos/ur7BDi9MpXg 18

Slide 19

Slide 19 text

k8sクラスタの論理構成 19 再掲

Slide 20

Slide 20 text

プロビジョニング: VMを作る • さくらのクラウドにVMを作る -> terraform 20 • sakura cloudの tfproviderを 使ってVMをプロビジョニング • S3のバックエンドを導入して tfstateをリモートに置いた (自分たちでminioを立てた)

Slide 21

Slide 21 text

プロビジョニング: VMに流し込み • kubeletなどをインストール -> ansibleで流し込み 21 • dynamic inventryをやって pythonからminioにある tfstateをfetchし、そこに ある接続情報をまとめて ansibleが接続しにいく • 同時に管理用userなどを作る

Slide 22

Slide 22 text

プロビジョニング: kubeapi serverのLB構築 • haproxyを構築 22 • haproxyを構築することで 複数のmaster nodeを置くこと が可能になる • ←実際のコンフィグ例

Slide 23

Slide 23 text

プロビジョニング: k8sの構築 • kubeadmを利用して構築 23 • ←こんな感じのコンフィグを 用意しておいて sudo kubeadm init --config=kubeadm-config.yaml をする感じ

Slide 24

Slide 24 text

ネットワーク編 https://unsplash.com/photos/ur7BDi9MpXg 24

Slide 25

Slide 25 text

k8sクラスタの論理構成 25 再掲

Slide 26

Slide 26 text

ネットワーク: アプリを外部に公開する • 外部にアプリケーションを公開 -> MetalLB 26 • ベアメタル環境で使用できる KubernetesのExternal Load Balancerの実装 • L2 モード:リーダーノードを選出 =>負荷に偏り BGPモード:外部ルーターが ECMPでロードバランス • 複数アドレスプール: 使用したいアドレス帯をService で指定可能 metallb-config.yaml ingress-service.yaml

Slide 27

Slide 27 text

ネットワーク: Ingress • Ingress Controller -> Nginx Ingress Controller 27 • SSLの終端 • サービス転送 • nginxなのでhostpathとして 利用やサーバーサイドの やりとりに対する処理など • 複数台にスケールするので L7 LBとしての意味も持つ

Slide 28

Slide 28 text

ストレージ編 https://unsplash.com/photos/ur7BDi9MpXg 28

Slide 29

Slide 29 text

k8sクラスタの論理構成 29 再掲

Slide 30

Slide 30 text

ceph+rookについて rookというツールでceph を構築をして分散ストレージ を導入してる 我々の環境だと filestoreで per nodeごとに おいて運用している (bluestoreだとメモリをすごく 必要にするなどの理由から このようにしている) 30

Slide 31

Slide 31 text

cephについてのdashboard 31

Slide 32

Slide 32 text

監視編 https://unsplash.com/photos/ur7BDi9MpXg 32

Slide 33

Slide 33 text

k8sクラスタの論理構成 33 再掲

Slide 34

Slide 34 text

監視基盤の構成 34 今年度利用しているものたち ● Zabbix (新規) ○ Router,IPMIのデータ取得 ● Grafana ○ Zabbix, prometheusの可視化 ● prometheus ● AlertManager ○ prometheusのalert ● elastiflow (k8sでは新規) ○ sflow ● ELK ○ syslog...etc.. 本戦10日前から監視基盤を頑張って一人で建てました. これから先のスライドは10日間頑張ったものを見てください! by umeda

Slide 35

Slide 35 text

Zabbix ZabbixでJuniper MX5のsnmpを取得し Grafanaで可視化しています。 本日15:30ごろまでのトラフィックグラフです。 35

Slide 36

Slide 36 text

問題VMの監視 36 問題VMの監視を行いました。 展開の際に正常にVMが立ち上がったかのチェックを行えました。

Slide 37

Slide 37 text

Ceph Dashboard 37 Cephよくわからん!!!

Slide 38

Slide 38 text

ElastiFlow 38 きれいだな~

Slide 39

Slide 39 text

1day 午前3時prometheusが死んでた! msg="append failed" err="write to WAL: log samples: write /etc/prometheus-data/wal/00001007: disk quota exceeded" 39 umedaは寝ていたので、えるとさんがトラコンしてくださいました。:pray: まさか、10日で20GB食うとは知らないじゃん..! ストレージの永続化した人←umeda prometheusが死んでもalertは飛ばない!!

Slide 40

Slide 40 text

監視は以上です。 ありがとうございました。 by umeda 40

Slide 41

Slide 41 text

アプリケーション編 https://unsplash.com/photos/ur7BDi9MpXg 41

Slide 42

Slide 42 text

k8sクラスタの論理構成 42 再掲

Slide 43

Slide 43 text

ArgoCD 43

Slide 44

Slide 44 text

ArgoCD 44

Slide 45

Slide 45 text

ArgoCDの全体の構成 45

Slide 46

Slide 46 text

pomerium 46 ○ Pomerium: アプリの前段 にプロキシとして存在して外 部のIDプロバイダーを用いて ユーザを識別する ○ githubなどのorgをictsc は使っている ○ https://wiki.icttoracon.net/ictsc2020/infra/cluste r/Pomerium#Pomerium%E3%81%AB%E3%8 1%A4%E3%81%84%E3%81%A6

Slide 47

Slide 47 text

pomerium: ビフォー 47

Slide 48

Slide 48 text

pomerium: アフター 48

Slide 49

Slide 49 text

まとめと見所(盛り沢山) 1. 複数台のクラスターを用意してカナリア を入れてより本番を壊さないようになった 2. 以前はワンオペSPOF野郎(@takemioIO)だったがインフラチーム としてちゃんとわかる人が増えた 3. スコアサーバーや監視等にはargoCDが生えてアプリケーションの デプロイにアプリケーションエンジニアがkubectl applyをしなくて も生きていけるようになった 4. 監視などの接続性についてはgithubのOrgを通じて認証することで より安全に使えるようになり、最高の監視です最高! 5. k8sでもrook+cephを導入してDisaster対策済み 6. MetalLB, nginx ingressを合わせてマルチティアLBに、vyosを入れること でBGPモードでなおかつVPNなども合わせたネットワーク を使えるようになった 49