おうちでDynamic Provisioning! kubernetes-incubator/external-storage iSCSIクライアントを試してみる

こんにちは。 whywrite.it Kubernetes班のwhywaitaです。

皆さんも一家に一クラスタはKubernetes のクラスタがあると思いますが、永続化ストレージ (Persistent Volume)はいかがでしょうか。
近年はCSIという様々なストレージを同じように扱えるインターフェースが定義されているため、様々なベンダーがCSIに対応したストレージ製品やCSIに対応させるゲートウェイアプリケーションを公開していたりします。

ここにKubernetesコミュニティが認識しているCSI Driverの一覧が載っているのですが、見事にクラウド上のブロックストレージサービスのDriverが沢山ありますね。オンプレミス向けだと高価なハードウェアアプライアンス製品がちらほら。
自宅はクラウドではないので(?)、オープンソースで動作するiSCSIなどで解決したいのですが、CSIには実装がなく1、CSI以前から存在しているiSCSIを用いる実装はKubernetesにおけるPersistent Volume Claimを用いて動的にボリュームが作れない状況にありました2

そこでkubernetes-incubator/external-storageを用いて、iSCSIかつ動的にボリュームを確保する実装を動作させてみるのが本記事の内容です。

[ ※ 2021/07/31 追記 ]
執筆から1年以上経過し状況が変わっているため追記しておきます。

kubernetes-incubator Organization 配下にあったexternal-storageは現在 kubernetes-retired Organization にtransferされており、リポジトリ自体もRead-onlyとなっています。
Kubernetes v1.20以降では互換性が無くなってしまい動作しなくなりました。
有志がforkしたリポジトリでKubernetes v1.20以降でも動作するよう修正しているようなので、今から試す方はこちらをご利用ください。

[ 追記ここまで ]

(さらに…)

「Kubernetesの良さを活かして開発・運用!」というタイトルでOSC 2019 Tokyo/Fall に登壇します #osc19tk

こんにちは。whywrite.it 発表班のwhywaitaです。

2日目(日曜日) 12:00〜の枠で発表させていただくことになりました。
当日は皆さまよろしくお願いします。

(さらに…)

Pull ReqベースのモダンKubernetes開発環境についての本のBooth販売が始まっています #技術書典

こんにちは、whywrite.it 執筆班のwhywaitaです。

技術書典7にて頒布していた「PR-based Preview Env in Kubernetes」のBooth販売が開始しています。


以下概要を引用します。

本書では、KustomizeとTerraformを組み合わせてKubernetesクラスタやVPCなどを用いるプレビュー環境を、Pull Requestを起点として自動的に生成する仕組みをご紹介します。
Pull Requestの情報を用いて、Terraformがプレビュー環境を構築し、KustomizeでKubernetesのmanifestを生成してプレビュー環境にデプロイするため、開発者はクリーンな環境ですぐに動作確認できます。手軽にプレビュー環境を構築して、より高速にCI/CDを回していきましょう!

物理本に引き続き電子版の頒布も「てっき〜メディア」さんのご協力で実現しました。本当にありがとうございます。
てっき〜メディアさんのBoothでは同じく技術書典で頒布した「はじめるCluster API」「日本語版GitLab CIリファレンス」も同時頒布中ですのでこちらもよろしくお願いします。

在庫の物理本も私の手元に若干数、てっき〜メディアさんの手元に比較的余裕ある数がありますので、もしどうしても物理本が欲しいという方がいればご連絡ください。

技術書典7にてPull ReqベースのモダンKubernetes開発環境についての本を出します #技術書典

こんにちは。whywrite.it 出版班のwhywaitaです。

09/22 に開催される技術書典7にてKubernetesを用いたモダン開発環境についての本を出します。
頒布場所は「お13C てっき〜メディア」さん、表紙はへびつかいさんにご提供いただきました。

前半部分を私(@whywaita)が、後半部分を新卒同期の@msy_mtd_a5が担当しています。

サークル詳細 | てっき〜メディア | 技術書典

(さらに…)

色んなところでKubernetesを動かす本 のBooth販売が開始しています #技術書典

こんにちは。書籍出版班のwhywaitaです。技術書典5 にサークル側として参加してきました。

tl;dr

Boothにて電子版を500円で販売しております。是非お買い求めください!

また、一部環境においてzipパスワードが解除出来ないなどの不具合が初期バージョンにあり、現在は解決しています。
表紙の解像度が低い状態で表示されてしまう現象も観測されており(解決済み)、お手数ですが再ダウンロードして頂けると幸いです。

