PHP/Apache の問題の修正

1. Kubernetes リソース

特に本番環境のKubernetesクラスターでは、CPUとメモリは貴重なリソースと見なされています。クラスター運用者は通常、デプロイメントでPodまたはサービスが必要とするCPUとメモリの量を指定するよう求めます。これにより、クラスターがソリューションを配置するノードを自動的に管理できます。

これは、アプリケーション/Podのデプロイメントにリソースセクションを配置することで行います。

例:

resources:
  limits:         # Maximum amount of CPU & memory for peek use
    cpu: "8"      # Maximum of 8 cores of CPU allowed at for peek use
    memory: "8Mi" # Maximum allowed 8Mb of memory
  requests:       # Request are the expected amount of CPU & memory for normal use
    cpu: "6"      # Requesting 4 cores of a CPU
    memory: "4Mi" # Requesting 4Mb of memory

詳細については、こちらを参照してください: Resource Management for Pods and Containers

アプリケーションまたはPodがデプロイメントで設定された制限を超えると、Kubernetesはクラスター上の他のアプリケーションを保護するためにPodを強制終了して再起動します。

もう1つのシナリオは、ノードに十分なメモリまたはCPUがない場合です。その場合、クラスターはより多くのスペースがある別のノードにPodを再スケジュールしようとします。

それが失敗した場合、またはアプリケーションをデプロイするときに十分なスペースがない場合、クラスターはワークロード/デプロイメントをスケジュールモードにして、利用可能なノードのいずれかに制限に従ってPodをデプロイするのに十分なスペースができるまで待機します。

2. PHP/Apache デプロイメントの修正

ワークショップの質問

開始する前に、PHP/Apacheデプロイメントの現在の状態を確認しましょう。Alerts & Detectors で、どのディテクターが発火しましたか?この情報は他にどこで見つけることができますか?

PHP/Apache StatefulSetを修正するには、以下のコマンドを使用して ~/workshop/k3s/php-apache.yaml を編集し、CPUリソースを削減します:

vim ~/workshop/k3s/php-apache.yaml

リソースセクションを見つけて、CPU limitsを 1 に、CPU requestsを 0.5 に削減します:

resources:
  limits:
    cpu: "1"
    memory: "8Mi"
  requests:
    cpu: "0.5"
    memory: "4Mi"

変更を保存します(ヒント: Esc を押してから :wq! を入力して変更を保存します)。

次に、既存のStatefulSetを削除して再作成する必要があります。StatefulSetは不変(イミュータブル)であるため、既存のものを削除して新しい変更で再作成する必要があります。

kubectl delete statefulset php-apache -n apache

次に、変更をデプロイします:

kubectl apply -f ~/workshop/k3s/php-apache.yaml -n apache

3. 変更の検証

以下のコマンドを実行して、変更が適用されたことを確認できます:

kubectl describe statefulset php-apache -n apache

PodがSplunk Observability Cloudで実行中であることを確認します。

ワークショップの質問

Apache Web Servers ダッシュボードにデータが表示されていますか?

ヒント: フィルターと時間枠を使用してデータを絞り込むことを忘れないでください。

数分間、Apache web servers Navigatorダッシュボードを監視してください。

ワークショップの質問

Hosts reporting チャートでは何が起きていますか?

4. メモリの問題の修正

Apacheダッシュボードに戻ると、メトリクスが送信されなくなっていることに気付くでしょう。別のリソースの問題があり、今回はメモリ不足です。StatefulSetを編集して、以下に示す値にメモリを増やしましょう:

kubectl edit statefulset php-apache -n apache
resources:
  limits:
    cpu: "1"
    memory: 16Mi
  requests:
    cpu: 500m
    memory: 12Mi

変更を保存します。

ヒント

kubectl edit は内容を vi エディターで開きます。Esc を押してから :wq! を入力して変更を保存します。

StatefulSetは不変(イミュータブル)であるため、既存のPodを削除して、StatefulSetが新しい変更で再作成できるようにする必要があります。

kubectl delete pod php-apache-0 -n apache

以下のコマンドを実行して、変更が適用されたことを確認します:

kubectl describe statefulset php-apache -n apache