Slide 1

Slide 1 text

@k2r2bai 讓 Jenkins 老爺爺掌舵 帶領開發者航向美好新世界 Kubernetes Summit 2020

Slide 2

Slide 2 text

@k2r2bai About Me ⽩凱仁(Kyle Bai) • SRE at AMIS/MaiCoin. • AWS Container Hero. • Co-organizer of Cloud Native Taiwan User Group. • Interested in emerging technologies. • Top 3 Kubernetes contributor in Taiwan. https://k8s.devstats.cncf.io GitHub: kairen([email protected]) Blog: https://k2r2bai.com

Slide 3

Slide 3 text

@k2r2bai Kubernetes • Container orchestration. • Self-healing. • Horizontal scaling. • Service discovery and Load balancing. • Automated rollouts and rollbacks. • Secrets and conJguration management. • Storage orchestration. • ....

Slide 4

Slide 4 text

@k2r2bai Jenkins • An open-source tool with great community suppoL. • 1000+ plugins. • Easy to install. • It is built with Java and hence, it is poLable to all the major plaUorms. • Anything you can customize. • Declarative Pipeline(Groovy script). • The Jrst project to graduate in the CD Foundation. • ...

Slide 5

Slide 5 text

@k2r2bai Our services... Developer & Operator CEO/CTO/CxO

Slide 6

Slide 6 text

@k2r2bai Developers Git Repository Commit/PR

Slide 7

Slide 7 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Trigger build

Slide 8

Slide 8 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Checkout Code and Load JenkinsGles Trigger build

Slide 9

Slide 9 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin For unit test, building, deploy

Slide 10

Slide 10 text

@k2r2bai Jenkins plugin to run dynamic agents in a Kubernetes/Docker environment. The agent is essentially a pod. Can conJgure volumes, resources limit, namespaces … and more. h\ps://github.com/jenkinsci/kubernetes-plugin Runtime Agents Kubernetes Plugin

Slide 11

Slide 11 text

@k2r2bai Runtime Agents Kubernetes Plugin

Slide 12

Slide 12 text

@k2r2bai Jenkins Agent Pod jenkins-agent Docker dind Other Tools Runtime Pod Metadata and Spec Runtime Agents Kubernetes Plugin

Slide 13

Slide 13 text

@k2r2bai Runtime Agents Kubernetes Plugin Jenkins Base Image v1.13.0 v1.14.2 ... v2.3.0 v2.5.2 ...

Slide 14

Slide 14 text

@k2r2bai Runtime Agents Kubernetes Plugin Jenkins Base Image v1.13.0 v1.14.2 ... v2.3.0 v2.5.2 ... Use for deployment

Slide 15

Slide 15 text

@k2r2bai

Slide 16

Slide 16 text

@k2r2bai Runtime Agents Kubernetes Plugin How to save MONEY over time?

Slide 17

Slide 17 text

@k2r2bai Runtime Agents Kubernetes Plugin Auto Scaling Groups Managed By Cluster Autoscaler Watch and List pod 1. Pods are in a pending state Max: 6 Desired: 3 Min: 0 MaxSize: 6 MinSize: 0

Slide 18

Slide 18 text

@k2r2bai Runtime Agents Kubernetes Plugin Auto Scaling Groups Managed By Cluster Autoscaler Watch and List pod 1. Pods are in a pending state 2. Cluster Autoscaler requests node Max: 6 Desired: 4 Min: 0 MaxSize: 6 MinSize: 0

Slide 19

Slide 19 text

@k2r2bai Runtime Agents Kubernetes Plugin Auto Scaling Groups Managed By Cluster Autoscaler Watch and List pod 1. Pods are in a pending state Max: 6 Desired: 4 Min: 0 2. Cluster Autoscaler requests node 3. New node in provisioned MaxSize: 6 MinSize: 0

Slide 20

Slide 20 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin For unit test, building, deploy For e2e, integration, ... , etc

Slide 21

Slide 21 text

@k2r2bai Instance Agents Amazon EC2 plugin Allow Jenkins to staL agents on EC2 on demand, and kill them as they get unused. Can use EC2 Spot Instances for their Jenkins CI pipelines(Cost optimization). Instances are terminated when the idle timeout period expires. h\ps://github.com/jenkinsci/ec2-plugin

Slide 22

Slide 22 text

@k2r2bai Instance Agents Amazon EC2 plugin

Slide 23

Slide 23 text

@k2r2bai COPY AND PASTE!!

Slide 24

Slide 24 text

@k2r2bai When something has changed... Repository Jenkins build Developer

Slide 25

Slide 25 text

@k2r2bai A Repository B Jenkins build C D E F . . N

Slide 26

Slide 26 text

@k2r2bai

Slide 27

Slide 27 text

@k2r2bai Developer SRE/DevOps Engineer Keep our code DRY!!!

Slide 28

Slide 28 text

@k2r2bai Jenkins Shared Library Package Prebuilt Image

Slide 29

Slide 29 text

@k2r2bai

Slide 30

Slide 30 text

@k2r2bai Package Prebuilt Image Jenkins Agent

Slide 31

Slide 31 text

@k2r2bai Jenkins Shared Library

Slide 32

Slide 32 text

@k2r2bai

Slide 33

Slide 33 text

@k2r2bai

Slide 34

Slide 34 text

@k2r2bai

Slide 35

Slide 35 text

@k2r2bai

Slide 36

Slide 36 text

@k2r2bai

Slide 37

Slide 37 text