(さらに…)

#技術書典 5にてKubernetesについての本を出します

こんにちは。書籍発行班のwhywaitaです。

2018/10/08に開催される技術書典 5にて、調布技研名義でKubernetesの本を出すことになったので宣伝です。

頒布場所は「か16」です。
上記ページからサークルチェックが出来るらしいので、是非どうぞ。

開催情報

  • 日時 2018/10/08 (月) 11:00〜17:00
  • 場所 池袋サンシャインシティ2F 展示ホールD(文化会館ビル2F)
  • 主催 TechBooster/達人出版会

頒布情報

「Kubernetesを色んなところで動かす本」という本を出します。
最近イケてるKubernetesなんですが、マネージドなKubernetesしか使ったことがない!という方が意外と多いのではないかなと思います。
そのような方に向けて文字通り「色んなところで」動かしてみる本となっています。

  • おうちKubernetesの作り方 by @nasa9084
  • 海外の激安VPSを知っていますか? by @whywaita

頒布数などはまだ未確定ですが、在庫は異常に用意する予定ですのであまりお急ぎにならなくても購入可能な予定です。
また、PDF版の頒布も併せて行う予定ですので、ゆっくりブースまでご来場ください。

では、当日ブースでお待ちしております!

kubernetesに自分のコードがマージされるまでのフロー

はじめに

こんにちは。kubernetes班のwhywaitaです。皆さんkubernetesやっていますか?

kubernetes を使う場合、アプリケーションをデプロイする際にミドルウェアの管理に悩むことがあり、その解決策として様々なアプリケーションが開発されています。1

その中でも私はHelmがお気に入りです。
自分のアプリケーションを含めた全てのデプロイをHelmで賄うのには向いていないように感じますが、アプリケーションで必要なミドルウェア(DB、KVSなど)を立ち上げる用途としてはかなり優秀なプロダクトだと思います。

そのHelmでインストールすることの出来るミドルウェアの単位をchartと呼びます。chartが集まったものをリポジトリと呼び、 stable リポジトリと incubator リポジトリはGitHub上で公開されています。

GitHub上で公開されているので、もし何らかの修正を行いたい場合はPull Requestを送る事が出来るのですが、一般的に使われているフローではなく、一定のルールを満たす必要があります。
あまり日本語情報が無いように思ったので、今回は実際にkubernetes OrganizationであるHelmにPull Requestを送り、無事マージされるまでのフローを書きます。

バージョン

Pull Requestであるためそれほどアプリケーションのバージョンは依存しませんが、念のため作業環境のバージョン書いておきます。

  • kubernetes: v1.10.3
  • kubectl: v1.10.4
  • helm client: v2.8.2
  • helm server: v2.8.2

Pull Requestフロー

まずは、kubernetesが定めるContributor License Agreements、略してCLAの提出が必要となります。
これはkubernetesにコントリビュートする際に満たすべき制約に、コントリビュートした全員が承諾する事を担保するものです。

kubernetesはCloud Native Computing Foundation(CNCFと呼ばれます)に入っているプロジェクトの1つであり、CNCFはLinux Foundationに入っているプロジェクトの1つです。
このような関係を持つため、kubernetesのCLAは現状Linux Foundationのシステムを用いて、CNCFのCLAを提出すれば認可されます。

Linux Foundationアカウント発行

Linux FoundationのCLAには個人向けと企業向けの2種類が存在しています。私は個人としてCLAの提出を行ったため、今回は個人向けの作業をお伝えします。

下記のURLから、Linux Foundationのアカウントを発行します。
https://identity.linuxfoundation.org

ソーシャル連携でアカウントを作成しても良いですし、Linux Foundationのアカウントを新規に作っても構いません。
最終的にLinux FoundationのアカウントとGitHubのアカウントを紐付ける必要があるため、GitHub連携でログインしておけば若干手間が減るかもしれません。
私はLinux Foundationのアカウントを作り、その後GitHub連携を行いました。勿論この方法でも問題無くCLAの提出は可能です。

アカウント作成中にFirst nameとLast nameを入力する欄がありますが、基本的には公開されず、usernameで書いた部分のみ公開されます。

また、この時設定するメールアドレスにはGitHubのコミット上で用いているメールアドレスと同じものを利用するようにしてください。コミットとの紐付けに利用しているようです。
現在利用しているメールアドレスは以下のコマンドで確かめられます。

