はじめに
Kubernetes は、クラスタ内のワークロードとリソースを分離するための方法として名前空間を提供します。この実験では、名前空間を使用してワークロードとリソースを分離する方法を学びます。名前空間を作成し、その名前空間に単純な Web アプリケーションをデプロイし、Web アプリケーションがクラスタ内の他のリソースから分離されていることを確認します。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Kubernetes は、クラスタ内のワークロードとリソースを分離するための方法として名前空間を提供します。この実験では、名前空間を使用してワークロードとリソースを分離する方法を学びます。名前空間を作成し、その名前空間に単純な Web アプリケーションをデプロイし、Web アプリケーションがクラスタ内の他のリソースから分離されていることを確認します。
リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。
cd /home/labex/project
Minikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start
Minikube が動作していることを確認する:
Minikube クラスタの状態を確認します。
minikube status
kubelet
や apiserver
などのコンポーネントが Running
と表示されていることを確認します。minikube start
を再度実行します。Minikube の起動に問題がある場合は、必要に応じて minikube delete
を使用して環境をリセットします。
このステップでは、クラスタ内の他のリソースから Web アプリケーションを分離するために、webapp
と呼ばれる名前空間を作成します。
次の内容を持つ namespace.yaml
という名前のファイルを作成します。
apiVersion: v1
kind: Namespace
metadata:
name: webapp
次のコマンドを使用して、名前空間をクラスタに適用します。
kubectl apply -f namespace.yaml
次のコマンドを使用して、名前空間が作成されたことを確認します。
kubectl get namespaces
名前空間の一覧に webapp
名前空間が表示されるはずです。
このステップでは、webapp
名前空間に単純な Web アプリケーションをデプロイします。
次の内容を持つ web-app.yaml
という名前のファイルを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: webapp
spec:
replicas: 1
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
このファイルは、最新バージョンの Nginx Web サーバーを実行するコンテナの 1 レプリカを持つ Deployment を作成します。
次のコマンドを使用して、Deployment をクラスタに適用します。
kubectl apply -f web-app.yaml
次のコマンドを使用して、webapp
名前空間で Web アプリケーションが実行されていることを確認します。
kubectl get pods -n webapp
webapp
名前空間で実行されているポッドの一覧に web-app
ポッドが表示されるはずです。
このステップでは、Kubernetes サービスを使用して Web アプリケーションを外部に公開します。
次の内容を持つ web-app-service.yaml
という名前のファイルを作成します。
apiVersion: v1
kind: Service
metadata:
name: web-app
namespace: webapp
spec:
selector:
app: web-app
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
このファイルは、ClusterIP を使用して Web アプリケーションをクラスタに公開するサービスを作成します。
次のコマンドを使用して、サービスをクラスタに適用します。
kubectl apply -f web-app-service.yaml
次のコマンドを使用して、webapp
名前空間でサービスが実行されていることを確認します。
kubectl get services -n webapp
webapp
名前空間で実行されているサービスの一覧に web-app
サービスが表示されるはずです。
このステップでは、Web アプリケーションがクラスタ内の他のリソースから分離されていることを確認します。
次の内容を持つ other-app.yaml
という名前のファイルを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: other
spec:
replicas: 1
selector:
matchLabels:
app: other
template:
metadata:
labels:
app: other
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
このファイルでは、nginx
イメージを持つコンテナを実行する、デフォルト名前空間に other
と呼ばれる別の Deployment を作成しています。
次のコマンドを使用して、Deployment をクラスタに適用します。
kubectl apply -f other-app.yaml
次のコマンドを使用して、Deployment がデフォルト名前空間で実行されていることを確認します。
kubectl get pods | grep other
デフォルト名前空間で実行されているポッドの一覧に other
ポッドが表示されるはずです。
まず、次のコマンドを実行して、アプリケーションを実行しているポッドの名前を見つけます。
kubectl get pods -l app=other
other
ポッドが表示されるはずです。ポッドの名前をメモしておきます。
次に、次のコマンドを実行して、アプリケーションを実行しているコンテナ内でシェルセッションを開きます。
kubectl exec -it pod-name -- /bin/sh
<pod-name>
を先ほどメモしたポッドの名前に置き換えます。
シェルセッションに入ったら、次のコマンドを実行して web-app
Deployment にアクセスします。
curl web-app.webapp
Nginx Web サーバーからの HTML レスポンスが表示されるはずです。
この実験では、Kubernetes クラスタ内のワークロードとリソースを分離するために名前空間をどのように使用するかを学びました。名前空間を作成し、その名前空間に単純な Web アプリケーションをデプロイし、Kubernetes サービスを使用して Web アプリケーションを外部に公開し、Web アプリケーションがクラスタ内の他のリソースから分離されていることを確認しました。