Access Kubernetes API in Java
JCConf Taiwan 2021Access Kubernetes API in JavaMatt HoAccess Kubernetes API in Java
View Slide
Hi, I'm Matthttps://github.com/shihyuho[email protected]@SoftLeaderAccess Kubernetes API in Java
RequirementsSome experience with Java and Spring.Basic understanding of Kubernetes.YAML language.Access Kubernetes API in Java
你爲什麼會需要去跟 Kubernetes 互動?Access Kubernetes API in Java
KubernetesArchitectureAccess Kubernetes API in Java
環境準備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 stopAccess Kubernetes API in Java
環境準備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.zipAccess Kubernetes API in Java
環境準備Add the following dependency to your pom.xmlfile:io.fabric8kubernetes-client5.10.1org.springdocspringdoc-openapi-ui1.5.12Access Kubernetes API in Java
Kubernetes Java ClientOfficially-supported - kubernetes-client/javaCommunity-maintained - fabric8io/kubernetes-clientAccess Kubernetes API in Java
起手式try (var client = new DefaultKubernetesClient()) {client.{apiGroup}.{apiVersion}.{resource}.{verb}...}Access Kubernetes API in Java
kubectl get pod -n defaultkubectl get service -Akubectl get deploy -l my=labelkubectl get cronjob myjobAccess Kubernetes API in Java
A Hello PodapiVersion: v1kind: Podmetadata:name: hellospec:containers:- name: helloimage: busyboximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "echo Hello JCConf Taiwan; sleep 2"]restartPolicy: NeverAccess Kubernetes API in Java
Builder Patternnew {Resource}Builder().withNew{FieldObject}.with{Field}(...).with{Field}(...).end{FieldObject}.build();Access Kubernetes API in Java
Packing Imagemvn 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.0Access Kubernetes API in Java
DeployapiVersion: apps/v1kind: Deploymentmetadata:name: demospec:selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:containers:- name: demoimage: demo:1.0.0Access Kubernetes API in Java
KubernetesRBACAccess Kubernetes API in Java
apiVersion: v1kind: ServiceAccountmetadata:name: demonamespace: default---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:name: demorules:- apiGroups: [ "" ]resources: [ "pods" ]verbs: [ "get", "list", "watch", "create", "update", "patch", "delete" ]- apiGroups: [ "" ]resources: [ "events" ]verbs: [ "list" ]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: demoroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: demosubjects:- kind: ServiceAccountname: demonamespace: defaultAccess Kubernetes API in Java
RecapBasic understanding ofKubernetes API.How to access Kubernetes APIin Java.How to configure access controlto the app.Demo code.Access Kubernetes API in Java
Thank youAccess Kubernetes API in Java