=== a7 1 ① 노드와 파드를 넓게 본다 ===
NAME       STATUS   ROLES           AGE     VERSION
kc-lab-1   Ready    control-plane   4h34m   v1.36.4+k3s1
kc-lab-2   Ready    <none>          4h33m   v1.36.4+k3s1
NAME                           READY   STATUS    RESTARTS   AGE    IP           NODE       NOMINATED NODE   READINESS GATES
bff-5d97897676-nmlqs           1/1     Running   0          155m   10.42.0.22   kc-lab-1   <none>           <none>
bff-5d97897676-zvfhp           1/1     Running   0          155m   10.42.1.51   kc-lab-2   <none>           <none>
keycloak-0                     1/1     Running   0          126m   10.42.1.64   kc-lab-2   <none>           <none>
keycloak-1                     1/1     Running   0          126m   10.42.0.29   kc-lab-1   <none>           <none>
oauth2-proxy-d9b587458-7x9jt   1/1     Running   0          60m    10.42.1.78   kc-lab-2   <none>           <none>
oauth2-proxy-d9b587458-njxdw   1/1     Running   0          60m    10.42.1.79   kc-lab-2   <none>           <none>
postgres-7b474b88c8-48lrr      1/1     Running   0          165m   10.42.1.46   kc-lab-2   <none>           <none>
redis-f94bc6dbf-s674z          1/1     Running   0          128m   10.42.1.63   kc-lab-2   <none>           <none>
=== a7 1 ② IP 를 변수에 담는다 ===
10.42.1.64 10.42.0.29
=== a7 2 컨테이너 args 를 그대로 찍는다 ===
["start"]
=== a7 3 온라인 세션과 offline token 을 나눠 센다 ===
 offline_flag | count 
--------------+-------
 0            |   143
(1 row)

=== a7 4 ① 탐침을 띄우고 Ready 를 기다린다 ===
pod/a7-probe created
pod/a7-probe condition met
=== a7 4 ② 비밀번호의 길이만 센다 ===
19
=== a7 4 ③ 탐침 안에 값이 들어갔는지 본다 ===
K0=10.42.1.64 K1=10.42.0.29 PW길이=19
=== a7 5 ② 토큰을 파드 안 파일에 담고 길이를 찍는다 ===
rt 612 bytes
=== a7 5 ③ 반대 노드에서 그 토큰으로 갱신한다 ===
200
=== a7 6 빌드 기능 목록에서 이름을 찾는다 ===
                       persistent-user-sessions[:v1]
                       persistent-user-sessions
exit=0
=== a7 7 온라인·오프라인 세션 행을 전부 지운다 ===
DELETE 144
=== a7 8 파일 대신 patch 로 바꾸는 형태 ===
statefulset.apps/keycloak patched
=== a7 8 ③ 전환 시각을 남기고 롤아웃을 기다린다 ===
18:02:41 전환
Waiting for partitioned roll out to finish: 0 out of 2 new pods have been updated...
Waiting for 1 pods to be ready...
Waiting for 1 pods to be ready...
Waiting for 1 pods to be ready...
Waiting for partitioned roll out to finish: 1 out of 2 new pods have been updated...
Waiting for 1 pods to be ready...
Waiting for 1 pods to be ready...
Waiting for 1 pods to be ready...
partitioned roll out complete: 2 new pods have been updated...
exit=0
18:03:47 롤아웃 끝
=== a7 9 args 와 파드 나이를 함께 본다 ===
["start","--features-disabled=persistent-user-sessions"]
keycloak-0                     1/1     Running   0          31s     10.42.1.82   kc-lab-2   <none>           <none>
keycloak-1                     1/1     Running   0          64s     10.42.0.37   kc-lab-1   <none>           <none>
=== a7 9 ① 롤아웃 뒤 IP 를 다시 잡는다 ===
10.42.1.82 10.42.0.37
=== a7 9 ② 탐침을 지우고 새 IP 로 다시 띄운다 ===
pod "a7-probe" deleted from keycloak-lab namespace
pod/a7-probe created
pod/a7-probe condition met
=== a7 10 ① 한쪽 노드에만 다섯 번 로그인한다 ===
200 200 200 200 200 
=== a7 10 ② 같은 질의로 DB 행을 다시 센다 ===
 offline_flag | count 
