はじめに
HorizontalPodAutoscaler は、Kubernetes の機能であり、リソースの利用状況に基づいてデプロイメント内のポッド数を自動的にスケールすることができます。この実験では、HorizontalPodAutoscaler を使用してデプロイメントを自動的にスケールする方法を学びます。
Minikube クラスタを起動する
リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカルマシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start- このコマンドは、ローカルマシン上に単一ノードの Kubernetes クラスタをセットアップします。
- Minikube の起動には、システムの性能に応じて数分かかる場合があります。
Minikube が動作していることを確認する:
Minikube クラスタの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントがRunningと表示されていることを確認します。- クラスタが動作していない場合は、
minikube startを再度実行します。
Minikube の起動に問題がある場合は、必要に応じてminikube deleteを使用して環境をリセットします。
デプロイメントを作成する
まず、HorizontalPodAutoscaler を適用するデプロイメントを作成する必要があります。
- 次の内容の
deployment.yamlという名前のデプロイメントファイルを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-demo
spec:
replicas: 1
selector:
matchLabels:
app: hpa-demo
template:
metadata:
labels:
app: hpa-demo
spec:
containers:
- name: hpa-demo
image: nginx
resources:
limits:
cpu: "1"
memory: 512Mi
requests:
cpu: "0.5"
memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
name: hpa-demo
spec:
selector:
app: hpa-demo
ports:
- name: http
port: 80
targetPort: 80
このデプロイメントは、CPU とメモリのリソース制限と要求を持つ Nginx コンテナの単一レプリカを指定しています。
- デプロイメントを作成します。
kubectl apply -f deployment.yaml
HorizontalPodAutoscaler を作成する
これでデプロイメントができたので、HorizontalPodAutoscaler を作成してデプロイメントを自動的にスケールすることができます。
- 次の内容の
hpa.yamlという名前の HorizontalPodAutoscaler ファイルを作成します。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-demo
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-demo
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 1
type: Utilization
この HorizontalPodAutoscaler は、hpa-demoデプロイメントを 1 から 10 のレプリカにスケールするように指定しており、平均 CPU 使用率を 50%にすることを目標としています。
- HorizontalPodAutoscaler を作成します。
kubectl apply -f hpa.yaml
HorizontalPodAutoscaler をテストする
これで HorizontalPodAutoscaler ができたので、デプロイメントに負荷をかけることでテストすることができます。
- metrice-server を有効にする
minikube addons enable metrics-server
- 負荷生成用のポッドを作成する
kubectl run -i --tty load-generator --image=busybox /bin/sh
- 負荷生成用のポッドで、次のコマンドを実行してデプロイメントに負荷をかけます。
while true; do wget -q -O- http://hpa-demo; done
- 別のターミナルを開き、HorizontalPodAutoscaler の状態を確認します。
kubectl get hpa
hpa-demoのコピー数が10に拡大されていることがわかります。次のコマンドでレプリカ数を確認することができます。
kubectl get pods -l app=hpa-demo
- 負荷生成用のポッドで
ctrl+cを入力して負荷生成を停止します。
まとめ
この実験では、HorizontalPodAutoscaler を使ってリソースの利用状況に基づいてデプロイメントを自動的にスケールする方法を学びました。デプロイメントを作成し、HorizontalPodAutoscaler を作成し、デプロイメントに負荷をかけることでテストしました。また、HorizontalPodAutoscaler が増えた負荷に応じてデプロイメントをどのようにスケールするかも見ました。


