概要Kubernetesは、コンテナを基としたインフラのオーケストレーションツールです。非常に多機能で、宣言的な記法でのインフラコード管理によって、柔軟かつ堅牢なインフラストラクチャを構築することができます。その一方で、(Kubernetesのみの知識に関わらず)非常に学習コストが高いという側面も持ち合わせています。このエントリーでは、Kubernetesを知る上でその前提知識として必要そうなキーワードと、なぜ必要なのかという簡単な説明を書いていきます。項目については、自分自身がハマったり困ったことがベースになっているため、もしかしたら足りない/多すぎるという意見もあるかもしれません。※筆者は偉そうに書きますが、筆者の理解が深いわけではないので悪しからず。ツイッターにて募集をかけてみたところ予想を上回る反響をいただいたので、今回まとめるに至りました。開発手法/ツールDocker(コンテナ)KubernetesはかつてはDockerに強い依存関係を持っていましたが、今はそうでもありません。コンテナというエコシステムを理解するうえでDockerの基本的な構想を知っておくことは必須ですし、Dockerを理解したうえでなぜKubernetesを使うのかというところへの理解に繋げていくのがよいかと思います。GitGitである必要性は必ずしもないかもしれませんが、コードのバージョン管理は必須です。業界標準であるということを踏まえGitとしています。これがないとKubernetesの構成管理は成り立たないですし、アプリケーションのデプロイ自動化などもできないので必須です。アジャイルKubernetesに限らず、コンテナベースのアプリケーションとアジャイルな開発は切っても切り離せないくらい密接な関係を持っていると自分は考えているので加えました。仮にアジャイル開発をしていないとしても、コンテナとアジャイルはなぜ相性がいいのか知っておくべきだとは思います。マイクロサービスマイクロサービスはアプリケーション自体の設計もさることながら、インフラ側の構成も非常に重要です。疎結合で分散されたアプリケーションを管理する上では、コンテナやそれを管理するKubernetesは非常に相性が良いものであると言えます。(ちょっとうまく説明できないので誰か代わりにお願いします)DevOpsKubernetes(というかコンテナ)を利用したいというモチベーションの1つに、DevOpsを実現するためのプラットフォームとして選定することがあります。クラウドネイティブとDevOpsにも密接な関係性があると筆者は考えており(要出典)、知らない人は勉強しておきましょう。Code(IaC)Kubernetesの構成管理は原則yamlファイルで行います。IaCの理解は必須でしょう。CI/CDテスト書きましょうテスト(吐血)Kubernetesに限った話ではありませんが、抽象化されたインフラを最大限に生かすための戦略として、テストやデプロイの自動化、それに伴ったパイプラインの構築はもはや必須レベルだと思います。Serverによってハンドリングされています。APIの知識は必須とも言えるでしょう。必須ではないですが、ついででも良いのでHTTP/2についてふわっと知っておくとプラスかもしれません。Nativeという概念を実現する最も大きなコンポーネントの1つがKubernetesです。Nativeとは何か、クラウドによって実現できるインフラにはどんな特徴があるかといった理解を持っておくことは非常に重要だと思います。ストレージインフラの基盤であるKubernetesにおいて、データ格納先であるストレージも非常に重要な概念です。オンプレとパブリッククラウドでは必要になる知識がちょっと違うかもしれません。OSの基本コンテナはカーネルの機能であるcgroupsやnamespaceを利用したisolationを行っています。Kubernetesはコンテナオーケストレータという立ち位置が非常に強いですが、分散処理の基盤という側面も持ち合わせています。GPUを使った機械学習基盤の構築や、大規模なワークフローをKubernetesのPodを使って動かすなど、単なるアプリケーション基盤に限らず、様々なユースケースもありますので、その特徴は理解しておくとよいでしょう。セキュリティ※ただし、これは事前に知っておくべきと言うよりは、こういうものが待ち受けているんだなあくらいに思っておくのがよさそうです。機密情報の管理は、コンテナ化における最も重要な課題の1つです。いろいろなツールもありますが、当然サービスや環境の要件によって大きく左右されますので、どんなものがあるのかを知っておくとよりよいと思います。ネットワークインフラ基盤というくらいですから、当然ネットワークの知識も必要です。TCP/IPモデルをベースに、特にL3/L4/L7の基本的な理解はしておきたいですね(筆者無事死亡)DNS(名前解決)Kubernetesはサービスディスカバリを目的として内部DNSを抱えています。少なくとも浸透したと言わない程度には知っておくべきでしょう。雑なまとめいやー、多いですね。SREだとかDevOpsだとか言った組織を実現していくには、多かれ少なかれこれらのスキルセットをベースに持つエンジニアたちが求められます。全てを理解してからなんて話はないと思いますが、こういう世界があるんだなあという大雑把な景色が見えているだけでも、Kubernetes完全理解への一歩に繋がるのかもしれません。