--------------+-------
(0 rows)

=== a7 11 ① 한 줄짜리 JSON 을 통째로 본다 ===
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"users","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"sessions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"82"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"clientSessions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"82"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"authorization","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"offlineSessions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"realmRevisions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"7"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"authenticationSessions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"userRevisions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"keys","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"work","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"realms","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"7"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"offlineClientSessions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"actionTokens","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"1"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"authorizationRevisions","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"loginFailures","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"crl","cache_manager":"keycloak","exported_node":"keycloak-1-47642","instance":"10.42.0.37:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"users","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"work","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"1"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"loginFailures","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"clientSessions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"62"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"actionTokens","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"offlineClientSessions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"authenticationSessions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"keys","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"crl","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"authorizationRevisions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"offlineSessions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"sessions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"62"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"authorization","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"realmRevisions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"7"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"realms","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"7"]},{"metric":{"__name__":"vendor_statistics_approximate_entries_unique","cache":"userRevisions","cache_manager":"keycloak","exported_node":"keycloak-0-23770","instance":"10.42.1.82:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789635775.118,"0"]}]}}
=== a7 11 ② 캐시 이름과 파드와 값만 세로로 늘어놓는다 ===
"cache":"users"
"pod":"keycloak-1"}
"0"]}
"cache":"sessions"
"pod":"keycloak-1"}
"82"]}
"cache":"clientSessions"
"pod":"keycloak-1"}
"82"]}
"cache":"authorization"
"pod":"keycloak-1"}
"0"]}
"cache":"offlineSessions"
"pod":"keycloak-1"}
"0"]}
"cache":"realmRevisions"
"pod":"keycloak-1"}
"7"]}
"cache":"authenticationSessions"
"pod":"keycloak-1"}
"0"]}
"cache":"userRevisions"
"pod":"keycloak-1"}
"0"]}
"cache":"keys"
"pod":"keycloak-1"}
"0"]}
"cache":"work"
"pod":"keycloak-1"}
"0"]}
"cache":"realms"
"pod":"keycloak-1"}
"7"]}
"cache":"offlineClientSessions"
"pod":"keycloak-1"}
"0"]}
"cache":"actionTokens"
"pod":"keycloak-1"}
"1"]}
"cache":"authorizationRevisions"
"pod":"keycloak-1"}
"0"]}
"cache":"loginFailures"
"pod":"keycloak-1"}
"0"]}
"cache":"crl"
"pod":"keycloak-1"}
"0"]}
"cache":"users"
"pod":"keycloak-0"}
"0"]}
"cache":"work"
"pod":"keycloak-0"}
"1"]}
"cache":"loginFailures"
"pod":"keycloak-0"}
"0"]}
"cache":"clientSessions"
"pod":"keycloak-0"}
"62"]}
"cache":"actionTokens"
"pod":"keycloak-0"}
"0"]}
"cache":"offlineClientSessions"
"pod":"keycloak-0"}
"0"]}
"cache":"authenticationSessions"
"pod":"keycloak-0"}
"0"]}
"cache":"keys"
"pod":"keycloak-0"}
"0"]}
"cache":"crl"
"pod":"keycloak-0"}
"0"]}
"cache":"authorizationRevisions"
"pod":"keycloak-0"}
"0"]}
"cache":"offlineSessions"
"pod":"keycloak-0"}
"0"]}
"cache":"sessions"
"pod":"keycloak-0"}
"62"]}
"cache":"authorization"
"pod":"keycloak-0"}
"0"]}
"cache":"realmRevisions"
"pod":"keycloak-0"}
"7"]}
"cache":"realms"
"pod":"keycloak-0"}
"7"]}
"cache":"userRevisions"
"pod":"keycloak-0"}
"0"]}]}}
exit=0
