jx create cluster gkeGerd Aschemann
Gerd Aschemann
Twitter: @GerdAschemann
Freelancer: Java, Groovy, Enterprise, CRM, CI/CD, Architecture, DDD, …
Co-Organizer:
JUG Darmstadt
Javaland Conference
Open Source Conference Planner DukeCon
Recap: Kubernetes
Questions
Answers
Jenkins-X
GitOps
Demos
Features + Roadmap
Nodes
Pods
Services
Overlay Networks
Ingresses
Configmaps + Secrets
Volumes
Custom Ressource Definitions (CRDs)

How to write the pom.xml?
How to deploy the build artifact to the repository?
How to get the artifact to k8s?
How to set up a Maven repository?
How to write the Dockerfile?
Or use Maven, Skaffold, Jib, …???
How to deploy Docker image to the registry?
How to get the image to k8s?
How to set up a Docker registry?
How to write the deployment configuration?
Deployment YAML?
Service YAML?
Ingress???
ConfigMap + Secrets?
…
→ Helm Chart(s)
Helm is the Homebrew of K8S
How to set up Chart repository?
How to set up Kubernetes?
How to set up Integration or Production?
How to cope with
multiple (interdependent) applications?
different configurations?
other infrastructure (DBs, Messaging, UIs, …)?
multiple Kubernetes clusters?
What is the driving entity?

Github (External): Source Code Management
Nexus (in K8S): Maven Repository
Docker Registry (in K8S): Docker Images
Chartmuseum (in K8S): Deployment Configurations
| JX is an opinionated command line tool! |
jx create cluster gkeor
jx install cluster gkeGoogle Kubernetes Engine (GKE)
local (Docker) machine: Minikube / Minishift
Amazon: Minikube, AWS native, Elastic Kubernetes Service (EKS)
Azure Kubernetes Service (AKS)
Oracle Kubernetes Environment (OKE)
OpenShift?
On Premise?

Build + Deploy
Combine
Infrastructure as Code
+ (Opinionated) Deployment Workflow
Promote
To Staging (Default)
To Production (on Demand)
To more test environments if required (LuP, UAT, …)
To Preview (on PR/Branch)
jx create springor
# cd $dirWithApp
jx import| Checkout Spring Initializr: https://start.spring.io/ |
Change to jx-staging environment automatically merged as PR:
diff --git a/env/requirements.yaml b/env/requirements.yaml
@@ -6,9 +6,12 @@
dependencies:
...
name: exposecontroller
version: 2.3.58
repository: https://chartmuseum.build.cd.jenkins-x.io
alias: cleanup
+- name: jx-demo-180906-1131
+ repository: http://jenkins-x-chartmuseum:8080
+ version: 0.0.1And thereby promoted as new application in the env.

Promote deployments through opinionated workflow
Describe formally (e.g., Helm chart)
Single application
Environment composition
Cover application as well as configuration
File change request as pull request
Automatically merge (including tests) and roll out
Monitoring + Synchronisation of state
Roll back on demand
jx promote --version 0.0.1 --env productionjx syncjx create devpod --reuse --sync
# Then in the remote shell
cd $WORK_DIR
mvn spring-boot:runjx get devpod→ ascheman-maven maven 1h39m34s Ready
kubectl port-forward ascheman-maven 8080 # or any other POD name
# Then locally
curl localhost:8080/actuator/health→ {"status":"UP"}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>Restart mvn spring-boot:run
Then Open 2nd rsh and let Maven compile → Reload of Java code
jx rsh -d
# Then in the remote shell
cd $WORK_DIR
mvn compileDemoController.javaimport org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/hello")
public String getGreeting() {
return "World";
}
}skaffold)jx rsh -d
# Then in the remote shell
cd $WORK_DIR
VERSION=xxx skaffold build→
Starting build...
Building [changeme]...
Sending build context to Docker daemon 17.55MB
Step 1/8 : FROM openjdk:8-jdk-slim
...
Build complete in 416.607605ms
changeme -> 10.31.249.194:5000/ascheman-jx/jx-demo-180811-1200:xxxClient: OSX + Linux, Windows: Planned
Dev + Build + Deployment: CLI, DevPod, Preview/Pull-Request → GitOps
Providers: GCP/GKE, AWS/EKS, Azure, IBM Cloud, MiniShift/MiniKube, OpenShift, …
Tools: Helm, Skaffold, Prow, Argo, …
Repositories: Chart Museum, Docker Registry, Nexus, Artifactory (Planned)
Issue Trackers: Github/GH Enterprise, Jira, Gitea (In Progress)
Multi-Cluster (In Progress)
Istio Canaries (In Progress)
Working: Github/Github Enterprise
In Progress:
Gitea
Bitbucket Server/Cloud
Gitlab
Working: Go, Maven, Gradle, NPM, Rust
In Progress: Python
Planned: Kubeless, Serverless, Swift, .Net
Working: Prometheus, Gitea, Anchore
Planned: Cloud9, Eclipse Che, SonarQube

CLI based setup: Jenkins, Nexus, Docker Registry, Chartmuseum
Misc. k8s providers
Fast evolving (Features, Repositories, Addons)
Strong support for GitOps
Open source/Community
Production ready?
Jenkins-X
GitOps
https://jenkins-x.io (Many Demos and Videos)
Twitter: @JenkinsX
k8s-Slack: https://kubernetes.slack.com (#jenkins-x-dev + #jenkins-x-user)
Google Groups
GitOps: A Path to More Self-service IT (https://queue.acm.org/detail.cfm?id=3237207)
https://www.weave.works/technologies/gitops-frequently-asked-questions/
https://www.weave.works/blog/how-to-correctly-handle-db-schemas-during-kubernetes-rollouts
k8s-Slack: https://kubernetes.slack.com (#helm-users + #gitops)
Argo CD: https://github.com/argoproj/argo-cd