Kubernetes がなぜ人気があるのでしょうか?

Kubernetes がなぜ人気があるのでしょうか?

この記事の公開時点で、Kubernetes は登場して約 6 年が経過しており、過去 2 年間で人気が高まり、最も人気のあるプラットフォームの 1 つになりました。今年は3番目に人気のあるプラットフォームになりました。 Kubernetes について聞いたことがない方のために説明すると、Kubernetes はコンテナ ワークロードを実行およびオーケストレーションできるプラットフォームです。

コンテナは、2007 年の cgroups、2002 年の名前空間など、Linux カーネル プロセス分離構造として始まりました。2008 年に LXC が導入されて以来、コンテナの重要性は増し、Google は Borg と呼ばれる独自の内部「すべてをコンテナ内で実行する」メカニズムを開発しました。 2013 年に Docker がリリースされ、コンテナに革命が起こりました。当時、コンテナをオーケストレーションするための主なツールは Mesos でしたが、広く採用されていませんでした。 Kubernetes は 2015 年にリリースされ、すぐにコンテナ オーケストレーションの事実上の標準になりました。

Kubernetes の人気を理解するために、いくつかの質問について考えてみましょう。開発者が本番アプリケーションの展開方法について最後に合意したのはいつですか?ツールをそのままの状態で実行できる開発者を何人知っていますか?現在、アプリケーションの仕組みを理解していないクラウド運用エンジニアはどれくらいいるでしょうか?この記事ではその答えを探ります。

YAMLとしてのインフラストラクチャ

Puppet と Chef の世界から見ると、Kubernetes にとっての大きな変化は、コードとしてのインフラストラクチャから YAML としてのインフラストラクチャへの移行です。 Pod、構成、デプロイメント、データ ボリュームなど、Kubernetes 内のすべてのリソースは、YAML ファイルで簡単に表現できます。例えば:

  1. APIバージョン: v1
  2. 種類: ポッド
  3. メタデータ:
  4. 名前: サイト
  5. ラベル:
  6. アプリ: ウェブ
  7. 仕様:
  8. コンテナ:
  9. -名前: フロントエンド 
  10. 画像: nginx
  11. ポート:
  12. - コンテナポート: 80

この表現により、DevOps や SRE は、Python、Ruby、JavaScript などのプログラミング言語でコードを記述することなく、ワークロードをより簡単に、より完全に表現できるようになります。

インフラストラクチャをデータとして活用するその他の利点は次のとおりです。

GitOps または Git Operations バージョン コントロール。この方法では、すべての Kubernetes YAML ファイルを Git リポジトリに保存できるため、変更がいつ行われたか、誰が変更したか、何が変更されたかを正確に把握できます。これにより、組織全体の透明性が高まり、メンバーが必要なものを探すためにどこに行く必要があるかについての曖昧さがなくなり、効率が向上します。同時に、プル リクエストをマージするだけで、Kubernetes リソースに自動的に変更を加えることが簡単になります。

スケーラビリティ。リソースを YAML として定義すると、クラスター オペレーターは Kubernetes リソース内の 1 つまたは 2 つの数値を変更してスケーリング動作を変更することが非常に簡単になります。 Kubernetes には、トラフィックが少ないときと多いときの両方を処理できるように、特定のデプロイメントに必要なポッドの最小数と最大数を決定するのに役立つ、水平ポッド自動スケーリング コントローラーがあります。たとえば、トラフィックの急増により、より多くの容量が必要になる可能性があるデプロイメントを実行している場合は、maxReplicas を 10 から 20 に増やすことができます。

  1. apiバージョン: autoscaling/v2beta2
  2. 種類: Horizo​​ntalPodAutoscaler
  3. メタデータ:
  4. 名前: myapp
  5. 名前空間:デフォルト 
  6. 仕様:
  7. スケールターゲット参照:
  8. APIバージョン: アプリ/v1
  9. 種類: デプロイメント
  10. 名前: myapp-deployment
  11. 最小レプリカ数: 1
  12. 最大レプリカ数: 20
  13. メトリクス:
  14. - タイプ: リソース
  15. リソース:
  16. 名前: CPU
  17. ターゲット:
  18. タイプ: 利用
  19. 平均使用率: 50

