開発者がコンテナとKubernetesに抱く苦手意識の正体
だが、そのような魅力がある一方で、コンテナの活用には敷居の高さを感じている開発者もまだまだ多いのも事実だ。「コンテナはインフラエンジニアが持っているものを借りるという認識が、開発者側にあるのが大きな理由だと思います」(佐藤氏)
Kubernetesになると、さらに敷居や高くなる。KubernetesはDockerなどのコンテナ化されたサービスを管理するためのポータブルで拡張性のあるオープンソースのプラットフォームであり、コンテナを利用するうえで欠かせないソリューションだ。「Kubernetesはクラスタ構成やストレージの管理が複雑なので、開発者にとっては難度が高い。しかもさまざまなことができるよう、プラグインが豊富に用意されています。似たようなプラグインも多いので、最適解を導くことが難しい。このような理由から尻込みしてしまう開発者も多いと思います」(佐藤氏)
特にコンテナやKubernetesと馴染みがないJava開発者ならなおさらだ。Java開発者などDockerやKubernetesに関する知識のない開発者がそれらの技術を扱わなければならなくなった場合は、「ネットで検索し、ヒットしたテンプレートをコピー&ペーストしてそのまま使ってみることが一般的だと思います」と佐藤氏。だが、このような方法には大きな問題がある。「動いたとしても、それは自分がやろうとしていたものの最適解なのか、セキュリティ的に問題がないのかなども、自分で気づくことができないからです」(佐藤氏)
そのため、Dockerファイル起因のバグが起きたとしても、知識がないのでそれがDockerファイルに原因であることを特定することも難しい。もちろん、修正する術もわからない。たとえ修正しても、知識が乏しいので時間もかかり、さらに大きなバグが起こる可能性も秘めている。
しかもDockerやKubernetesが今、正しく動いているからといって数年先までそのまま使えるわけではない。3~4か月に1回の頻度でバージョンアップがあるからだ。例えばKubernetesであれば、Kubernetes自体のバージョンアップはもちろん、Kubernetesに関連するさまざまな機能もバージョンアップされる。「脆弱性が見つかった場合は、直ちに対処する必要がありますが、コピー&ペーストして作ったDockerファイルや、ネットの情報を見て適当に設定したKubernetesだと、そもそもその見つかった脆弱性の対象なのか、そのバージョンアップが自分のコンテナ環境に影響があるかどうかという判断が難しくなります。アップデート頻度も高いので、それに追いついていける自信とスキルを身につけていくことが求められます」(佐藤氏)