i Cubed Systems Engineering blog

株式会社アイキューブドシステムズの製品開発メンバーが、日頃のCLOMO開発の様子などを紹介します。

ゼロからKubernetesを勉強する

前振り

こんにちは。アイキューブドシステムズ、製品開発本部 プラットフォーム運用部所属のラファエル(GitHub)です。 前にもインフラ系の仕事をしていましたが、入社前はKubernetesに未経験でした。入社してからそろそろ9ヶ月を経ちました。

このタイミングで、私が香港出身者として、日本の会社で、Kubernetesをゼロから勉強する経験談をシェアしたいと思っております。

Kubernetesの勉強をスムーズにする前提条件

日本語を話せること

日本で働くということで、もちろん日本語を話せないといけません。(笑)チーム内のコミュニケーションはもちろん、システム自体が日本語で作られたことが多いですね。社内の公式言語を英語にされている会社もありますが、やはり日本語を話せないと色々不便ですね。

コマンドライン作業の経験

こちらがほぼ必須です。 クラウドサービスは大体GUIを提供されていますが、細かい調整はやはりコマンドでやるしかないです。CUIを慣れていないと作業の効率がなかなか上がらないと思います。

DockerとDocker Composeの知識

今の時代で、サービスのコンテナ化がインフラ界隈の追い風ですね。そしてKubernetesもDockerのイメージを使っています。Dockerの概念や使い方をある程度わからなければKubernetesを始められないと思います。もちろん、アイキューブドシステムズにもDockerを運用しています

yaml & jsonフォーマットの知識

Kubernetesのマニフェスト(設定ファイル)はyamlのフォーマットで書きます。正しくyamlを書けなかったら、Kubernetesの設定はできません。そしてjsonは、クラウド(弊社の場合はAzure)にとても役に立ちますね。サーバの情報などをjsonフォーマットに出力すれば、欲しい部分は簡単に切り取れます。

これでさらにスクリプトで自動化する時に便利ですね。

勉強の媒体の言語を選ぶ(日本語、英語、中国語)

まず結果から言うと、この3つの言語を全部並行して勉強しました。

日本語 - チーム内のコミュニケーション用

最初は日本語で勉強しようと思っていました。チーム内で主に日本語ですね。その時に、私が感じたのが、「カタカナに翻訳された専門用語が理解できません!」。これはKubernetesだけではなく、IT全般ですね。

英語 - ファーストハンドの情報を手に入れる

じゃ英語で勉強すればいいですね。学生時代も全部英語で勉強したので、頭の中のIT知識は全部英語ですね。(そう、中国語ではありません。)

そして、ITの技術は大体最初に英語で作られています。ドキュメントを読む時に、問題の解決策を探す時にも、英語のリソースが圧倒的多いですね。そして翻訳による意味のズレもないのです。

もう一つ、コマンド自体が、簡単化した英語です。コマンドの一つ一つの意味を理解するに、英語の語彙力が確実に役に立ちます。慣れていたら、作業の効率上げも繋がります。

中国語(母語) - 難しい概念を理解するために

結局、自分の母語にしてみました。台湾のECサイトから取り寄せて、注文して1週間で日本に届きました。やはり難しい概念には、一番理解している言語で勉強することが一番効率がいいですね。これによってKubernetesの勉強を進めました。

知識面の勉強

コマンドの意味を覚える

Kubernetesの場合は、コマンドの構成はこのようです: kubectl <動詞> <リソースの種類> <リソース名> <他の引数> 特に動詞の部分は、自分がしたいことをコマンドに変換する時に、英語の動詞を使わないといけません。 例えばkubectl describeと言うコマンド、これはスペルまで難しいですね。

頭の中にやりたいことと、コマンドの連想を慣れていけば、作業の効率も上がります。

Kubernetesの概念を理解する

