1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWSコンテナ入門】⑥Kubernetesの基本概念を抑える

1
Last updated at Posted at 2025-11-13

はじめに

本記事では、前回の EKS ハンズオン(eksctl でクラスタを作り、Nginx・ECRイメージをデプロイ)を踏まえて、
「Kubernetesとは何か?」「どんな概念を押さえるべきか?」「ハンズオンで何をやったのか?」を振り返ってみます。

前回の記事↓↓
https://qiita.com/pommny_dev/items/d3b847f4af9ec7e2bc20

※ 本記事は、k8s初心者が調べながら手を動かしながら書いているため、
記事内容の信ぴょう性は保障いたしかねます。
(誤り等あれば指摘いただけますと幸いです。)


1. そもそも Kubernetes(k8s)って何?

Kubernetes(通称 k8s)は、コンテナ化されたアプリケーションを自動で管理・運用するための仕組みです。

Dockerなどでアプリをコンテナ化しても、
「どこで動かす?」「壊れたら?」「複数台で負荷分散は?」といった課題が残る。

→ これを全部いい感じにやってくれるのが Kubernetes。

アプリの「理想の状態(YAMLで宣言)」を書くだけで、
クラスタが自動的に 配置・復旧・スケール・公開 を行ってくれる。


2. Kubernetesの押さえておくべき基本概念

ハンズオンで出てきた単語を中心に、k8sの基本的な概念のイメージをまずは押さえます。

用語 役割・イメージ 一言で言うと
Pod コンテナを1つ以上まとめた最小実行単位。Kubernetesが直接管理する。アプリケーションの実行主体。 コンテナの“入れ物”
Deployment Podを指定数動かし続けるための管理者。自動復旧や更新も担当。「なにを、どのように動かすのか」を定義。 アプリの運営管理担当
Service 変動するPodの前に固定の入口(IP/DNS)を作る。k8sの機能でロードバランサを作成したりする アプリの入口
Namespace クラスタ内の論理的な区画。環境やチームごとに分離できる。 部屋・箱
Node 実際にPodが動くサーバ(EC2など)。Kubernetesが自動でスケジュール。 実行ホスト
Cluster Kubernetes全体の集合体。複数のNodeで構成。 管理対象全体
LoadBalancer EKSの場合、Service type=LoadBalancer を作るとAWSのLBを自動生成。 外部公開の入口

図に起こすと、以下の様なイメージになる(と理解)

Kubernetes主要コンポーネントの関係図

image.png


3. ハンズオンで何をやったのか振り返る

Nginx を外部公開してみる

ここでは、kubectl コマンドを使って Deployment を作成 → Service を外部公開 → 実際にアクセス という一連の流れを理解していきます。


Step1. Nginx の Deployment を作成する

まず以下コマンドでnginx という Deployment を作成します。

kubectl create deployment nginx --image=nginx

--image=nginx によって、公式の Nginx コンテナイメージを使用した Pod が起動します。

今回は Deployment の設定(replicas や port 等)を指定していないため、Kubernetes がデフォルト値で自動生成します。

📄 Deployment の設定ファイル(YAML)が欲しい場合

実際にクラスタに作られている Deployment の内容は、以下のコマンドで確認・出力できます。

kubectl get deployment nginx -o yaml

Step2. Deployment を外部公開する(Service を作成)

続いて、以下コマンドでServiceを作成していきます。

kubectl expose deployment nginx --type=LoadBalancer --port=80 --target-port=80

🔍 kubectl expose は何をするコマンド?

kubectl expose は、Deployment や Pod に対して Service を作成し、通信の入口を作るコマンド。

これによって以下が実現します。

  • Pod の前に 安定した入口(仮想IP / DNS)ができる

  • Pod の IP が変わっても Service が自動ルーティング

  • type=LoadBalancer の場合、EKS が AWS のロードバランサ(ELB/NLB)を自動作成する

🔸 --type=LoadBalancer の意味(Service の種類)

TYPE 説明 主な用途
ClusterIP(既定) クラスタ内専用の入口 内部通信(フロント→バック)
NodePort ノードの固定ポートを外部に開ける Nodeに直接アクセス??
LoadBalancer クラウドLBを自動作成し外部公開 今回のシナリオ
ExternalName 外部のドメインを CNAME で返すだけ 外部DBやSaaSへの名前解決??

今回は LoadBalancer を指定したため、
AWS 上で自動的にロードバランサが作成され、インターネットからアクセス可能になります。

🔸 --port と --target-port の違い

オプション 意味

オプション 意味
--port=80 Service(ロードバランサ)の受け口。外部からのリクエストはここに届く。
--target-port=80 実際に Pod(コンテナ)が待ち受けるポート。Service→Pod の転送先。

今回は nginx が 80 番ポートで待ち受けているため、両方 80 を指定しています。

作成した Service の状態を確認してみます。

kubectl get svc nginx

出力例

NAME         TYPE           CLUSTER-IP      EXTERNAL-IP                                                                    PORT(S)        AGE
kubernetes   ClusterIP      10.100.0.1      <none>                                                                         443/TCP        22h
nginx        LoadBalancer   10.100.72.213   xxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com   80:31170/TCP   16s

EXTERNAL-IP = xxxxxxxxxxxx.elb.ap-northeast-1.amazonaws.com
→ ここがロードバランサの DNS 名。
この DNS へアクセスすると Pod(nginx)に到達してアプリケーションにアクセス出来ます。

4. まとめ

  • kubectl create deployment で nginx の Deployment を作成

  • kubectl expose --type=LoadBalancer で外部公開用の Service を作成

  • EKS が AWS のロードバランサを自動作成する

  • kubectl get svc の EXTERNAL-IP にアクセスすれば、インターネットから到達可能

次の記事では、ECRイメージをデプロイする手順を振り返りながら、これらの背後で動く Kubernetes の仕組みをもう少し深掘りしていきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?