This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new cb2676845b Improve Kubernetes coordinator to only select ready OAP
Pods to build cluster (#10950)
cb2676845b is described below
commit cb2676845b4a47d6187cc82d440379666880d29d
Author: kezhenxu94 <[email protected]>
AuthorDate: Fri Jun 16 21:45:19 2023 +0800
Improve Kubernetes coordinator to only select ready OAP Pods to build
cluster (#10950)
---
.github/workflows/skywalking.yaml | 6 ++++++
docs/en/changes/changes.md | 1 +
.../cluster/plugin/kubernetes/KubernetesCoordinator.java | 7 +++++--
.../cluster/plugin/kubernetes/KubernetesCoordinatorTest.java | 3 +++
.../apache/skywalking/library/kubernetes/KubernetesPods.java | 10 ++++++++++
5 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/skywalking.yaml
b/.github/workflows/skywalking.yaml
index 2ab10625cd..e4f80444d6 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -792,6 +792,12 @@ jobs:
ALS_ANALYZER: ${{ matrix.analyzer }}
with:
e2e-file: $GITHUB_WORKSPACE/test/e2e-v2/cases/istio/als/e2e.yaml
+ - uses: actions/upload-artifact@v2
+ if: ${{ failure() }}
+ name: Upload Logs
+ with:
+ name: logs
+ path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
e2e-test-java-versions:
if: |
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 2f9d8aec62..aa76893093 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -8,6 +8,7 @@
* Add Neo4j component ID(112) language: Python.
* Add Istio ServiceEntry registry to resolve unknown IPs in ALS.
+* Improve Kubernetes coordinator to only select ready OAP Pods to build
cluster.
#### UI
diff --git
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
index f084ae96a0..cda5e40cd9 100644
---
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
+++
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
@@ -23,6 +23,7 @@ import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodStatus;
import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.library.kubernetes.KubernetesPods;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.cluster.ClusterCoordinator;
import org.apache.skywalking.oap.server.core.cluster.ClusterHealthStatus;
@@ -178,8 +179,10 @@ public class KubernetesCoordinator extends
ClusterCoordinator {
switch (event) {
case ADDED:
case MODIFIED:
- if
("Running".equalsIgnoreCase(pod.getStatus().getPhase())) {
-
this.remoteInstanceMap.put(remoteInstance.getAddress().toString(),
remoteInstance);
+ if (KubernetesPods.isReady(pod)) {
+
remoteInstanceMap.put(remoteInstance.getAddress().toString(), remoteInstance);
+ } else {
+
remoteInstanceMap.remove(remoteInstance.getAddress().toString());
}
break;
case DELETED:
diff --git
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
index 2f89a9186d..4e35e9e134 100644
---
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
+++
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinatorTest.java
@@ -20,6 +20,7 @@ package
org.apache.skywalking.oap.server.cluster.plugin.kubernetes;
import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.api.model.Pod;
+import io.fabric8.kubernetes.api.model.PodCondition;
import io.fabric8.kubernetes.api.model.PodStatus;
import lombok.Getter;
import org.apache.skywalking.oap.server.core.CoreModule;
@@ -327,6 +328,7 @@ public class KubernetesCoordinatorTest {
v1Pod.getStatus().setPhase("Running");
v1Pod.getMetadata().setUid(uid);
v1Pod.getStatus().setPodIP(ip);
+ v1Pod.getStatus().setConditions(List.of(new PodCondition("", "", "",
"", "True", "Ready")));
return v1Pod;
}
@@ -338,6 +340,7 @@ public class KubernetesCoordinatorTest {
v1Pod.setStatus(new PodStatus());
v1Pod.getMetadata().setUid(SELF_UID + i);
v1Pod.getStatus().setPodIP(LOCAL_HOST);
+ v1Pod.getStatus().setConditions(List.of(new PodCondition("", "",
"", "", "True", "Ready")));
pods.add(v1Pod);
}
return pods;
diff --git
a/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
b/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
index ea82445de6..2da878c77c 100644
---
a/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
+++
b/oap-server/server-library/library-kubernetes-support/src/main/java/org/apache/skywalking/library/kubernetes/KubernetesPods.java
@@ -72,6 +72,16 @@ public enum KubernetesPods {
});
}
+ public static boolean isReady(Pod pod) {
+ return "Running".equalsIgnoreCase(pod.getStatus().getPhase()) &&
+ pod.getStatus()
+ .getConditions()
+ .stream()
+ .anyMatch(condition ->
+ "Ready".equalsIgnoreCase(condition.getType()) &&
+ "True".equalsIgnoreCase(condition.getStatus()));
+ }
+
@SneakyThrows
public Optional<Pod> findByIP(final String ip) {
return podByIP.get(ip);