@k2r2bai

Slide 38

Slide 38 text

@k2r2bai

Slide 39

Slide 39 text

@k2r2bai

Slide 40

Slide 40 text

@k2r2bai Multiversion (Conformance Test) Current version of our cluster Multi-node cluster

Slide 41

Slide 41 text

@k2r2bai How do we implement this?

Slide 42

Slide 42 text

@k2r2bai Bootstrapper Abstract Class Options Parser Class Setup() Reset() InstallAddons() getKubeletLog() cleanUp() handleSystemTimeout() checkNodes() checkPods()

Slide 43

Slide 43 text

@k2r2bai Bootstrapper Abstract Class Options Parser Class Setup() Reset() InstallAddons() getKubeletLog() cleanUp() handleSystemTimeout() checkNodes() checkPods()

Slide 44

Slide 44 text

@k2r2bai Options Parser kind(logLevel: 9, name: "e2e", image: "kindest/node:v1.19.0") {} kind --verbosity=9 --name="e2e" --image="kindest/node:v1.19.0"

Slide 45

Slide 45 text

@k2r2bai Setup()

Slide 46

Slide 46 text

@k2r2bai Reset()

Slide 47

Slide 47 text

@k2r2bai InstallAddons() "kubectl apply -f "

Slide 48

Slide 48 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin For unit test, building, deploy For e2e, integration, ... , etc

Slide 49

Slide 49 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin Build Images (For deploy) Merged For unit test, building, deploy For e2e, integration, ... , etc

Slide 50

Slide 50 text

@k2r2bai

Slide 51

Slide 51 text

@k2r2bai

Slide 52

Slide 52 text

@k2r2bai

Slide 53

Slide 53 text

@k2r2bai =

Slide 54

Slide 54 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin Build Images (For deploy) Scan Images Merged For unit test, building, deploy For e2e, integration, ... , etc Success Check CVE reports

Slide 55

Slide 55 text

@k2r2bai Or

Slide 56

Slide 56 text

@k2r2bai Scanner Abstract Class Options Parser Class Scan() collectRepoL() WarningNG Plugin

Slide 57

Slide 57 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin Build Images (For deploy) Scan Images Merged For unit test, building, deploy For e2e, integration, ... , etc Success Check CVE reports Publish reports to Jenkins

Slide 58

Slide 58 text

@k2r2bai

Slide 59

Slide 59 text

@k2r2bai

Slide 60

Slide 60 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin Build Images (For deploy) Scan Images Merged For unit test, building, deploy For e2e, integration, ... , etc Success Push images Check CVE reports

Slide 61

Slide 61 text

@k2r2bai

Slide 62

Slide 62 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin Build Images (For deploy) Scan Images Merged For unit test, building, deploy For e2e, integration, ... , etc Success Push images Check CVE reports Deploy Success kubectl helm . . .

Slide 63

Slide 63 text

@k2r2bai kubectl

Slide 64

Slide 64 text

@k2r2bai helm

Slide 65

Slide 65 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin Build Images (For deploy) Scan Images Merged For unit test, building, deploy For e2e, integration, ... , etc Success Push images Check CVE reports Deploy Success kubectl helm . . .

Slide 66

Slide 66 text

@k2r2bai Developers Git Repository Jenkins Commit/PR Publish reports (Coverage, ...) Checkout Code and Load JenkinsGles Run tests (unit, e2e, ...) Trigger build Run pipeline Runtime Agents Kubernetes Plugin Instance Agents EC2 Plugin Build Images (For deploy) Scan Images Merged For unit test, building, deploy For e2e, integration, ... , etc Success Push images Check CVE reports Deploy Success kubectl helm . . . k8s API creds Git creds k8s API creds AWS creds Registry creds Registry creds

Slide 67

Slide 67 text

@k2r2bai God mode

Slide 68

Slide 68 text

@k2r2bai GitOps

Slide 69

Slide 69 text

@k2r2bai GitOps is a way of implementing Continuous Deployment for cloud native applications. It focuses on a developer-centric experience when operating infrastructure, by using tools developers are already familiar with, including Git and Continuous Deployment tools. • The entire system described declaratively. • The canonical desired system state versioned in Git. • Approved changes that can be automatically applied to the system. • Software agents to ensure correctness and alert on divergence. GitOps

Slide 70

Slide 70 text

@k2r2bai To start managing your cluster with GitOps workflows, the following must be in place: • The entire system described declaratively. • The canonical desired system state versioned in Git. • Approved changes that can be automatically applied to the system. • Software agents to ensure correctness and alert on divergence. Principles of GitOps

Slide 71

Slide 71 text

@k2r2bai

Slide 72

Slide 72 text

@k2r2bai

Slide 73

Slide 73 text

@k2r2bai

Slide 74

Slide 74 text

@k2r2bai

Slide 75

Slide 75 text

@k2r2bai

Slide 76

Slide 76 text

@k2r2bai The pull request (PR) is the foundation of Jenkins X CI/CD pipeline execution. In PRs, Jenkins X allows developers and reviewers to: • Verify changes. • Review PR code changes and their effects. • Approve or deny PRs or suggest changes. • Approve PRs and trigger automatic merge and promotion. • Manual promotion of PRs to production environments and software releases. ChatOps

Slide 77

Slide 77 text

@k2r2bai

Slide 78

Slide 78 text

@k2r2bai Kubernetes Summit Kyle Bai [email protected] THANKS YOU! We’re Hiring!! hips://www.cakeresume.com/companies/