セキュリティと制御。 YAML は、Kubernetes に何がどのようにデプロイされているかを確認するのに最適な方法です。たとえば、セキュリティの観点から、ワークロードが非ルート ユーザーとして実行されているかどうかが主な懸念事項の 1 つです。 YAML/JSON バリデーターの conftest や、ポリシー バリデーターの Open Policy Agent などのツールを活用して、ワークロードの SecurityContext でコンテナが root として実行できることを確認できます。これを行うには、ユーザーは次のような単純な OPA rego ポリシー式を使用できます。

  1. パッケージメイン
  2.  
  3. 拒否[メッセージ] {
  4. input.kind = "デプロイメント"  
  5. input.spec.template.spec.securityContext.runAsNonRoot = true ではない 
  6. msg = "コンテナはルートとして実行しないでください"  
  7. }

クラウド プロバイダーの統合。テクノロジー業界における大きなトレンドの 1 つは、パブリック クラウド プロバイダーでワークロードを実行することです。 Kubernetes では、クラウド プロバイダー コンポーネントの助けを借りて、各クラスターが、そのクラスターが実行されているクラウド プロバイダーと統合できるようになります。たとえば、AWS の Kubernetes でアプリケーションを実行し、サービスを通じてアプリケーションにアクセスできるようにする場合、クラウドプロバイダーは LoadBalancer サービスを自動的に作成し、Amazon Elastic Load Balancer を自動的に構成してトラフィックをアプリケーション Pod に転送するのに役立ちます。

拡張機能

Kubernetes はスケーラビリティが非常に高く、開発者に好評です。既存のリソースには、Pod、Deployment、StatefulSet、Secret、ConfigMap などが含まれます。ただし、ユーザーと開発者は、カスタム リソース定義の形式でさらにリソースを追加できます。たとえば、CronTab リソースを定義する場合は、次のようにします。

  1. apiバージョン: apiextensions.k8s.io/v1
  2. 種類: カスタムリソース定義
  3. メタデータ:
  4. 名前: crontabs.my.org
  5. 仕様:
  6. グループ: my.org
  7. バージョン:
  8. -名前: v1
  9. 提供:本当 
  10. ストレージ: true  
  11. スキーマ:
  12. オープンAPIV3スキーマ:
  13. タイプ: オブジェクト
  14. プロパティ:
  15. 仕様:
  16. タイプ: オブジェクト
  17. プロパティ:
  18. cronスペック:
  19. タイプ: 文字列
  20. パターン: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$'  
  21. レプリカ:
  22. タイプ:整数 
  23. 最小: 1
  24. 最大: 10
  25. スコープ: 名前空間
  26. 名前:
  27. 複数形: crontabs
  28. 単数形: crontab
  29. 種類: CronTab
  30. 短縮名:
  31. -ct

次に、同様の方法で CronTab リソースを作成します。

  1. APIバージョン: "my.org/v1"  
  2. 種類: CronTab
  3. メタデータ:
  4. 名前: my-cron-object
  5. 仕様:
  6. cronSpec: "* * * * */5"  
  7. 画像: my-cron-image
  8. レプリカ: 5

Kubernetes の拡張性のもう 1 つの形態は、開発者が独自の Operator を作成できるようにすることです。Operator は、Kubernetes クラスターで実行され、制御ループ パターンに従う特殊なプロセスです。オペレーターを使用すると、ユーザーは Kubernetes API と通信して CRD (カスタム リソース定義) を自動的に管理できます。

コミュニティには、開発者が独自のオペレーターを作成できるツールがいくつかあります。これらのツールの 1 つは、Operator Framework とその Operator SDK です。 SDK は、開発者がオペレーターの作成をすぐに開始するためのフレームワークを提供します。たとえば、次のようなコマンドラインを使用して開始できます。

  1. $ operator-sdk 新しい my-operator --repo github.com/myuser/my-operator  

