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
Questions
Answers
Jenkins-X
GitOps
Demos
Features + Roadmap
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
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 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: 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://jenkinsx.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