PR

今からでも遅くない! Kubernetesを最速で学ぶための学習法とは

2021年2月12日(金)
千村 健太朗深見 圭介加藤 修三

はじめに

本連載は、Kubernetesに入門しあぐねているエンジニア、特にアプリケーション開発者の方向けにKubernetesへの入門の仕方と最低限動かすための知識を実践形式で紹介するものです。

Kubernetesについて全く触ったことがないという方から、何となく知っているけど実務で応用できない、実務で使っているけど実のところよく分かっていない……という方を対象に、Kubernetesの全体像の知識と手順をステップアップして学べるように構成しています。

今回の第1回は、本連載をより効果的に活用していただくために、Kubernetesに入門する意義と効率的な学習法を取り上げます。

Kubernetesに入門する意義

さて、現在、DockerやKubernetesに代表されるコンテナ技術は、随分と広く利用されるようになってきました。開発環境のみならずプロダクション環境でも多く採用されるなど、もはや一部の先進的なエンジニアが触るものではなくなっています。

コンテナを運用するためのデファクトスタンダードとなっているKubernetesは、オートスケールやローリングアップデートをはじめとする優れた自動化の仕組みから、特にWebサービスで大いに活用されています。コンテナ単位でスケールアウトできるため、マイクロサービスアーキテクチャとの相性も非常に良いです。それ以外にも、現在は様々なユースケースで使用されています。

  • べき等な共通基盤を構築、拡張できることからエンタープライズのアプリケーションに
  • 複数サーバをクラスタ化して稼働できることから大規模な機械学習等の計算用途に
  • エッジノードへのアプリケーション展開のしやすさからIoT用途に

多くのアプリケーションがKubernetes上で動くようになってきている一方で、Kubernetesを活用するための学習コストが高いことがよく指摘されています。Kubernetesは非常に自由度が高く、クラウドプロバイダが提供するサービスに劣らない基盤を提供できるほど高機能ですが、その分構成要素も多く、心理的障壁を感じている方も多いようです。特にアプリケーション開発に集中したい開発者にとっては、これまでインフラエンジニアが担当していた領域を学習しなくてはならないことで、あまり気乗りするものではないかも知れません。

とは言え、アプリケーションのパッケージングツールとしてのコンテナは、開発者にとって非常に大きなメリットがあります。実行環境の構築に時間を割いたり、開発環境と本番環境の差異に悩まされることもなくなります。Kubernetesのようなコンテナオーケストレータを理解し活用することでCPUやメモリ、ディスクなどの基盤からコンテナ間通信の構成まで、アプリケーションの設計通りに稼働することを保証できます。引き渡し用の手順書にデプロイ構成を書く必要がないわけです。

そう考えると、どうせ環境構築やトラブルシュートに時間を使うのであれば、むしろKubernetesの学習に少しでも時間を使っても良いのでは、と思えませんか。幸い2021年のいま、Kubernetesには数多くのドキュメントや書籍等の情報が充実してきていますし、トレーニングやハンズオンを提供する組織も多くあり、Kubernetesを学習するコストは大きく下がっています。

逆に、このことは学習法の選択肢が多すぎて困るという状況も生み出しています。書籍を読破するには少し重かったり、逆にインターネット上の記事では少し軽すぎたり、公式ドキュメントを読むにもどこからどう読めば良いものやらと、効率良く学習を進めるために当たりを付けるのも大変です。

では、Kubernetesを最速で学ぶためには、どうすれば良いのでしょうか。

Kubernetesの効率的な学習法

いきなりですが、本連載では下記のステップでの学習を推奨します。

  1. 全体の粗い学習
    1、2冊程度の入門書籍の流し読み、事業者によるトレーニングの受講、Web上の入門記事・チュートリアルの実施(本連載など)
  2. テスト
    早い段階での実際のアプリケーションへの適用、あるいは資格試験の受験
  3. 詳細の再学習
    アプリケーションへの適用、資格試験の受験で発覚した不十分な知識の再学習(書籍または公式ドキュメントなど)
  4. 2、3をサイクルして学習

