=== a7 1 ① 노드와 파드를 넓게 본다 === NAME STATUS ROLES AGE VERSION kc-lab-1 Ready control-plane 4h34m v1.36.4+k3s1 kc-lab-2 Ready 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 bff-5d97897676-zvfhp 1/1 Running 0 155m 10.42.1.51 kc-lab-2 keycloak-0 1/1 Running 0 126m 10.42.1.64 kc-lab-2 keycloak-1 1/1 Running 0 126m 10.42.0.29 kc-lab-1 oauth2-proxy-d9b587458-7x9jt 1/1 Running 0 60m 10.42.1.78 kc-lab-2 oauth2-proxy-d9b587458-njxdw 1/1 Running 0 60m 10.42.1.79 kc-lab-2 postgres-7b474b88c8-48lrr 1/1 Running 0 165m 10.42.1.46 kc-lab-2 redis-f94bc6dbf-s674z 1/1 Running 0 128m 10.42.1.63 kc-lab-2 === 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 keycloak-1 1/1 Running 0 64s 10.42.0.37 kc-lab-1 === 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