【Kubernetes初めの一歩】Kubernetesって何?
はじめに
Kubernetesについて、これから勉強を始める人向けに「Kubernetesって何?」や「そもそもなんて読むの?k8sは?」みたいな基本的なことを簡単にまとめます。
Kubernetesとは
Kubernetes
とは、コンテナの運用を自動化するためのコンテナオーケストレーションシステムです。コンテナでの運用をいろいろ楽にしてくれるプラットフォームになります。
Googleが社内向けコンテナオーケストレーションシステムとして開発・利用していたものを2014年にオープンソース化しました。
プロダクショングレードのコンテナ管理基盤
Kubernetes (K8s)は、デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したりするための、オープンソースのシステムです。 管理や検出を容易にするため、アプリケーションを論理的な単位に分割し、コンテナをグルーピングします。KubernetesはGoogleでの15年にわたる経験を基に構築されており、コミュニティのアイディアや慣習との最善の組み合わせを取っています。 惑星規模のスケーリング Googleが週に何十億ものコンテナを実行することを可能としているのと同じ原則に沿ってデザインされているため、Kubernetesは運用チームの人数を増やさずに規模を拡大することができます。 いつまでも使える ローカルのテストであろうとグローバル企業での開発であろうと、Kubernetesの柔軟性はあなたの要求がどれだけ複雑になろうとも問題なく、矛盾無く、簡単にアプリケーションを提供できます。 どこでも実行できる Kubernetesはオープンソースなので、オンプレミスやパブリッククラウド、それらのハイブリッドなどの利点を自由に得ることができ、簡単に移行することができます。 Kubernetesをダウンロードするには、ダウンロードセクションを訪れてください。 150以上のマイクロサービスアプリケーションをKubernetes上に移行する挑戦 By Sarah Wells, Technical Director for Operations and Reliability, Financial Times ビデオを見る 2024年8月21日〜23日のKubeCon + CloudNativeCon Chinaに参加する 2024年11月12日〜15日のKubeCon + CloudNativeCon North Americaに参加する 2024年12月11日〜12日のKubeCon + CloudNativeCon Indiaに参加する Kubernetesの機能 自動化されたロールアウトとロールバック Kubernetesはアプリケーションや設定への変更を段階的に行い、アプリケーションの状態を監視しながら、全てのインスタンスが同時停止しないようにします。更新に問題が起きたとき、Kubernetesは変更のロールバックを行います。進化を続けるDeploymentのエコシステムを活用してください。 サービスディスカバリーと負荷分散 Kubernetesでは、なじみのないサービスディスカバリーのメカニズムを使用するためにユーザーがアプリケーションの修正をする必要はありません。KubernetesはPodにそれぞれのIPアドレス割り振りや、Podのセットに対する単一のDNS名を提供したり、それらのPodのセットに対する負荷分散が可能です。 ストレージオーケストレーション ローカルストレージやGCP、AWSなどのパブリッククラウドプロバイダー、もしくはNFS、iSCSI、Gluster、Ceph、Cinder、Flockerのようなネットワークストレージシステムの中から選択されたものを自動的にマウントします。 Secretと構成管理 Secretやアプリケーションの構成情報を、イメージの再ビルドや機密情報を晒すことなくデプロイ、更新します 自動ビンパッキング 可用性を犠牲にすることなく、リソース要件やその他の制約に基づいてコンテナを自動的に配置します。リソース利用率の向上と、リソースの節約のために、クリティカルなワークロードとベストエフォートなワークロードを混在させます。 バッチ実行 サービスだけでなく、KubernetesはバッチとCIワークロードの管理機能も提供し、必要に応じて障害が発生したコンテナを置き換えることもできます。 IPv4/IPv6デュアルスタック IPv4およびIPv6のアドレスをPodとServiceに割り当てる 水平スケーリング シンプルなコマンドやUIを使って、あるいはCPU使用率に基づいて自動的に、アプリケーションをスケールアップやスケールダウンします。 拡張性を考慮した設計 アップストリームのソースコードを変更することなく、Kubernetesクラスターに機能を追加できます。 ケーススタディ "私たちはたくさんの人からの関心を得るためにさまざまな戦略を試みています。Kubernetesとクラウドネイティブ技術は、いまやデファクトのエコシステムとみなされています。 " 続きを読む
読み方・書き方
まず最初に戸惑うのが読み方です。
以下のように読まれます。
- クーバネティス
- クバネテス
また、Kubernetesと長いので、k8s
と略されることもあります。
どんなことができるか
Kubernetesのドキュメントより、Kubernetesでは以下のようなことができます。
- サービスディスカバリーと負荷分散
- ストレージ オーケストレーション
- 自動化されたロールアウトとロールバック
- 自動ビンパッキング
- 自己修復
- 機密情報と構成管理
これからもわかるようにKubernetesでは、コンテナを利用してサービスを公開・負荷分散し、コンテナを自動的に再起動して修復したりと、コンテナ運用上で楽になる機能が備わっています。
クラウドサービスのKubernetes
KubernetesはOSSなので自前で環境を構築することもできますが、GCP/AWS/AzureなどのパブリッククラウドでもKubernetesのマネージドサービスが提供されています。
- GCP: GKE
- AWS: Amozon EKS
- Azure: AKS
何はともあれ動かしてみる
まずはとにかくローカルでKubernetesを動かしてみたいと思います。
Kubernetesの機能は多岐に渡るので、今回はコンテナを1つだけ実行してみることにします。
準備
ローカルでKubernetesを動かすために、Docker DesktopでKubernetes環境を構築します。
Docker Desktopのインストールについては、下記で説明しています。
いまさらDocker入門
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
以下のようにDockerの設定画面からKubernetesを有効化します。
次に、Kubernetesのコマンドラインツールであるkubectl
をインストールします。
1❯ brew install kubectl
Pod(コンテナ)の実行
Podと呼ばれるコンテナの集合体を実行します。 ここではnginxのイメージを利用しています。
1❯ kubectl run demo --image=nginx --labels app=demo
2pod/demo created
正常に実行できたか確認します。
1❯ kubectl get pods --selector app=demo
2NAME READY STATUS RESTARTS AGE
3demo 1/1 Running 0 8s
ローカルマシンの8080ポートからコンテナの80ポートに転送します。
1❯ kubectl port-forward demo 8080:80
2Forwarding from 127.0.0.1:8080 -> 80
3Forwarding from [::1]:8080 -> 80
4Handling connection for 8080
5Handling connection for 8080
ブラウザからhttp://localhost:8080/
にアクセスするとnginxの画面が確認できます。
まとめ
- Kubernetesはコンテナの運用を自動化するためのコンテナオーケストレーションシステム
参考
- Kubernetesドキュメント | Kubernetes
- kubernetes/kubernetes: Production-Grade Container Scheduling and Management
- kubectlのインストールおよびセットアップ | Kubernetes