次回からは、アプリケーション開発者の立場で、コンテナを単にKubernetes上で動かすところから、複数コンテナの連携やCIなどアプリケーションを運用する上で最低限の構成を構築するまでの過程をステップアップしながら実践することで、Kubernetesを学べるように解説していきます。この内容は上記の学習段階のうち「全体の粗い学習」に当たりますが、本記事を参考に自身の実際のアプリケーションに応用することで、「テスト」の段階でも有効に活用できるものになっています。本連載に沿って学習することで、Kubernetesの世界を十分に歩き回れるようになれるものをお届けしたいと思います。ハンズオンとして実際に試すことができる内容にしていきますので、ぜひ実際に触ってみてください。

さて、以降では、この学習ステップについて少し踏み込んで説明していきます。

全体の粗い学習

学習に大きく寄与するのはテストと再学習ですが(後述)、何をするにも、まず最低限検索の材料となる程度の知識をインプットする必要があります。何も知らない状態でテストをしても「何が分からないか分からない」状態になってしまうでしょう。この前段階の学習方法は様々ですが、何よりも挫けないことが大切です。

Kubernetesの入門書籍

Kubernetesの入門書籍は概して網羅性が高く、確実な学習方法ではありますが、最初から最後まで読み解き、実際にハンズオンの内容を動かしてみるには、かなりの時間と根気が必要です。「最速」を目指すために、まずは粗くても構いませんので、以下のような流れで全体像を掴むことから始めてみましょう。

  1. 目次をすべて確認する
  2. 全体概要となりそうな章に絞って一気に読む
  3. 以降の章の冒頭とまとめだけを読む
  4. 全体を流し読み(ハンズオンは読むだけに留める、使わなそうな箇所は飛ばす)

事業者によるトレーニングコース

事業者のトレーニングコース*も網羅性が高く、また半ば時間的な拘束も生まれるため、少しでも早く学習するにはおすすめです。事業者によりますが、数日間でテストに取り組める状態になります。また、時間的な拘束のないオンデマンド形式のトレーニングもあります。

Webの記事やハンズオンの拾い読み

書籍やトレーニングに取り組むためのまとまった時間が取れない方は、Web記事をこまめに色々と読んでみるのも良いでしょう。1度にまとめて学ぶよりも日を空けて何回も学ぶほうが効果が高いこと(分散学習)や、全く同じ内容よりも少し異なる内容を反復して学ぶほうが効果が高い(インターリーブ)などの学習効果も知られていますが、これらの効果を利用しやすい学習法と言えます。テストにより知識を定着させることができれば、さらに有力な方法となるでしょう。Web記事は、本連載や青山真也さんの入門講座に、kubernetes.ioのチュートリアルなどもおすすめです。

テスト

ここで言う「テスト」とは、いわゆる資格試験などに限った話ではなく、学習で得た知識やスキルを何らかの形でアウトプットすること全般を指します。これには2つの狙いがあります。1つは学習効果を測定することで次の学習計画に役立てること。もう1つはテストそのものを通じて知識やスキルを自身により深く定着させることで、「テスト効果」と呼ばれます。

テスト効果の代表例

望ましい困難 記憶は思い出すことが難しいものほど、思い出した際に強く記憶に残る(望ましい困難)。テストで記憶を検索することで、正誤に関わらず知識が脳に強く刻まれる
流暢性の罠の排除 学習中や学習直後は情報が整理されており、かつすぐに思い出せるため、知識が定着していると思い込んでしまう(流暢性の罠)。テストによりこれを排除し、活用できる状態にする
意識の集中 単に学習するだけでは情報の重要性が判別できない。テストにより重要な情報を識別できるようになり、学習効率が高まる

では、Kubernetesの学習をする上で活用できるテストについて考えてみます。

実際のアプリケーションへの適用

言わずもがな、技術を習得する一番良い方法は実際に使ってみることです。現場の運用で得られる知識に勝るものはありません。実際に利用することで、あやふやな知識の再確認や必要な知識を絞ることができます。とは言え、いきなり使い始める、導入するとなると、問題に当たっても解決の見当がつけられず、いたずらに多くの時間を消費してしまうことになります。また、適用できる適切なアプリケーションを見つけられるかも問題です。本連載では、この実際のアプリケーションへの適用を体験できるように進めていきます。