これにより、YAML ファイルと Golang コードを含む Operator のテンプレート全体が作成されます。

  1. |____cmd
  2. | |____マネージャー
  3. | | |____メイン
  4. |____go.mod
  5. |____デプロイ
  6. | |____ロール.yaml
  7. | |____ロールバインディング.yaml
  8. | |____サービスアカウント.yaml
  9. | |____演算子.yaml
  10. |____ツール.go
  11. |____行く.合計 
  12. |____.gitignore
  13. |____バージョン
  14. | |____バージョン.go
  15. |____ビルド
  16. | |____ビン
  17. | | |____ユーザー設定
  18. | | |____エントリポイント
  19. | |____Dockerファイル
  20. |____パッケージ
  21. | |____アピス
  22. | | |____apis.go
  23. | |____コントローラー
  24. | | |____コントローラ

次に、次のように API とコントローラーを追加できます。

  1. $ オペレータ SDK にAPIを追加--api-version=myapp.com/v1alpha1 --kind=MyAppService    
  2. $ オペレーターSDKコントローラーを追加--api-version=myapp.com/v1alpha1 --kind=MyAppService  

最後に、Operator イメージをビルドしてコンテナ レジストリにプッシュします。

  1. $ operator-sdk ビルド your.container.registry/youruser/myapp-operator

開発者がさらに制御する必要がある場合は、Golang ファイル内のテンプレート コードを変更できます。たとえば、コントローラーの特定の詳細を変更するには、controller.go ファイルを変更できます。

別のプロジェクトである KUDO を使用すると、宣言型 YAML ファイルのみを使用してオペレーターを作成できます。たとえば、Apache Kafka Operator は次のように定義され、ユーザーはわずか数個のコマンドで Kubernetes 上に Kafka クラスターをインストールできるようになります。

  1. $ kubectl kudo で Zookeeper をインストールします
  2. $ kubectl kudo kafka をインストールします

別のコマンドを使用して調整することもできます。

  1. $ kubectl kudo kafka をインストール--instance=my-kafka-name \  
  2. -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 \
  3. -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m \
  4. -p BROKER_COUNT=5 -p BROKER_MEM=4096m \
  5. -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 \
  6. -p ネットワークスレッド数 = 10 -p IO スレッド数 = 20

革新

過去数年間、Kubernetes は 3 ~ 4 か月ごとにメジャー バージョンがリリースされており、毎年 3 ~ 4 つのメジャー バージョンがリリースされていることになります。前回のリリースでは 30 を超える追加機能と変更があったことからもわかるように、展開される新機能の数は減っていません。さらに、Kubernetes プロジェクトの GitHub アクティビティが示すように、このような困難な時期であっても、貢献は減速する兆候を見せていません。

新しい機能により、クラスター オペレーターはさまざまなワークロードを実行する際の柔軟性が向上します。ソフトウェア エンジニアは、より多くの制御権を持ち、アプリケーションを直接本番環境にデプロイできることも好みます。

コミュニティ

Kubernetes の人気のもう一つの大きな側面は、その強力なコミュニティです。まず、Kubernetes が 2015 年にバージョン 1.0 をリリースしたとき、それはベンダー中立の組織である Cloud Native Computing Foundation に寄贈されました。

プロジェクトが進むにつれて、Kubernetes のさまざまな領域をターゲットにした多数のコミュニティ SIG (Special Interest Groups) も登場し、常に新しい機能を追加して、Kubernetes をよりユーザーフレンドリーなものにしています。

Cloud Native Foundation は、現時点では世界最大のオープンソース イベントである CloudNativeCon/KubeCon も主催しています。通常、年に最大 3 回開催されるこのイベントには、Kubernetes とそのエコシステムを改善し、3 か月ごとにリリースされる新機能の一部を活用したいと考えている何千人もの技術専門家やプロフェッショナルが集まります。

さらに、Cloud Native Foundation には技術監視委員会があり、SIG と連携してクラウド ネイティブ エコシステムにおける Foundation の新規および既存のプロジェクトを検討しています。ほとんどのプロジェクトは Kubernetes の価値提案に貢献しています。

