前回の記事でも書きましたが、そろそろKubernetesも自分の範囲内に入れる必要が出てきました。
Kubernetesって・・・難しい!
これがKubernetesに触れたときの第一印象です。
これまで様々なインフラオーケストレーション製品に触れてきましたが、個人的にはその中でもかなり難易度が高い方だと思います。
これからKubernetesを学ぶ人を脅したい訳ではなく、これが事実として感じたことです。
今では自宅ラボにボタン一つでKubernetes環境を5分で構築できるシステムを作りましたが、ここまで来るまでかなり苦労しました。
今回は、「Kubernetesって難しい!」と思った理由を紹介します。
色んなインフラコンポーネントの事前知識が必要
これが大きい。
例えば「Docker」の知識がないと
そもそもKubernetesで「何ができるか」と「どんな課題を解決するために生み出された製品か」がわかりません。
Dockerなどのコンテナーソリューションの知識を持っている人は、(私の感覚だと)まだまだ多いとは思えません。少なくともVMによるサーバー仮想化よりはエンジニア人口が圧倒的に少ないはず。
なので、Kubernetesを学ぶ際は、まずはDockerを学ぶことになるのですが、そうすると今度は「Linux」の知識がほぼ必須になります。
この複数の知識の積み重ねが面倒で、勉強の途中で投げ出してしまう人が多いのではないでしょうか。
(他にもHTTP,スクリプティングの基本知識も必要ですし)
Kubernetesのネットワークはややこしい
Kubernetesの環境では「ContainerにIP付与するだけで相互接続が可能になる」ような簡単なものではありません。
- Pod内通信
- Pod間通信(同一ノード)
- Pod間通信(異なるノード)
- さらに、Pod間通信でのClusterIPを経由したケース
- 外部との通信
などなど、色んな通信パターンが存在し、初期構築時にそれなりに理解しておく必要があります。
ネットワークエンジニアにとっては「現行のオンプレが仮想的に包含された」イメージとして捉えられるかもしれませんが、、ネットワークの知識が浅い方は「なんのこっちゃ」と戸惑ってしまうかと。
これはDockerについても同様なことが言えるのですが、Kubernetesの場合は「異なるノードにPodば分散できる」事がキモなので、上記の通り通信が複雑になる。
Kubernetsのネットワークは本当に難しい。
新バージョンのリリースが早い
正確には「Kubernetesと連携するコンポーネントのリリース時期が異なる」のが初心者にとって混乱を招く。
例えば、現在の最新のDockerバージョンだと最新のKubernetesだと連携できない問題とかが普通に出てくる。
私がこの記事を執筆している時は、Dockerの最新バージョンは「18.03」でした。Kubernetesの最新は「1.12.3」だったのですが、この組み合わせでkubeadm initを実行すると「このDockerのバージョンは対応してない」と怒られる。
これ、初心者にとっては大問題。
何故かと言うと、初心者は「Googleで検索して、引っかかった手順を基に練習環境を構築する」ことが多いからです(私含め)。で、記事執筆時と読者が参照した時点でパッケージのLatestが違うので、初期構築で失敗する事がある。
「手順通りにしたつもりなのに、、、なんで?」
ってなる。
インフラ製品の学習には「自分でイチから構築する」のが最短だと思うのですが、初回構築の難易度が上がってしまう。
初心者向けの記事を書こうか悩み中
幸いにもDocker/Kubernetesの全体像が把握できたので、初心者向けの記事を書こうか悩み中です。
特にネットワークの範囲は、日本語の解説記事が本当に少ない。にもかかわらず、難易度が高い。
コメント