$ git config user.email
whywaita@whywrite.it  # 私の場合

最後に、GitHub連携以外の方法でアカウントを作成した場合は、こちらからGitHub連携を追加しておいてください。

CLAを提出し、CNCFグループに入る

以下のURLから、自分のLinux FoundationアカウントをCNCFグループに参加させることができます。

https://identity.linuxfoundation.org/projects/cncf

アカウント作成、およびGitHub連携が既に済んでいる場合、以下のような画面が出ます。

名前とメールアドレスが間違っていなければ、そのままSubmitを押します。
すると、登録しているメールアドレスにHelloSignというサービスからメールが届きます。

HelloSignは電子署名システムの1つで、実際に紙を印刷してサインをせずともWebブラウザのみで電子署名が行えるシステムです。
Review & Signのリンクからページに飛ぶと、CLAで承諾すべき項目が実際に表示され、問題無ければ項目を埋めて提出します。

CLAの文章自体はこちらに公開されています。
HelloSignのサービスを利用したくなかったり、紙を用いた証拠が欲しい場合は、PDFをスキャンして info@cncf.io に送信したり、Linux Foundationのオフィスに国際郵便で送付することも可能です。CLAの文書にどのような手法を用いられるのか記載されているので、CLAを提出する際にご確認ください。2

HelloSign上でCLAを提出した場合、提出に成功したことがメールで通知され、HelloSign上のシステムでも提出が完了したことを確認できます。
私が提出した時は、数分程度で提出完了のメールが届きました。

これにてCLAの提出は完了です。

Pull Requestの作成

これでようやくコードを書くことができます。
ここからは実際に私が出し、マージされたPull Requestを例としながら説明していきます。

Pull Requestの作り方(Forkして、ブランチを切って、など)は一般的なフローと同じですので割愛させて頂きます。

実際にPull Requestを出すと、k8s-ci-robotというユーザが自動的にラベル付けなどを行ってくれます。
このユーザはkubernetesチームが用意した自動化用のbotシステムであり、そのPull Requestの状況等を管理してくれます。

3

CLAの提出が正しく出来ていれば、この段階でこのようなメッセージが来ます。

レビューしてもらう

Pull Requestが自分の中でレビューして貰って問題無い状態になったら、レビューアーをアサインしてレビューしてもらいます。

レビューアーに指定するべき人がランダムで提案されますが、基本的には担当者全員アサインして良いようです。
この時のアサイン対象者ですが、誰でも良いという訳ではなく、chart毎に指定するべき人が決まっています。例えば私が今回出したdatadogであれば、以下のURLにあるOWNERSファイルに書かれています。

https://github.com/kubernetes/charts/blob/master/stable/datadog/OWNERS

GitHubのシステム上、ブラウザ上からアサインすることも技術的には可能なのですが、アサインの状態を可視化するためにk8s-ci-robotにアサインしてもらう運用になっているようです。
/assign コマンドを実行します。実際のコメントはこちらです。

その後はレビューアーの指示に従い、修正や議論を行います。4

実際にマージする実行をするのはk8s-ci-robotですが、レビューアーに lgtm ラベルと approve ラベルを付けてもらう必要があります。
その時々でラベルの付ける順番などは変わるようなので、適宜レビューアーに聞いてみると良いかもしれません。
私も聞いた結果ラベルが付与されました

最終的に問題がないと判断されれば、k8s-ci-robotによってマージされます!

おわりに

このフローを踏むことで、無事kubernetesグループに貢献することが出来ました。
OSSを使うだけでなく、OSSに貢献することで、OSSの素晴らしいライフサイクルを回せていければと思います。

また、本記事公開以降コントリビュート手順が変更される可能性があります。
もし不明な点があった場合は、原文であるこちらを参照してください。

HERP広告

この記事は株式会社HERPの勤務中に書かれた物である。
株式会社HERPでは今後もOSSに貢献し続けます。

株式会社HERPは様々な職種での人材を募集しています。

また、この広告箇所は本の虫のオマージュです。


  1. Kubernetes YAMLの壁 | SOTA 
  2. ちなみに私が提出した際のCLAはこのコミットです。 
  3. robotは既に終了した自分のコメントに関しては消してしまうので、私のメーラーに来ていた通知メールのスクリーンショットです 
  4. ここが一番難しいかもしれませんね…