最後に、コミュニティが互いにサポートし合い、新しい参加者を歓迎するという意識的な努力がなければ、Kubernetes がこれほどの成功を収めることはなかったと私は信じています。

未来

将来、開発者が直面する主な課題の 1 つは、コードが実行されるインフラストラクチャではなく、コードの詳細に重点を置く方法です。このため、サーバーレスは、この課題に対処するための主要なアーキテクチャパラダイムの 1 つとして浮上しています。 Knative や OpenFaas など、Kubernetes を使用して開発者からインフラストラクチャを抽象化する非常に高度なフレームワークがすでにいくつか存在します。

この記事では Kubernetes について簡単に紹介しましたが、これは氷山の一角にすぎません。ユーザーが活用できるリソース、機能、構成は他にもたくさんあります。今後も新しいオープンソース プロジェクトやテクノロジーによって Kubernetes が強化され、進化していくでしょう。前述したように、貢献とコミュニティが大きな役割を果たします。

<<:  クラウドネイティブ革命によってもたらされたログ管理の課題にどう対処すればよいでしょうか?

>>:  最新のネットワーク境界管理: VPN から SDP に移行する 4 つの理由

推薦する

なぜ k8s はクラウド時代のオペレーティング システムと呼ばれるのでしょうか?

[[420872]]過去 2 年間で、Kubernetes は Swarm と Mesos を打ち負...

アンダーレイにおけるマルチネットワーク ns の適用 - ヒント

みなさんこんにちは。私は次男です。前回の記事「​​Underlay でのマルチネットワーク ns の...

SEO業界のコンサルティングサービスについて話す

「SEO はテクノロジーであり、芸術でもある」と言う人もいます。私の意見では、SEO はむしろサービ...

サーバーの安定性がランキングに与える影響

サーバーの安定性はウェブサイトのランキングに直接影響します。これはSEOの重要な部分であり、SEOに...

どのようなユーザーエクスペリエンスが検索エンジンのニーズを満たすのでしょうか? (1つ)

ユーザー エクスペリエンスという言葉は、数え切れないほど多くのウェブマスターの頭の中にありますが、数...

ウェブサイトマーケティングとタイトルの関係についての簡単な分析

ウェブサイトの成功がコンテンツの質に左右されるのであれば、良いタイトルが最後の仕上げとなります。一般...

企業ウェブサイトの最適化で注意すべき点について簡単に説明します。

業界に入ったばかりのSEO担当者の場合、ほとんどの人が会社の公式サイトの最適化を担当していますが、あ...

LNMP による画像の盗難とトラフィックの浪費を防ぐ

一般的に、当社のサーバーまたは VPS のトラフィックは制限されています。当社の Web サイト上の...

なぜ SEO によって一部の人々がますます迷ってしまうのでしょうか?

私は武漢で7~8か月間ウェブサイトの最適化に携わってきました。現在の仕事には非常に満足しており、興味...

Woothosting - 中国ユーザー向けのロサンゼルス特別VPS、年間3.99ドルから

Woothosting は、公式発表によると 2007 年に設立されましたが、明らかにこの声明はでた...

映画会社はインターネットマーケティングモデルを利用して興行収入の主な魅力となっている

マーケティングについての基本的な理解についてお話しいただけますか。あるいは、マーケティングのような一...

医療ウェブサイトのランキングを上げることの難しさとその対処法についての考察

医療ウェブサイトのプロモーションに携わったことのある方なら、こうしたウェブサイトの最適化が比較的難し...

#BlackWeek5# turnkeyinternet-ホスト 1 ドル、ホスト専用 IPv4 10 個、サーバー 9 ドル/月

10 年以上の歴史を持つアメリカの老舗企業である turnkeyinternet.net は、仮想ホ...

ウェブサイトをダウングレードする際に分析し調整すべき6つの側面

SEO をしばらくやってきた SEO 担当者は、自分の実践を経て、Baidu に不正ポイント システ...