他人への説明とアウトプット

他人への説明やアウトプットは簡単な方法です。エンジニアの学習にはアウトプットが必要とはよく言われていますが、自分の言葉で説明することで知識を整理したり、理解が不十分な箇所を明確にできます。一方で、アウトプットは得意不得意が大きく分かれる部分です。文章や資料を書くこと、他人に説明することが苦手な人にとってはハードルが高い場合があります。人前ではなく、自分1人で声に出して説明してみるのも大きな効果があります。抵抗がない方は、コミュニティの初心者向け勉強会などで登壇してみるのも良いでしょう。

CKA/CKADなどの資格試験

資格試験に挑戦してみることも良い方法です。Linux Foundationが提供するKubernetesの資格試験にCertified Kubernetes Administrator(CKA)Certified Kubernetes Application Developer(CKAD)があります。これは単純な知識を問うものではなく、課題に従ってKubernetesクラスタの操作を行うハンズオン形式のものなので、活用できる状態で知識を理解できているかが問われています。これらの試験に練習問題や模擬試験はありませんが、不合格の場合でも1回のみ料金不要で再受験できます。ある程度学習が進んだ段階で、自信がなくても1回受けてみることも良いでしょう。

全体の粗い学習が完了したら、これらのテストを積極的に行いましょう。テスト効果を最大化するには、なるべく早い段階で行うことが重要です。

詳細の再学習

テストをすることで、理解が不十分な箇所が浮き彫りになります。そうなれば「何が分からないか分からない」状態は脱していると思うので、分からない箇所ごとに再学習を進めましょう。下記のような教材が役に立ちます。なお、この段階では公式ドキュメントなど、なるべく信頼性の高い情報を利用しましょう。

特にkubernetes.ioの公式ドキュメントは解説もハンズオンも非常に充実しています。内容が多く、あまり体系化されていないため比較的難易度が高いですが、項目ごとに辞書的に利用するには適しています。この段階まで進めば大いに役に立つでしょう。日本語の翻訳も進んできました。

テストと再学習のループを回すことで、効率良く学習できます。最終的にCKADの試験に合格できれば、十分に使いこなせる知識が身に付いたと言えるでしょう。

おわりに

今回は、Kubernetesに入門する意義と、効率的な学習法を解説しました。次回以降は、アプリケーション開発者の立場でKubernetes上で単にコンテナを動かすところから、複数コンテナの連携やCI(Continuous Integration: 継続的インテグレーション)などアプリケーションを運用する上で最低限の構成を構築するまでの過程をステップアップしながら実践していきます。

ハンズオンに従って学習するも良し、独自のアプリケーションに応用してみるのも良し、状況に合わせて活用いただければと思います。

*筆者の所属するクリエーションラインでもKubernetesトレーニングを提供しています。知識の解説に加えて演習や各種の取り組みによって、テスト効果を大いに活用しながら確実に網羅的な知識を学べるトレーニングになっています。ぜひ、受けてみてください。

クリエーションライン株式会社 Exploratory Development & Incubation Team
クリエーションライン株式会社 EDIT所属、Linux Foundation公認kubernetesインストラクター。アプリケーション開発と千台規模のオンプレミスサーバ運用を経て、DevOpsとkubernetesの世界に触れる。 現在はKubernetes基盤の構築やサポートやトレーニングに従事。富山事業所メンバーと富山を盛り上げるべく活動中。
Twitter: https://twitter.com/cl_toyama
日立ソリューションズ・クリエイト
日立ソリューションズ・クリエイトに所属し、Webアプリケーション開発に従事したのち、 2019年1月からクリエーションライン株式会社と製造業向けにコンテナ/Kubernetesを活用したデータ分析基盤やIoTアプリケーション基盤の開発に従事。
大学院生の傍ら、2020年2月よりクリエーションライン株式会社においてkubernetesを活用した開発に従事。 開発未経験からkubernetesを学び、2020年10月にCKAを取得。クラウドネイティブ時代のエンジニアになるために奮闘中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています