概要
このドキュメントでは、サブスクライバマイクロサービスインフラストラクチャ(SMI)のCommon Execution Environment(CEE)デバイスプール(POD)(pgpool)の再起動の問題に対する回避策を実装する方法について説明します。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- Cisco SMI CEE(Ultra Cloud Core CEE)
- 5G Cloud Native Deployment Platform(CNDP)またはSMIベアメタル(BM)アーキテクチャ
- ドッカーとクベルネテス
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
- SMI 2020.02.2.35
- クベルネテスv1.21.0
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
SMIとは
Cisco SMIは、Cisco Mobility、Cable、およびBroadband Network Gateway(BNG)ビジネスユニットのマイクロサービスベースのアプリケーションを可能にするクラウドテクノロジーと標準の階層型スタックで、これらはすべて同様の加入者管理機能とデータストア要件を持ちます。
その属性は次のとおりです。
- 上位から下位に展開し、現在の顧客のクラウドインフラストラクチャにも対応するレイヤクラウドスタック(テクノロジーおよび標準)。
- CEEは、アプリケーション以外の機能(データストレージ、導入、設定、テレメトリ、アラーム)のすべてのアプリケーションで共有されます。 これにより、すべての顧客のタッチポイントと統合ポイントに一貫したインタラクションとエクスペリエンスが提供されます。
- アプリケーションとCEEは、マイクロサービスコンテナに導入され、インテリジェントサービスメッシュに接続されます。
- 自動化を可能にするために、展開、設定、および管理用の公開API。
SMI CEEとは何ですか。
CEEは、SMIに導入されているモバイルおよびケーブルアプリケーションを監視するために開発されたソフトウェアソリューションです。CEEは、エンジニアがデバッグおよびトラブルシューティングを行うために、アプリケーションから情報(主要なメトリック)を一元的に取得します。
CEEは、すべてのアプリケーションにインストールされる共通のツールセットです。専用のオペレーションセンターが付属しており、モニタツールを管理するためのユーザインターフェイス(CLI)とAPIを提供します。各クラスタで使用できるCEEは1つだけです。
CEE PODとは
PODは、Kubernetesクラスタで実行されるプロセスです。PODは、コンテナと呼ばれる細かい単位をカプセル化します。PODには1つまたは複数のコンテナが含まれます。
Kubernetesは、1つのノードに1つまたは複数のPODを導入し、物理マシンまたは仮想マシンにすることができます。各PODには、内部IPアドレスとポート空間を持つ個別のIDがあります。ただし、POD内のコンテナは、ストレージとネットワークリソースを共有できます。CEEには、固有の機能を持つ多数のPODがあります。Pgpoolとpostgressは、複数のCEE PODの間にあります。
pgpool PODとは何ですか。
Pgpoolは、接続、レプリケーション、ロードバランスなどに使用するPostgresリソースプールを管理します。Pgpoolは、PostgreSQLサーバとPostgreSQLデータベースの間で動作するミドルウェアです。
Postgres PODとは何ですか。
Postgresは、アラートとGrafanaダッシュボードを保存するための冗長性を備えたStructured Query Language(SQL)データベースをサポートしています。
問題
Postgresql PODが問題なく動作している間、pgpool PODは定期的に再起動します。
アラートを表示するには、次のコマンドを入力します。
show alerts active summary | include "POD_|k8s-pod-"
CEEからのアラート例を次に示します。
[pod-name-smf-data/podname] cee# show alerts active summary | include "POD_|k8s-pod-"
k8s-pod-crashing-loop 1d9d2b113073 critical 12-15T21:47:39 pod-name-smf-data-mas
Pod cee-podname/grafana-65cbdb9846-krgfq (grafana) is restarting 1.03 times / 5 minutes.
POD_Restarted 04d42efb81de major 12-15T21:45:44 pgpool-67f48f6565-vjt Container=
k8s_pgpool_pgpool-67f48f6565-vjttd_cee-podname_a9f68607-eac4-40a9-86ef-db8176e0a22a_1474 of pod= pgpool-...
POD_Restarted f7657a0505c2 major 12-15T21:45:44 postgres-0 Container=
k8s_postgres_postgres-0_cee-podname_59e0a768-6870-4550-8db3-32e2ab047ce2_1385 of pod= postgres-0 in name...
POD_Restarted 6e57ae945677 major 12-15T21:45:44 alert-logger-d96644d4 Container=
k8s_alert-logger_alert-logger-d96644d4-dsc8h_cee-podname_2143c464-068a-418e-b5dd-ce1075b9360e_2421 of po...
k8s-pod-crashing-loop 5b8e6a207aad critical 12-15T21:45:09 pod-name-smf-data-mas Pod
cee-podname/pgpool-67f48f6565-vjttd (pgpool) is restarting 1.03 times / 5 minutes.
POD_Down 45a6b9bf73dc major 12-15T20:30:44 pgpool-67f48f6565-qbw Pod= pgpool-67f48f6565-qbw52 in namespace=
cee-podname is DOWN for more than 15min
POD_Down 4857f398a0ca major 12-15T16:40:44 pgpool-67f48f6565-vjt Pod= pgpool-67f48f6565-vjttd in namespace=
cee-podname is DOWN for more than 15min
k8s-pod-not-ready fc65254c2639 critical 12-11T21:07:29 pgpool-67f48f6565-qbw Pod
cee-podname/pgpool-67f48f6565-qbw52 has been in a non-ready state for longer than 1 minute.
k8s-pod-not-ready 008b859e7333 critical 12-11T16:35:49 pgpool-67f48f6565-vjt Pod
cee-podname/pgpool-67f48f6565-vjttd has been in a non-ready state for longer than 1 minute.
トラブルシュート
Kubernetesマスターから、次のコマンドを入力します。
kubectl describe pods -n
postgres-0"
PODの説明の出力例を次に示します。出力は省略されます。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 14m default-scheduler Successfully assigned cee-pod-name-l1/postgres-2
to pod-name-master-3
Normal Pulling 14m kubelet Pulling image "docker.10.192.x.x.nip.io/cee-2020.02.2.i38/
smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d"
Normal Pulled 13m kubelet Successfully pulled image "docker.10.192.x.x.nip.io/cee-2020.02.2.i38/
smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d" in 29.048094722s
Warning Unhealthy 12m kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:09:48]
pod is not ready
Warning Unhealthy 10m kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:11:18]
pod is not ready
Warning Unhealthy 10m kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:11:48]
pod is not ready
Warning Unhealthy 9m49s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:12:18]
pod is not ready
Warning Unhealthy 9m19s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:12:48]
pod is not ready
Warning Unhealthy 8m49s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:13:18]
pod is not ready
Warning Unhealthy 8m19s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:13:48]
pod is not ready
Warning Unhealthy 7m49s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:14:18]
pod is not ready
Warning Unhealthy 7m19s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:14:48]
pod is not ready
Warning BackOff 6m44s kubelet Back-off restarting failed container
または
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 13m default-scheduler 0/5 nodes are available: 2 node(s)
didn't match Pod's node affinity/selector, 3 node(s) didn't find available persistent
volumes to bind.
Normal Scheduled 13m default-scheduler Successfully assigned cee-pod-name-l1/postgres-0
to pod-name-master-1
Warning FailedScheduling 13m default-scheduler 0/5 nodes are available: 2 node(s)
didn't match Pod's node affinity/selector, 3 node(s) didn't find available
persistent volumes to bind.
Normal Pulling 13m kubelet Pulling image "docker.10.192.x.x.nip.io/cee-2020.02.2.i38/
smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d"
Normal Pulled 12m kubelet Successfully pulled image "docker.10.192.x.x.nip.io/
cee-2020.02.2.i38/smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d"
in 43.011763302s
Warning Unhealthy 7m20s kubelet Liveness probe failed: [bin][h][imm] >>>
[2021-10-11 18:09:16] My name is pg-postgres-0
回避策
注:この手順では、アプリケーションのダウンタイムは発生しません。
CEEのシャットダウン
CEEをシャットダウンするには、CEEから次のコマンドを入力します。
[pod-name-smf-data/podname] cee#
[pod-name-smf-data/podname] cee# config terminal
Entering configuration mode terminal
[pod-name-smf-data/podname] cee(config)# system mode shutdown
[pod-name-smf-data/podname] cee(config)# commit
Commit complete.
システムが100 %に達するのを待ちます
フォルダからコンテンツを削除
master-vipから、マスターVMのそれぞれにSSHで接続し、次のフォルダの内容を削除します。/data/cee-podname/data-postgres-[0-2]。
Master 1
cloud-user@pod-name-smf-data-master-1:~$ sudo rm -rf /data/cee-podname/data-postgres-0
Master 2
cloud-user@pod-name-smf-data-master-2:~$ sudo rm -rf /data/cee-podname/data-postgres-1
Master 3
cloud-user@pod-name-smf-data-master-3:~$ sudo rm -rf /data/cee-podname/data-postgres-2
CEEの復元
CEEを復元するには、CEEから次のコマンドを入力します。
[pod-name-smf-data/podname] cee#
[pod-name-smf-data/podname] cee# config terminal
Entering configuration mode terminal
[pod-name-smf-data/podname] cee(config)# system mode running
[pod-name-smf-data/podname] cee(config)# commit
Commit complete.
システムが100 %になるまで待ちます。
チェック後
マスターからKubernetesを確認します。
cloud-user@pod-name-smf-data-master-1:~$ kubectl get pods -A -o wide | egrep 'postgres|pgpool'
All pods should display up and running without any restarts
CEEからアラートがクリアされることを確認する
CEEからアラートがクリアされたことを確認するには、次のコマンドを入力します。
show alerts active summary | include "POD_|k8s-pod-"
また、次のコマンドを入力して、1つのマスターDBと2つのスタンバイDBがあることを確認できます。
echo "0----------------------------------";kubectl
exec -it postgres-0 -n $(kubectl get pods -A | grep postgres | awk '{print $1}' | head -1)
-- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "1--------------------------
--------";kubectl exec -it postgres-1 -n $(kubectl get pods -A | grep postgres | awk '{print $1}'
| head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "2---------------
-------------------"; kubectl exec -it postgres-2 -n $(kubectl get pods -A | grep postgres |
awk '{print $1}' | head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;
予想される出力例を次に示します。
cloud-user@pod-name-smf-data-master-1:~$ echo "0----------------------------------";kubectl
exec -it postgres-0 -n $(kubectl get pods -A | grep postgres | awk '{print $1}' | head -1)
-- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "1--------------------------
--------";kubectl exec -it postgres-1 -n $(kubectl get pods -A | grep postgres | awk '{print $1}'
| head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "2---------------
-------------------"; kubectl exec -it postgres-2 -n $(kubectl get pods -A | grep postgres |
awk '{print $1}' | head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;
0----------------------------------
[bin][h][imm] >>> [2021-12-15 22:05:18] My name is pg-postgres-0
[bin][h][imm] >>> My state is good.
[bin][h][imm] >>> I'm not a master, nothing else to do!
1----------------------------------
[bin][h][imm] >>> [2021-12-15 22:05:19] My name is pg-postgres-1
[bin][h][imm] >>> My state is good.
[bin][h][imm] >>> I think I'm master. Will ask my neighbors if they agree.
[bin][h][imm] >>> Will ask nodes from PARTNER_NODES list
[bin][h][imm] >>> Checking node pg-postgres-0
[bin][h][imm] >>>>>>>>> Count of references to potential master pg-postgres-1 is 1 now
[bin][h][imm] >>> Checking node pg-postgres-1
[bin][h][imm] >>> Checking node pg-postgres-2
[bin][h][imm] >>>>>>>>> Count of references to potential master pg-postgres-1 is 2 now
[bin][h][imm] >>> Potential masters got references:
[bin][h][imm] >>>>>> Node: pg-postgres-1, references: 2
[bin][h][imm] >>> I have 2/2 incoming reference[s]!
[bin][h][imm] >>>> 2 - Does anyone have more?
[bin][h][imm] >>> Yahoo! I'm real master...so I think!
2----------------------------------
[bin][h][imm] >>> [2021-12-15 22:05:21] My name is pg-postgres-2
[bin][h][imm] >>> My state is good.
[bin][h][imm] >>> I'm not a master, nothing else to do!