こちらは、kubernetesの理念、メリット、動き方、構造全般の知識ですね。そしてマニフェスト(設定)を変える方法も勉強します。いきなり一から作るのが難しいすぎると思います。

これの勉強する方法は人さまざまですが、私は本を読むことにしました。説明する画像もあるのでわかりやすいです。そしてわからないところがあれば先輩たちに教えてもらいました。

社内研修

アイキューブドシステムズに入社して、すぐプラットフォームの研修課題をもらいました。やはり実際にやってみるのが一番ですね。これによって、これから一歩一歩kubernetesのスキルを身につけるまで、必要な知識を新たに習得することもできますし、すでに知っている知識を復習できます。

Ruby on Rails Tutorial

弊社の製品はRuby on Railsで作成することが多いです。

プラットフォームならプログラミングはしないと思う人もいますが、これは違うと思います。開発されたアプリの不具合調査をするため時や、デプロイがうまく行かない時の対応など、少なくとも社内で使っているプログラミング言語のソースコードを読めるようにしたいです。

研修の一環として、公式のRuby on Rails Tutorialに従って、Ruby on Railsのアプリを作りました。

Azure環境でVM作成、及びRuby Tutorialで作ったアプリをAzureにデプロイする

アプリを作成するだけではなく、どうやって開発環境から本番環境に正しくリリースされることがとても重要です。この課題だと実際の環境も触られて、デプロイの手順も確認できます。

さらに、アプリをKubernetes環境に乗せる

ここまできたら、ようやく最初のkubernetes環境を構築できます。もちろんいきなり本番環境を触ることはできませんが、自分で構築するテスト用環境なら色々試せますね。そしてDockerfileや、docker-composeの設定ファイルや、kubernetesのマニフェストもゼロから書いてみますね。手探りで間違いから学習するステップですね。

実践

私はいつも思っています、どんなシステムやプログラミング言語でも、初心者にとって実際触れて動いてる見本がとても重要です。動かせてみないと学んだ知識はただ意味のない概念に過ぎないし、その知識を勉強するメリットを感じることもできないと思います。

トラブルシュート

なので、最初にやってみたのが、既存システムのトラブルシュートです。トラブルシュートなら、システムの隅々を調べることができるし、システムを変更する必要も少なくて事故率も下がるし、そして何よりプラットフォームエンジニアの一番重要な役割である障害対応の経験を得られます。先輩たちにガイドを受けて開発環境でトラブルシュートすることが一番理想的だと思います。

無闇にApplyすると大惨事になる可能性

トラブルシュートの経験があったら、Kubernetesの設定を変更する作業に進みましょう。オプションとその値の意味をきっちり調べて、理解するようにしましょう。また、kubernetesの機能面だけでなく、マニフェストの文法にも注意しましょう。大手IT企業に障害を起こした時に原因がたった一つの符号をミスったこともありますね。ここに慎重にして、できれば変更点をレビューしてもらいましょう。

初心者がいきなり本番環境で作業するのはおすすめできません。やるとしたら慎重に、そして相談しながらやりましょう。少し違和感や不確定を感じたらとりあえずチーム内に相談しましょう。特に何かを消す時に何度も確認しましょう。「エンジニアは臆病でいよう」は私の信条です。(笑)

最後に

誰でもいきなり上達になるわけがないです。CLOMOをKubernetes化もまだ2年未満らしいです。地道に経験を積んで、相談できる相手がいることがとても重要だと思います。そして実践できるチャンスがなければなかなか成長できないと思います。私がラッキーの方で、正しい方向の研修もあって、相談できる先輩もいて、色々作業するチャンスもありました。今はまだkubernetesで出会えて半年しかないですが、最近ようやく社内のシステムに慣れました。急にレベルアップした感じです。チーム内のみんなに感謝の気持ちもあって、今度は私の番です!私の経験談を誰かに役に立ちたくてこの文章が生まれました。拙筆ですが読んでいただいてありがとうございました。