Slide 1

Slide 1 text

JCConf Taiwan 2021 Access Kubernetes API in Java Matt Ho Access Kubernetes API in Java

Slide 2

Slide 2 text

Hi, I'm Matt https://github.com/shihyuho [email protected] @SoftLeader Access Kubernetes API in Java

Slide 3

Slide 3 text

Requirements Some experience with Java and Spring. Basic understanding of Kubernetes. YAML language. Access Kubernetes API in Java

Slide 4

Slide 4 text

你爲什麼會需要去跟 Kubernetes 互動? Access Kubernetes API in Java

Slide 5

Slide 5 text

Kubernetes Architecture Access Kubernetes API in Java

Slide 6

Slide 6 text

Kubernetes Architecture Access Kubernetes API in Java

Slide 7

Slide 7 text

環境準備 Local Kubernetes cluster 推薦: docker + minikube # Start the cluster $ minikube start # Configure environment to use minikube’s Docker daemon $ eval $(minikube docker-env) # Halt the cluster $ minikube stop Access Kubernetes API in Java

Slide 8

Slide 8 text

環境準備 A simple web app w/ Spring Boot $ curl https://start.spring.io/starter.zip \ -d dependencies=web,lombok,devtools \ -d bootVersion=2.5.7 \ -o demo.zip Access Kubernetes API in Java

Slide 9

Slide 9 text

環境準備 Add the following dependency to your pom.xml file: io.fabric8 kubernetes-client 5.10.1 org.springdoc springdoc-openapi-ui 1.5.12 Access Kubernetes API in Java

Slide 10

Slide 10 text

Kubernetes Java Client Officially-supported - kubernetes-client/java Community-maintained - fabric8io/kubernetes-client Access Kubernetes API in Java

Slide 11

Slide 11 text

起手式 try (var client = new DefaultKubernetesClient()) { client.{apiGroup}.{apiVersion}.{resource}.{verb}... } Access Kubernetes API in Java

Slide 12

Slide 12 text

kubectl get pod -n default kubectl get service -A kubectl get deploy -l my=label kubectl get cronjob myjob Access Kubernetes API in Java

Slide 13

Slide 13 text

A Hello Pod apiVersion: v1 kind: Pod metadata: name: hello spec: containers: - name: hello image: busybox imagePullPolicy: IfNotPresent command: ["sh", "-c", "echo Hello JCConf Taiwan; sleep 2"] restartPolicy: Never Access Kubernetes API in Java

Slide 14

Slide 14 text

Builder Pattern new {Resource}Builder() .withNew{FieldObject} .with{Field}(...) .with{Field}(...) .end{FieldObject} .build(); Access Kubernetes API in Java

Slide 15

Slide 15 text

Packing Image mvn compile com.google.cloud.tools:jib-maven-plugin:3.1.4:dockerBuild -Djib.to.image=demo:1.0.0 # mvn spring-boot:build-image -Dspring-boot.build-image.imageName=demo:1.0.0 Access Kubernetes API in Java

Slide 16

Slide 16 text

Deploy apiVersion: apps/v1 kind: Deployment metadata: name: demo spec: selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - name: demo image: demo:1.0.0 Access Kubernetes API in Java

Slide 17

Slide 17 text

Kubernetes RBAC Access Kubernetes API in Java

Slide 18

Slide 18 text

Kubernetes RBAC Access Kubernetes API in Java

Slide 19

Slide 19 text

Kubernetes RBAC Access Kubernetes API in Java

Slide 20

Slide 20 text

apiVersion: v1 kind: ServiceAccount metadata: name: demo namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: demo rules: - apiGroups: [ "" ] resources: [ "pods" ] verbs: [ "get", "list", "watch", "create", "update", "patch", "delete" ] - apiGroups: [ "" ] resources: [ "events" ] verbs: [ "list" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: demo roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: demo subjects: - kind: ServiceAccount name: demo namespace: default Access Kubernetes API in Java

Slide 21

Slide 21 text

Recap Basic understanding of Kubernetes API. How to access Kubernetes API in Java. How to configure access control to the app. Demo code. Access Kubernetes API in Java

Slide 22

Slide 22 text

Thank you Access Kubernetes API in Java