jx create cluster gke
Gerd 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
I am really sorry,
I don’t have those nice
black/white/red stickers
But only these
Get them after the show
Recap: Kubernetes
The Promise!
The Question(s)!!
The Answer(s)!!!
Jenkins-X
GitOps
Demos incl. The Developer Experience!!!!
Features + Roadmap → JX going Serverless!!!!!
Nodes
Pods
Services
Overlay Networks
Ingresses
Configmaps + Secrets
Volumes
Custom Ressource Definitions (CRDs)
JX is all about Automation
JX is (only) a command line tool
Set up k8s
Set up Jenkins
Set up Everything
Tools
Repositories
Processes → Gitops
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 gke
or
jx install cluster gke
Google 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/Automatic)
To Production (on Demand/Manual)
To Preview (on PR/Branch)
To more environments if required (LuP, UAT, …)
jx create spring
or
# 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.1
And 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 production
jx sync
jx create devpod --reuse --sync
# Then in the remote shell
cd $WORK_DIR
mvn spring-boot:run
jx 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 compile
DemoController.java
import 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:xxx
Client: OSX + Linux, Windows: In Progress
Dev + Build + Deployment: CLI, DevPod, Preview/Pull-Request → GitOps
k8s providers
Working: GCP/GKE, AWS/EKS, Azure, MiniShift/MiniKube, OpenShift, Pivotal KS
Planned: IBM Cloud, Digital Ocean, Oracle
Tools: Helm, Skaffold, Prow, LetsEncrypt
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
Bitbucket Cloud
In Progress:
Gitea
Bitbucket Server
Gitlab
Working: Go, JVM/Maven, JVM/Gradle, NPM, Rust
In Progress: Python
Planned: Kubeless, Serverless, Swift, .Net
Working: Prometheus, Gitea, Anchore, Theia IDE
Planned: Cloud9, Eclipse Che, SonarQube
Prow: k8s reliable WebHook handler
Scalable / High Available
Configuration stored in Git(hub)
Knative: k8s going serverless
CLI based setup: k8s, 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 (Including many Demos and Videos)
https://medium.com/@jdrawlings/serverless-jenkins-with-jenkins-x-9134cbfe6870 (Serverless Jenkins-X)
https://github.com/jenkins-x (Source)
Twitter: @JenkinsX
k8s-Slack: https://kubernetes.slack.com (#jenkins-x-dev + #jenkins-x-user)
Google Group (JenkinsCI-Users)
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