Share
Embed
Transcript
40 slides
-
具体例: TopoLVM ▌Kubernetes上で LVM を活⽤するストレージドライバ l 元々、需要があった l 徐々に社外ユーザが増加 l
Bug報告・修正に伴うさらなる品質強化 l 外部からのパッチで機能強化も l 外部からのノウハウの蓄積 10 -
OSSのメンテナンス ▌毎⽇OSSの状況をチェック l GitHubのrelease page などリリース情報が配信されるものをsubscribe l TwitterでSecurity関係のアカウントをフォローしておき、随時対応 ▌アップデート契機 l
セキュリティ的に必要であれば、即時対応 l 3ヶ⽉に1回の定期更新でOSSを最新に保つ ▌改修を容易に l イメージの⾃前ビルド(パッチをすぐに利⽤できる様に) 12 -
テストシナリオ ▌結合試験の⾃動化をするにあたってはテストのシナリオが重要 ▌オンプレミスで運⽤する場合、下記の両⽅が必要になる。 l インフラ部分の試験 l KubernetesやKubernetes⾃体の運⽤ツールを対象 l アプリケーション部分の試験 l
Kubernetes上のミドルウェア, アプリケーションを対象 15 -
インフラ部分の試験 ▌インフラ部分の試験は、⾃作ツールを使って、仮想データセンタを構築 ▌仮想データセンタ上で、下記試験を実施 l 標準試験 l 機能試験 l 再起動試験 l
障害試験 l (前のバージョンからの)アップグレード試験 ▌GitHubでmerge前にCIで上の試験を全て実⾏ ▌毎⽇で夜間にCI試験 16 -
アプリケーション部分の試験 ▌前のスライドのテスト済みのインフラの上で、アプリが動くかも確認 l 機能試験 l アップグレード試験 l Kubernetesのアップデート試験 ▌GitHubでmerge前にCIで機能試験・アップグレード試験を全て実⾏ l
Kubernetesのアップデート試験はKubernetes更新時のみ ▌毎⽇で夜間にCI試験 17 -
検出した不具合の例 20 ▌検出した不具合の例 l etcdの先頭のメンバーがクラッシュしたときに、etcdに接続できなくなる問題 l サーバー再起動後にCNIプラグインのアップグレードをすると、アドレスプールが解放 されてしまう問題 l Argo
CDのアップグレードによりアプリケーションの適⽤順序が変わり、デプロイに失 敗する問題 ➡ これにより多数のOSSのアップデートを安⼼して⾏える -
原則アップストリームへの修正 ▌業務上問題になる様な場合は、アップストリームへの修正Issue/PRを⽴ててチーム のタスクとして管理する l アップストリームとのGitHub/Slack上での議論も積極的に⾏う ▌業務上問題にならないものでも、気づいたバグに関しては、積極的にIssue/PRを作 成し、アップストリームに貢献する l Necoチームの実績値 (⾃社リポジトリを除く)
l 2019年 Issue: 22件, PR:38件 l 2020年 Issue: 38件, PR:57件 23 -
アップストリームのバージョンアップに追従 ▌アップストリームのバージョンアップに追従する場合、下記のようにバージョンアップを重 ねることで、独⾃パッチが肥⼤化し、コストが増加する 1. アップストリーム vNに対して独⾃パッチを作成 2. アップストリーム vN+1に対応して、vNとvN+1の差分に対応するように独⾃パッチを修正 3.
アップストリーム vN+2に対応して、vN+1とvN+2の差分に対応するように独⾃パッチを修正 25 アップストリーム vN アップストリーム vN+1 アップストリーム vN+2 独⾃パッチ 独⾃パッチ 独⾃パッチ -
アップストリームのバージョンアップをバックポート ▌アップストリームのバージョンアップをバックポートする場合も、下記のようにバージョン アップを重ねることで、独⾃パッチが肥⼤化する 1. アップストリーム vNに対して独⾃パッチを作成 2. アップストリーム vN+1に対して、vNとvN+1の差分に対応するように独⾃パッチを修正してバックポート 3.
アップストリーム vN+2に対応して、vNとvN+2の差分に対応するように独⾃パッチを修正してバックポート 26 アップストリーム vN アップストリーム vN+1 アップストリーム vN+2 独⾃パッチ vN+1 独⾃パッチ アップストリーム vN 独⾃パッチ vN+1 独⾃パッチ vN+2 -
独⾃版の⼀時運⽤ ▌アップストリームでの取り込みに時間がかかる場合は次善策として、独⾃版を⼀時運⽤ l Rookの例︓ l KubernetesのPodの分散配置機能であるTopologySpreadConstraintを使⽤したかった l アップストリームRookでは Kubernetes v1.18が出るまで対応しない⽅針
l PRを準備しつつ、 Kubernetes v1.17では独⾃パッチを使⽤ l Kubernetes v1.18リリース後に無事マージされ、独⾃パッチ不要に https://github.com/rook/rook/issues/4387 27 -
重要なOSSに関して ▌お客様のデータを扱うストレージソフトウェア Rook&Ceph が特に重要 ▌ほぼ専任のOSS活動エンジニアがいる ▌事例:Rook l サイボウズの最新開発版への貢献数は世界⼆位 l 貢献が認められてサイボウズのメンバがレビューアに
l レビューア: 変更が適切だと承認できる権利を持つ l メンテナ: 変更を取り込む権限を持つ 29 -
コミュニティ全体にプラスになるケースの例 ▌Argo CD の windows binary提供 l Argo CDとは︓ l
CNCF管理下のCIツール l Git repositoryを監視して、変更があった場合は、変更をデプロイ l リッチなWeb UI l 問題︓ l Argo CDをCLIから操作するbinaryがwindowsには提供されていない l サイボウズでは Windowsの Argo CD CLIが必要だったためPRを作成 l サイボウズがサポートすることで、 Windowsの Argo CD CLIがアップストリームから 提供される様になった。 https://github.com/argoproj/argo-cd/pull/3015 32 -
対外発表をコントリビューション先と共同で⾏うことの例 ▌AWSの⽅と⼀緒に現在、KubeCon NA 2020にProposal提出中 ▌経緯︓ l RookというOSSではLVを扱えなかった l サイボウズではLVを使⽤してRookを使⽤したい l
LV対応⽤のPR/Issue作成を⾏なっていた l 同じ様なことをやっている⼈から 共同セッションの勧誘 33 -
再現⼿順の作成などを⾏うことで、⼯数が嵩む ▌kube-proxyによるipvs更新バグ l kube-proxyとは︓ l Kubernetesを構成するコンポーネントの⼀部 l ipvsモードの場合、nodeのipvsの操作も⾏う l 問題︓
l コンテナがUnhealthyになったとき、kube-proxyがipvsを変更し、Gracefulにルー ティングを停⽌ l Gracefulにルーティング停⽌中に kube-proxyが停⽌し、 コンテナがHealthyに復 帰した場合、 kube-proxyが起動後、コンテナにルーティングがされないままになる l 再現状況がかなり特殊なため、再現⼿順の作成に時間がかかった 35 https://github.com/kubernetes/kubernetes/issues/92019 -
業務内で使⽤していないツールを使う ▌Rook の multi-cluster⽤ manifest⽣成 l Rookとは︓ l Storage ソフトウェアのCeph⽤のOperator
l Ceph クラスターを複数⾃動管理してくれる l 問題︓ l Rookはmulti-cluster⽤のmanifestを⽤意しておらず、複数クラスタを運⽤する際には バージョンアップごとにmanifestの⼤幅な修正が必要 l アップストリームはmanifest管理ツールのHelmを使⽤して対応したい l サイボウズではHelmを使⽤していないが、multi-cluster⽤のmanifestを簡単に⽣成でき る様にHelmの仕様を把握しながらPR作成 36 https://github.com/rook/rook/pull/5573 -
OSSのライセンス ▌OSS推進室 l OSSライセンスの審査を⼀元管理 l GitHub Orgの審査を担当 l OSSへの寄付対象も決定 l
CNCFの silver member に加盟費⽤なども拠出 38