[BAEL-4945] Using Namespaces and Selectors With the Kubernetes Java API (#10745)
* [BAEL-4863] Inicial code * [BAEL-4863] Article code * [BAEL-4945]
This commit is contained in:
		
							parent
							
								
									6e02759f10
								
							
						
					
					
						commit
						99213ea74c
					
				
							
								
								
									
										58
									
								
								kubernetes/k8s-intro/src/k8s/create-http-server.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								kubernetes/k8s-intro/src/k8s/create-http-server.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | |||||||
|  | apiVersion: v1 | ||||||
|  | kind: Namespace | ||||||
|  | metadata: | ||||||
|  |   name: ns1 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Namespace | ||||||
|  | metadata: | ||||||
|  |   name: ns2 | ||||||
|  | --- | ||||||
|  |   apiVersion: apps/v1 | ||||||
|  |   kind: Deployment | ||||||
|  |   metadata: | ||||||
|  |     name: httpd | ||||||
|  |     namespace: ns1 | ||||||
|  |     labels: | ||||||
|  |       app: httpd | ||||||
|  |       version: "1" | ||||||
|  |   spec: | ||||||
|  |     replicas: 3 | ||||||
|  |     selector: | ||||||
|  |       matchLabels: | ||||||
|  |         app: httpd | ||||||
|  |     template: | ||||||
|  |       metadata: | ||||||
|  |         labels: | ||||||
|  |           app: httpd | ||||||
|  |       spec: | ||||||
|  |         containers: | ||||||
|  |         - name: main | ||||||
|  |           image: httpd:alpine | ||||||
|  |           ports: | ||||||
|  |           - containerPort: 80 | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: httpd | ||||||
|  |   namespace: ns2 | ||||||
|  |   labels: | ||||||
|  |     app: httpd | ||||||
|  |     version: "2" | ||||||
|  |     foo: bar | ||||||
|  | spec: | ||||||
|  |   replicas: 3 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: httpd | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app: httpd | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |       - name: main | ||||||
|  |         image: httpd:alpine | ||||||
|  |         ports: | ||||||
|  |         - containerPort: 80 | ||||||
| @ -0,0 +1,68 @@ | |||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  */ | ||||||
|  | package com.baeldung.kubernetes.intro; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import java.util.concurrent.TimeUnit; | ||||||
|  | 
 | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | 
 | ||||||
|  | import io.kubernetes.client.openapi.ApiClient; | ||||||
|  | import io.kubernetes.client.openapi.apis.CoreV1Api; | ||||||
|  | import io.kubernetes.client.openapi.models.V1NodeList; | ||||||
|  | import io.kubernetes.client.openapi.models.V1PodList; | ||||||
|  | import io.kubernetes.client.util.Config; | ||||||
|  | import okhttp3.OkHttpClient; | ||||||
|  | import okhttp3.logging.HttpLoggingInterceptor; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author Philippe | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | public class ListPodsWithFieldSelectors { | ||||||
|  |      | ||||||
|  |     private static final Logger log = LoggerFactory.getLogger(ListPodsWithFieldSelectors.class); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @param args | ||||||
|  |      */ | ||||||
|  |     public static void main(String[] args) throws Exception { | ||||||
|  |          | ||||||
|  |         ApiClient client  = Config.defaultClient(); | ||||||
|  |         HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message)); | ||||||
|  |         interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); | ||||||
|  |         OkHttpClient newClient = client.getHttpClient() | ||||||
|  |           .newBuilder() | ||||||
|  |           .addInterceptor(interceptor) | ||||||
|  |           .readTimeout(0, TimeUnit.SECONDS) | ||||||
|  |           .build(); | ||||||
|  |          | ||||||
|  |         client.setHttpClient(newClient); | ||||||
|  |         CoreV1Api api = new CoreV1Api(client); | ||||||
|  |          | ||||||
|  |         String fs = createSelector(args); | ||||||
|  |         V1PodList items = api.listPodForAllNamespaces(null, null, fs, null, null, null, null, null, 10, false); | ||||||
|  |         items.getItems() | ||||||
|  |           .stream() | ||||||
|  |           .map((pod) -> pod.getMetadata().getName() ) | ||||||
|  |           .forEach((name) -> System.out.println("name=" + name)); | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private static String createSelector(String[] args) { | ||||||
|  | 
 | ||||||
|  |         StringBuilder b = new StringBuilder(); | ||||||
|  |         for( int i =  0 ; i < args.length; i++ ) { | ||||||
|  |             if( b.length() > 0 ) { | ||||||
|  |                 b.append(','); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             b.append(args[i]); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return b.toString(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,68 @@ | |||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  */ | ||||||
|  | package com.baeldung.kubernetes.intro; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import java.util.concurrent.TimeUnit; | ||||||
|  | 
 | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | 
 | ||||||
|  | import io.kubernetes.client.openapi.ApiClient; | ||||||
|  | import io.kubernetes.client.openapi.apis.CoreV1Api; | ||||||
|  | import io.kubernetes.client.openapi.models.V1NodeList; | ||||||
|  | import io.kubernetes.client.openapi.models.V1PodList; | ||||||
|  | import io.kubernetes.client.util.Config; | ||||||
|  | import okhttp3.OkHttpClient; | ||||||
|  | import okhttp3.logging.HttpLoggingInterceptor; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author Philippe | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | public class ListPodsWithLabelSelectors { | ||||||
|  |      | ||||||
|  |     private static final Logger log = LoggerFactory.getLogger(ListPodsWithLabelSelectors.class); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @param args | ||||||
|  |      */ | ||||||
|  |     public static void main(String[] args) throws Exception { | ||||||
|  |          | ||||||
|  |         ApiClient client  = Config.defaultClient(); | ||||||
|  |         HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message)); | ||||||
|  |         interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); | ||||||
|  |         OkHttpClient newClient = client.getHttpClient() | ||||||
|  |           .newBuilder() | ||||||
|  |           .addInterceptor(interceptor) | ||||||
|  |           .readTimeout(0, TimeUnit.SECONDS) | ||||||
|  |           .build(); | ||||||
|  |          | ||||||
|  |         client.setHttpClient(newClient); | ||||||
|  |         CoreV1Api api = new CoreV1Api(client); | ||||||
|  | 
 | ||||||
|  |         String selector = createSelector(args); | ||||||
|  |         V1PodList items = api.listPodForAllNamespaces(null, null, null, selector, null, null, null, null, 10, false); | ||||||
|  |         items.getItems() | ||||||
|  |           .stream() | ||||||
|  |           .map((pod) -> pod.getMetadata().getName() ) | ||||||
|  |           .forEach((name) -> System.out.println("name=" + name)); | ||||||
|  |          | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     private static String createSelector(String[] args) { | ||||||
|  | 
 | ||||||
|  |         StringBuilder b = new StringBuilder(); | ||||||
|  |         for( int i =  0 ; i < args.length; i++ ) { | ||||||
|  |             if( b.length() > 0 ) { | ||||||
|  |                 b.append(','); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             b.append(args[i]); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return b.toString(); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  | } | ||||||
| @ -0,0 +1,52 @@ | |||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  */ | ||||||
|  | package com.baeldung.kubernetes.intro; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import java.util.concurrent.TimeUnit; | ||||||
|  | 
 | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | 
 | ||||||
|  | import io.kubernetes.client.openapi.ApiClient; | ||||||
|  | import io.kubernetes.client.openapi.apis.CoreV1Api; | ||||||
|  | import io.kubernetes.client.openapi.models.V1NodeList; | ||||||
|  | import io.kubernetes.client.openapi.models.V1PodList; | ||||||
|  | import io.kubernetes.client.util.Config; | ||||||
|  | import okhttp3.OkHttpClient; | ||||||
|  | import okhttp3.logging.HttpLoggingInterceptor; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author Philippe | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | public class ListPodsWithNamespaces { | ||||||
|  |      | ||||||
|  |     private static final Logger log = LoggerFactory.getLogger(ListPodsWithNamespaces.class); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @param args | ||||||
|  |      */ | ||||||
|  |     public static void main(String[] args) throws Exception { | ||||||
|  |          | ||||||
|  |         ApiClient client  = Config.defaultClient(); | ||||||
|  |         HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message)); | ||||||
|  |         interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); | ||||||
|  |         OkHttpClient newClient = client.getHttpClient() | ||||||
|  |           .newBuilder() | ||||||
|  |           .addInterceptor(interceptor) | ||||||
|  |           .readTimeout(0, TimeUnit.SECONDS) | ||||||
|  |           .build(); | ||||||
|  |          | ||||||
|  |         client.setHttpClient(newClient); | ||||||
|  |         CoreV1Api api = new CoreV1Api(client); | ||||||
|  |         String namespace = "ns1"; | ||||||
|  |         V1PodList items = api.listNamespacedPod(namespace,null, null, null, null, null, null, null, null, 10, false); | ||||||
|  |         items.getItems() | ||||||
|  |           .stream() | ||||||
|  |           .map((pod) -> pod.getMetadata().getName() ) | ||||||
|  |           .forEach((name) -> System.out.println("name=" + name)); | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,27 @@ | |||||||
|  | package com.baeldung.kubernetes.intro; | ||||||
|  | 
 | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | 
 | ||||||
|  | class ListPodsWithFieldSelectorsLiveTest { | ||||||
|  |     @Test | ||||||
|  |     void givenEqualitySelector_whenListPodsWithFieldSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithFieldSelectors.main(new String[] { | ||||||
|  |             "metadata.namespace=ns1" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     void givenInequalitySelector_whenListPodsWithFieldSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithFieldSelectors.main(new String[] { | ||||||
|  |             "metadata.namespace!=ns1" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     void givenChainedSelector_whenListPodsWithFieldSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithFieldSelectors.main(new String[] { | ||||||
|  |             "metadata.namespace=ns1", | ||||||
|  |             "status.phase=Running" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,55 @@ | |||||||
|  | package com.baeldung.kubernetes.intro; | ||||||
|  | 
 | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | 
 | ||||||
|  | class ListPodsWithLabelSelectorsLiveTest { | ||||||
|  |     @Test | ||||||
|  |     void givenEqualitySelector_whenListPodsWithLabelSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithLabelSelectors.main(new String[] { | ||||||
|  |           "app=httpd" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     void givenInqualitySelector_whenListPodsWithLabelSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithLabelSelectors.main(new String[] { | ||||||
|  |           "app!=httpd" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     void givenInSetSelector_whenListPodsWithLabelSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithLabelSelectors.main(new String[] { | ||||||
|  |           "app in (httpd,test)" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     void givenNotInSetSelector_whenListPodsWithLabelSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithLabelSelectors.main(new String[] { | ||||||
|  |           "app notin (httpd)" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     void givenLabelPresentSelector_whenListPodsWithLabelSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithLabelSelectors.main(new String[] { | ||||||
|  |           "app" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     void givenLabelNotPresentSelector_whenListPodsWithLabelSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithLabelSelectors.main(new String[] { | ||||||
|  |           "!app" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     void givenChainedSelector_whenListPodsWithLabelSelectors_thenSuccess()  throws Exception { | ||||||
|  |         ListPodsWithLabelSelectors.main(new String[] { | ||||||
|  |           "app=httpd", | ||||||
|  |           "!foo" | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user