SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
wksctl: GitOps
Management of
k8s Clusters
Jerry Jackson, Software Engineer, Weaveworks
Tamao Nakahara, Head of DX, Weaveworks
Weaveworks is a company founded on open source:
● Weave Net: Fast, Encrypted, Cloud-Native Mesh Networking
● Flux (in CNCF Sandbox!): GitOps for k8s
● Cortex (in the CNCF): Distributed, Long-term-storage TSDB compatible
with Prometheus
● Weave Flagger: Declarative Progressive Delivery for Service Meshes
● EKSctl: Create an Amazon EKS cluster with one command
● Weave Ignite: VMs with container UX & built-in GitOps management
● Weave Scope: Network/Process Observability for Container Clusters
● WKSctl: k8s configuration management with GitOps
● & More (jkcfg, footloose, kured, ...)
Weaveworks
You can pay us for these things :)
● Weave Cloud: SaaS product for K8S management,
monitoring, and automated deployments (Hosted
Prometheus/Cortex, Scope, and Flux)
● Weave Kubernetes Platform: GitOps-aware Enterprise
Kubernetes for Production
● Consulting / Training / Support
weave.works
Speakers Help/Support
Duration
30-45 Minutes
Jerry Jackson
Software Engineer
Weaveworks
Tamao Nakahara
Head of DX
Weaveworks
Browser
Safari copy/paste
shortcuts may not work
wksctl: GitOps Management of Kubernetes Clusters
Using Zoom
Questions?
• Use chat (button: top
left corner of screen)
• Escape to exit full
screen
• “To Everyone” or “To
all panelists and
attendees”
Support:
https://support.zoom.us/hc/
en-us/articles/206175806-T
op-Questions
Troubleshooting
Use chat
If the issue is not easily resolved,
we ask that you follow along as
we demo the sample app.
● What is it?
● What can you do with it?
● Demo
● Under the Hood
● Q&A
9
Overview
● A tool to easily build and manage GitOps Kubernetes Clusters
● Requires only:
○ Cluster description
■ Subnet definitions for services and pods
■ Path to SSH key with access to all machines
■ Username of SSH user
■ Boilerplate configuration of yum repositories and docker
○ Machine descriptions (IP addresses, ports, roles (master/worker))
○ Git repository
● Currently based on v1 of Cluster API
10
What is it?
● Construct Kubernetes Clusters based on configurations in Git
○ Currently CentOS 7
○ Ubuntu under development
● Manage clusters via Git commits
○ Upgrade clusters
○ Add / remove nodes
11
What can you do with it?
● Single Source of Truth
○ Definition of workloads is always accurate and available
● Changes are recorded
○ Can be reviewed or audited via standard tools
● Previous states can be easily restored
○ Failed deployments can be rolled back
● See: https://www.weave.works/blog/what-is-gitops-really for a complete discussion
12
Why manage clusters with Git(Ops)?
● Manage clusters from within
● Defines CRDs that represent machines and clusters
● Specifies goal-seeking controller to maintain desired cluster state
● Works well with GitOps
○ Cluster and Machine manifests managed just like user manifests
13
Cluster API Project
● Set up ssh connectivity to a set of machines
● Define cluster with simple manifests in Git
● Run wksctl apply command to start processing
● Run wksctl kubeconfig to get a kubeconfig file providing cluster access
● That’s it! -- Cluster is created and can then be managed by Git updates
14
How to set up and manage a GitOps cluster with
WKSctl
● Need single private ssh key that can access all cluster machines
● Can use any user with sudo permissions
○ User specified in cluster.yaml (defaults to “root”)
○ Key in
■ cluster.yaml (release 0.8.1)
■ Command argument (release 0.8.2+)
15
Set up ssh connectivity
● cluster.yaml
○ Ancillary files
■ docker-config.yaml
■ repo-config.yaml
● machines.yaml
● cluster.yaml and machines.yaml specific to installation
● docker-config.yaml and repo-config.yaml are boilerplate
● All committed and pushed to GitHub
16
Define cluster with simple manifests
17
cluster.yaml
apiVersion: cluster.k8s.io/v1alpha1
kind: Cluster
metadata:
name: example
namespace: weavek8sops
spec:
clusterNetwork:
pods:
cidrBlocks:[192.168.0.0/16]
serviceDomain: cluster.local
services:
cidrBlocks:[10.96.0.0/12]
providerSpec:
value:
apiVersion: baremetalproviderspec/v1alpha1
kind: BareMetalClusterProviderSpec
cri:
kind: docker
package: docker-ce
version: 18.09.7
user: root
os:
files:
- destination: /etc/yum.repos.d/kubernetes.repo
source:
configmap: repo
key: kubernetes.repo
- destination: /etc/yum.repos.d/docker-ce.repo
source:
configmap: repo
key: docker-ce.repo
- destination: /etc/docker/daemon.json
source:
configmap: docker
key: daemon.json
18
docker-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: docker
namespace: system
data:
daemon.json: |
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"exec-opts": [
"native.cgroupdriver=cgroupfs"
]
}
19
repo-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: repo
namespace: system
data:
kubernetes.repo: |
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
docker-ce.repo: |
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
….
● Specify
○ Destination
○ Config map name
○ Key
● Create
○ Local <config map name>-config.yaml
● Add
○ Data to deploy under Key
20
“os.files” is a general file deployment mechanism
21
machines.yaml
apiVersion: v1
items:
- apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
labels:
set: master
name: master-0
namespace: weavek8sops
spec:
providerSpec:
value:
apiVersion: baremetalproviderspec/v1alpha1
kind: BareMetalMachineProviderSpec
private:
address: 172.17.0.2
port: 22
public:
address: 127.0.0.1
port: 2222
versions:
kubelet: 1.14.1
- apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
labels:
set: worker
name: worker-0
namespace: weavek8sops
… etc. ...
kind: List
wksctl apply --help
Create or update a Kubernetes cluster
Usage:
wksctl apply [flags]
Flags:
--cluster string Location of cluster manifest (default "cluster.yaml")
--config-directory string Directory containing configuration information for the cluster (default ".")
--git-branch string Git branch WKS should use to sync with your cluster (default "master")
--git-deploy-key string Path to the Git deploy key
--git-path string Relative path to files in Git (default ".")
--git-url string Git repo containing your cluster and machine information
-h, --help help for apply
--machines string Location of machines manifest (default "machines.yaml")
--namespace string namespace override for WKS components (default "weavek8sops")
--sealed-secret-cert string Path to a certificate used to encrypt sealed secrets
--sealed-secret-key string Path to a key used to decrypt sealed secrets
--ssh-key string Path to a key authorized to log in to machines by SSH (default "./cluster-key")
--use-manifest-namespace use namespaces from supplied manifests (overriding any --namespace argument)
22
wksctl apply
● For the demo
○ wksctl apply --git-url=<path to GitHub repo> 
--git-deploy-key <path to private key for repo access>
23
Run “wksctl apply” command
● Weaveworks tool for creating containers that look like VMs
○ Can work with docker containers or ignite/firecracker
microVMs
● “Vagrant, but with containers”
○ Extremely fast startup
● Demo will run on footloose “machines”
● More info: https://github.com/weaveworks/footloose
24
Footloose
● Steps
○ Create GitHub repo and clone locally
○ Create and install a deploy key
○ Run wksctl apply
○ Run wksctl kubeconfig
25
Demo
● Can also create cluster using “quickstart”
○ Easiest way to get started
○ Can experiment with GitOps
○ Useful for local testing clusters
■ Like “Minikube” but can run multi-node clusters
○ Steps
■ Fork and clone wks-quickstart-firekube weaveworks repository
■ Change directory to the clone
■ Run ./setup.sh
26
Note
● Add load balancer across control plane nodes
● See Chanwit Kawasaki’s excellent blog post:
https://www.weave.works/blog/fork-clone-run-a-gitops-model-for-
provisioning-multi-machine-ha-clusters-with-rolling-upgrades
27
Highly Available Clusters
● Initial Master Node installed by wksctl via commands over SSH
● wks-controller running on initial master node installs other nodes
● All Installation performed via “Plans” and “Resources”
○ Resources represent individual tasks
■ Execute a command or script
■ Install a package
■ Install a file
■ Etc.
○ Plans are resources that group other resources
28
Under the Hood
29
Components of Running WKSCtl System
● Periodically checks for git updates and applies them to the cluster
● Configured with information about git repository
○ Git URL
○ Git branch
○ Git path (can look at a subset of a git repository by setting a path)
○ And others (poll interval, readonly, etc.)
● See: https://fluxcd.io/ for details
30
Flux makes WKSctl into a GitOps System
31
Basic WKSctl Cluster Creation Flow
● Responsible for node:
○ Creation (except for initial master), Update (including Upgrade), Deletion
● Notified of changes to machine objects
● Processes one machine at a time
● Ordering of operations performed via error returns
○ If not ready to operate on a particular machine, error out
○ Upgrades masters before workers by erroring out on a worker if there are
non-upgraded masters
● Stores no machine state (except for footloose scaling prototype)
32
Machine Actuator
● Create:
○ Generates a Node Plan
○ Executes it
○ Stores json version of the plan on the node if successful
● Update:
○ Generates a new Plan
○ Compares it to stored Plan
○ Updates the node if Plans differ
○ Tears node down and rebuilds it to ensure idempotency
33
Machine Actuator (cont.)
● Upgrade handled specially
○ Doesn’t rebuild machine
○ Uses kubeadm
○ Upgrades masters before workers
■ “Initial master” first (works even without load-balancer)
● Does not currently support downgrade
34
Machine Actuator (cont.)
● Currently unused :-)
35
Cluster Actuator
● Resources
● Plans
36
Deep Dive
● Implement all atomic operations performed by wksctl
○ Except for:
■ Modifying node labels
■ Modifying node annotations
■ Draining nodes
■ Uncordoning nodes
37
Resources
● Directory (install, remove directories)
● File (install, remove files)
● RPM (install, remove RPMs)
● Kubeadm (init, join)
● Kubectl (apply, wait)
● Secret (write contents of secret to host file)
● OS (query OS parameters)
● Service (manipulate systemd services)
● Run (execute an inline command/script)
● RunScript (execute a script given a path)
● Plan (group other resources in a dependency graph and execute them)
38
Resource Types
● // Runner is something that can realise a step.
type Runner interface {
// RunCommand runs a command in a shell. This means cmd can be more than one
// single command, it can be a full bourne shell script.
RunCommand(cmd string, stdin io.Reader) (stdouterr string, err error)
}
● // Resource is an atomic step of the plan.
type Resource interface {
// State returns the state that this step will realize when applied.
State() State
// QueryState returns the current state of this step. For instance, if the step
// describes the installation of a package, QueryState will return if the
// package is actually installed and its version.
QueryState(runner Runner) (State, error)
// Apply this step and indicate whether downstream resources should be re-applied
Apply(runner Runner, diff Diff) (propagate bool, err error)
// Undo this step.
Undo(runner Runner, current State) error
}
39
Resources (cont.)
● Group resources recursively
● “Apply” invokes resources in dependency order
● “Undo” invokes resource undos in reverse dependency order
● Constructed via “Builder”:
b := plan.NewBuilder()
b.AddResource(
"upgrade:node-unlock-kubernetes",
&resource.Run{Script: object.String("yum versionlock delete 'kube*' || true")})
b.AddResource(
"upgrade:node-install-kubeadm",
&resource.RPM{Name: "kubeadm", Version: version, DisableExcludes: "kubernetes"},
plan.DependOn("upgrade:node-unlock-kubernetes"))
40
Plans
● Seed Node Plan (to create initial master)
● Node Plan (to create all other nodes)
41
Two Main Plans
● Each node is annotated with a json representation of its plan
○ When a machine is processed by the machine actuator, the plan that
corresponds to its new state is compared with its old plan from the
corresponding node
○ When the machine actuator is first invoked with any machine, it retroactively
annotates the seed node with a standard node plan for future comparisons
● The seed node plan can be viewed
○ wksctl plan view is a hidden command (not needed for using wksctl)
○ View as a graph or json
42
Plans (cont.)
43
Example Seed Node Plan
Weave Online User Group
Tuesdays, 10:00 am Pacific Time / 18:00 UK time
Format: talks or discussions
Schedule (topics subject to change based on demand):
• Mar 24: Image Is Everything. (Let’s Keep it Secure!) with Jason Epstein
• April 7: What’s New in Flagger 1.0 with Stefan Prodan
• April 8: Denver DevOps: GitOps Hands-On with Leigh Capili (Denver, CO)
Next Steps
• Questions? Email tamao@weave.works
• The Practical Guide to GitOps: eBook: http://bit.ly/gitops_guide
•
• GitOps Hands-On Challenge: http://bit.ly/GitOps_HandsOn_EKS
• Join us on Slack if you have more questions: https://slack.weave.works
• Join the Weave User Group:
https://www.meetup.com/Weave-User-Group/
THANK YOU!

Mais conteúdo relacionado

Mais procurados

Deploy Prometheus - Grafana and EFK stack on Kubic k8s Clusters
Deploy Prometheus - Grafana and EFK stack on Kubic k8s ClustersDeploy Prometheus - Grafana and EFK stack on Kubic k8s Clusters
Deploy Prometheus - Grafana and EFK stack on Kubic k8s ClustersSyah Dwi Prihatmoko
 
An intro to Kubernetes operators
An intro to Kubernetes operatorsAn intro to Kubernetes operators
An intro to Kubernetes operatorsJ On The Beach
 
Cloud Native User Group: Shift-Left Testing IaC With PaC
Cloud Native User Group: Shift-Left Testing IaC With PaCCloud Native User Group: Shift-Left Testing IaC With PaC
Cloud Native User Group: Shift-Left Testing IaC With PaCsmalltown
 
HPC in a Box - Docker Workshop at ISC 2015
HPC in a Box - Docker Workshop at ISC 2015HPC in a Box - Docker Workshop at ISC 2015
HPC in a Box - Docker Workshop at ISC 2015inside-BigData.com
 
Kubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the Ugly
Kubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the UglyKubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the Ugly
Kubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the Uglysmalltown
 
Introduction kubernetes 2017_12_24
Introduction kubernetes 2017_12_24Introduction kubernetes 2017_12_24
Introduction kubernetes 2017_12_24Sam Zheng
 
Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...
Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...
Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...Stephen Gordon
 
OpenStack Magnum
OpenStack MagnumOpenStack Magnum
OpenStack MagnumAdrian Otto
 
OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...
OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...
OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...NETWAYS
 
A Primer on Kubernetes and Google Container Engine
A Primer on Kubernetes and Google Container EngineA Primer on Kubernetes and Google Container Engine
A Primer on Kubernetes and Google Container EngineRightScale
 
AWS Lambda and serverless Java | DevNation Live
AWS Lambda and serverless Java | DevNation LiveAWS Lambda and serverless Java | DevNation Live
AWS Lambda and serverless Java | DevNation LiveRed Hat Developers
 
Packaging Strategy for Community Openstack and Implementation Reference | Hoj...
Packaging Strategy for Community Openstack and Implementation Reference | Hoj...Packaging Strategy for Community Openstack and Implementation Reference | Hoj...
Packaging Strategy for Community Openstack and Implementation Reference | Hoj...Vietnam Open Infrastructure User Group
 
Implementing an Automated Staging Environment
Implementing an Automated Staging EnvironmentImplementing an Automated Staging Environment
Implementing an Automated Staging EnvironmentDaniel Oliveira Filho
 
Integrate Openshift with Cloudforms
Integrate Openshift with CloudformsIntegrate Openshift with Cloudforms
Integrate Openshift with CloudformsMichael Lessard
 
Integration kubernetes with docker private registry
Integration kubernetes with docker private registryIntegration kubernetes with docker private registry
Integration kubernetes with docker private registryHungWei Chiu
 
client-go: The Good, The Bad and The Ugly
client-go: The Good, The Bad and The Uglyclient-go: The Good, The Bad and The Ugly
client-go: The Good, The Bad and The UglyLili Cosic
 
Orchestrating Docker with OpenStack
Orchestrating Docker with OpenStackOrchestrating Docker with OpenStack
Orchestrating Docker with OpenStackErica Windisch
 

Mais procurados (20)

Deploy Prometheus - Grafana and EFK stack on Kubic k8s Clusters
Deploy Prometheus - Grafana and EFK stack on Kubic k8s ClustersDeploy Prometheus - Grafana and EFK stack on Kubic k8s Clusters
Deploy Prometheus - Grafana and EFK stack on Kubic k8s Clusters
 
An intro to Kubernetes operators
An intro to Kubernetes operatorsAn intro to Kubernetes operators
An intro to Kubernetes operators
 
Cloud Native User Group: Shift-Left Testing IaC With PaC
Cloud Native User Group: Shift-Left Testing IaC With PaCCloud Native User Group: Shift-Left Testing IaC With PaC
Cloud Native User Group: Shift-Left Testing IaC With PaC
 
Docker for HPC in a Nutshell
Docker for HPC in a NutshellDocker for HPC in a Nutshell
Docker for HPC in a Nutshell
 
HPC in a Box - Docker Workshop at ISC 2015
HPC in a Box - Docker Workshop at ISC 2015HPC in a Box - Docker Workshop at ISC 2015
HPC in a Box - Docker Workshop at ISC 2015
 
Crunchy containers
Crunchy containersCrunchy containers
Crunchy containers
 
Kubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the Ugly
Kubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the UglyKubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the Ugly
Kubernetes Summit 2021: Multi-Cluster - The Good, the Bad and the Ugly
 
Introduction kubernetes 2017_12_24
Introduction kubernetes 2017_12_24Introduction kubernetes 2017_12_24
Introduction kubernetes 2017_12_24
 
Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...
Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...
Containers for the Enterprise: Delivering OpenShift on OpenStack for Performa...
 
OpenStack Magnum
OpenStack MagnumOpenStack Magnum
OpenStack Magnum
 
OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...
OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...
OSDC 2018 | From batch to pipelines – why Apache Mesos and DC/OS are a soluti...
 
A Primer on Kubernetes and Google Container Engine
A Primer on Kubernetes and Google Container EngineA Primer on Kubernetes and Google Container Engine
A Primer on Kubernetes and Google Container Engine
 
AWS Lambda and serverless Java | DevNation Live
AWS Lambda and serverless Java | DevNation LiveAWS Lambda and serverless Java | DevNation Live
AWS Lambda and serverless Java | DevNation Live
 
Packaging Strategy for Community Openstack and Implementation Reference | Hoj...
Packaging Strategy for Community Openstack and Implementation Reference | Hoj...Packaging Strategy for Community Openstack and Implementation Reference | Hoj...
Packaging Strategy for Community Openstack and Implementation Reference | Hoj...
 
Implementing an Automated Staging Environment
Implementing an Automated Staging EnvironmentImplementing an Automated Staging Environment
Implementing an Automated Staging Environment
 
Integrate Openshift with Cloudforms
Integrate Openshift with CloudformsIntegrate Openshift with Cloudforms
Integrate Openshift with Cloudforms
 
Integration kubernetes with docker private registry
Integration kubernetes with docker private registryIntegration kubernetes with docker private registry
Integration kubernetes with docker private registry
 
Rex gke-clustree
Rex gke-clustreeRex gke-clustree
Rex gke-clustree
 
client-go: The Good, The Bad and The Ugly
client-go: The Good, The Bad and The Uglyclient-go: The Good, The Bad and The Ugly
client-go: The Good, The Bad and The Ugly
 
Orchestrating Docker with OpenStack
Orchestrating Docker with OpenStackOrchestrating Docker with OpenStack
Orchestrating Docker with OpenStack
 

Semelhante a WKSctl: Gitops Management of Kubernetes Clusters

Intro to Kubernetes & GitOps Workshop
Intro to Kubernetes & GitOps WorkshopIntro to Kubernetes & GitOps Workshop
Intro to Kubernetes & GitOps WorkshopWeaveworks
 
Free GitOps Workshop + Intro to Kubernetes & GitOps
Free GitOps Workshop + Intro to Kubernetes & GitOpsFree GitOps Workshop + Intro to Kubernetes & GitOps
Free GitOps Workshop + Intro to Kubernetes & GitOpsWeaveworks
 
Containerization & Docker - Under the Hood
Containerization & Docker - Under the HoodContainerization & Docker - Under the Hood
Containerization & Docker - Under the HoodImesha Sudasingha
 
Security of Linux containers in the cloud
Security of Linux containers in the cloudSecurity of Linux containers in the cloud
Security of Linux containers in the cloudDobrica Pavlinušić
 
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner Cloud
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner CloudCreating Kubernetes multi clusters with ClusterAPI in the Hetzner Cloud
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner CloudTobias Schneck
 
Running Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWSRunning Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWSDoiT International
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2Alfonso Martino
 
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes Meetup
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes MeetupCreating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes Meetup
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes MeetupTobias Schneck
 
Patroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companionPatroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companionAlexander Kukushkin
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containersNitish Jadia
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniTheFamily
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionJérôme Petazzoni
 
Manage your bare-metal infrastructure with a CI/CD-driven approach
Manage your bare-metal infrastructure with a CI/CD-driven approachManage your bare-metal infrastructure with a CI/CD-driven approach
Manage your bare-metal infrastructure with a CI/CD-driven approachinovex GmbH
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 introTerry Cho
 
[WSO2Con USA 2018] Deploying Applications in K8S and Docker
[WSO2Con USA 2018] Deploying Applications in K8S and Docker[WSO2Con USA 2018] Deploying Applications in K8S and Docker
[WSO2Con USA 2018] Deploying Applications in K8S and DockerWSO2
 
Testing kubernetes and_open_shift_at_scale_20170209
Testing kubernetes and_open_shift_at_scale_20170209Testing kubernetes and_open_shift_at_scale_20170209
Testing kubernetes and_open_shift_at_scale_20170209mffiedler
 
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...javier ramirez
 
Docker and Kubernetes 101 workshop
Docker and Kubernetes 101 workshopDocker and Kubernetes 101 workshop
Docker and Kubernetes 101 workshopSathish VJ
 

Semelhante a WKSctl: Gitops Management of Kubernetes Clusters (20)

Intro to Kubernetes & GitOps Workshop
Intro to Kubernetes & GitOps WorkshopIntro to Kubernetes & GitOps Workshop
Intro to Kubernetes & GitOps Workshop
 
Free GitOps Workshop + Intro to Kubernetes & GitOps
Free GitOps Workshop + Intro to Kubernetes & GitOpsFree GitOps Workshop + Intro to Kubernetes & GitOps
Free GitOps Workshop + Intro to Kubernetes & GitOps
 
Containerization & Docker - Under the Hood
Containerization & Docker - Under the HoodContainerization & Docker - Under the Hood
Containerization & Docker - Under the Hood
 
Security of Linux containers in the cloud
Security of Linux containers in the cloudSecurity of Linux containers in the cloud
Security of Linux containers in the cloud
 
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner Cloud
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner CloudCreating Kubernetes multi clusters with ClusterAPI in the Hetzner Cloud
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner Cloud
 
Introduction to istio
Introduction to istioIntroduction to istio
Introduction to istio
 
Running Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWSRunning Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWS
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 2
 
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes Meetup
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes MeetupCreating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes Meetup
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes Meetup
 
Patroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companionPatroni: Kubernetes-native PostgreSQL companion
Patroni: Kubernetes-native PostgreSQL companion
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containers
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" Edition
 
Manage your bare-metal infrastructure with a CI/CD-driven approach
Manage your bare-metal infrastructure with a CI/CD-driven approachManage your bare-metal infrastructure with a CI/CD-driven approach
Manage your bare-metal infrastructure with a CI/CD-driven approach
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
[WSO2Con USA 2018] Deploying Applications in K8S and Docker
[WSO2Con USA 2018] Deploying Applications in K8S and Docker[WSO2Con USA 2018] Deploying Applications in K8S and Docker
[WSO2Con USA 2018] Deploying Applications in K8S and Docker
 
Testing kubernetes and_open_shift_at_scale_20170209
Testing kubernetes and_open_shift_at_scale_20170209Testing kubernetes and_open_shift_at_scale_20170209
Testing kubernetes and_open_shift_at_scale_20170209
 
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...
 
Docker and Kubernetes 101 workshop
Docker and Kubernetes 101 workshopDocker and Kubernetes 101 workshop
Docker and Kubernetes 101 workshop
 

Mais de Weaveworks

Weave AI Controllers (Weave GitOps Office Hours)
Weave AI Controllers (Weave GitOps Office Hours)Weave AI Controllers (Weave GitOps Office Hours)
Weave AI Controllers (Weave GitOps Office Hours)Weaveworks
 
Flamingo: Expand ArgoCD with Flux (Office Hours)
Flamingo: Expand ArgoCD with Flux (Office Hours)Flamingo: Expand ArgoCD with Flux (Office Hours)
Flamingo: Expand ArgoCD with Flux (Office Hours)Weaveworks
 
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for YouWebinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for YouWeaveworks
 
Six Signs You Need Platform Engineering
Six Signs You Need Platform EngineeringSix Signs You Need Platform Engineering
Six Signs You Need Platform EngineeringWeaveworks
 
SRE and GitOps for Building Robust Kubernetes Platforms.pdf
SRE and GitOps for Building Robust Kubernetes Platforms.pdfSRE and GitOps for Building Robust Kubernetes Platforms.pdf
SRE and GitOps for Building Robust Kubernetes Platforms.pdfWeaveworks
 
Webinar: End to End Security & Operations with Chainguard and Weave GitOps
Webinar: End to End Security & Operations with Chainguard and Weave GitOpsWebinar: End to End Security & Operations with Chainguard and Weave GitOps
Webinar: End to End Security & Operations with Chainguard and Weave GitOpsWeaveworks
 
Flux Beyond Git Harnessing the Power of OCI
Flux Beyond Git Harnessing the Power of OCIFlux Beyond Git Harnessing the Power of OCI
Flux Beyond Git Harnessing the Power of OCIWeaveworks
 
Automated Provisioning, Management & Cost Control for Kubernetes Clusters
Automated Provisioning, Management & Cost Control for Kubernetes ClustersAutomated Provisioning, Management & Cost Control for Kubernetes Clusters
Automated Provisioning, Management & Cost Control for Kubernetes ClustersWeaveworks
 
How to Avoid Kubernetes Multi-tenancy Catastrophes
How to Avoid Kubernetes Multi-tenancy CatastrophesHow to Avoid Kubernetes Multi-tenancy Catastrophes
How to Avoid Kubernetes Multi-tenancy CatastrophesWeaveworks
 
Building internal developer platform with EKS and GitOps
Building internal developer platform with EKS and GitOpsBuilding internal developer platform with EKS and GitOps
Building internal developer platform with EKS and GitOpsWeaveworks
 
GitOps Testing in Kubernetes with Flux and Testkube.pdf
GitOps Testing in Kubernetes with Flux and Testkube.pdfGitOps Testing in Kubernetes with Flux and Testkube.pdf
GitOps Testing in Kubernetes with Flux and Testkube.pdfWeaveworks
 
Intro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and LinkerdIntro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and LinkerdWeaveworks
 
Implementing Flux for Scale with Soft Multi-tenancy
Implementing Flux for Scale with Soft Multi-tenancyImplementing Flux for Scale with Soft Multi-tenancy
Implementing Flux for Scale with Soft Multi-tenancyWeaveworks
 
Accelerating Hybrid Multistage Delivery with Weave GitOps on EKS
Accelerating Hybrid Multistage Delivery with Weave GitOps on EKSAccelerating Hybrid Multistage Delivery with Weave GitOps on EKS
Accelerating Hybrid Multistage Delivery with Weave GitOps on EKSWeaveworks
 
The Story of Flux Reaching Graduation in the CNCF
The Story of Flux Reaching Graduation in the CNCFThe Story of Flux Reaching Graduation in the CNCF
The Story of Flux Reaching Graduation in the CNCFWeaveworks
 
Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...
Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...
Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...Weaveworks
 
Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...
Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...
Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...Weaveworks
 
Flux’s Security & Scalability with OCI & Helm Slides.pdf
Flux’s Security & Scalability with OCI & Helm Slides.pdfFlux’s Security & Scalability with OCI & Helm Slides.pdf
Flux’s Security & Scalability with OCI & Helm Slides.pdfWeaveworks
 
Flux Security & Scalability using VS Code GitOps Extension
Flux Security & Scalability using VS Code GitOps Extension Flux Security & Scalability using VS Code GitOps Extension
Flux Security & Scalability using VS Code GitOps Extension Weaveworks
 
Deploying Stateful Applications Securely & Confidently with Ondat & Weave GitOps
Deploying Stateful Applications Securely & Confidently with Ondat & Weave GitOpsDeploying Stateful Applications Securely & Confidently with Ondat & Weave GitOps
Deploying Stateful Applications Securely & Confidently with Ondat & Weave GitOpsWeaveworks
 

Mais de Weaveworks (20)

Weave AI Controllers (Weave GitOps Office Hours)
Weave AI Controllers (Weave GitOps Office Hours)Weave AI Controllers (Weave GitOps Office Hours)
Weave AI Controllers (Weave GitOps Office Hours)
 
Flamingo: Expand ArgoCD with Flux (Office Hours)
Flamingo: Expand ArgoCD with Flux (Office Hours)Flamingo: Expand ArgoCD with Flux (Office Hours)
Flamingo: Expand ArgoCD with Flux (Office Hours)
 
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for YouWebinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
 
Six Signs You Need Platform Engineering
Six Signs You Need Platform EngineeringSix Signs You Need Platform Engineering
Six Signs You Need Platform Engineering
 
SRE and GitOps for Building Robust Kubernetes Platforms.pdf
SRE and GitOps for Building Robust Kubernetes Platforms.pdfSRE and GitOps for Building Robust Kubernetes Platforms.pdf
SRE and GitOps for Building Robust Kubernetes Platforms.pdf
 
Webinar: End to End Security & Operations with Chainguard and Weave GitOps
Webinar: End to End Security & Operations with Chainguard and Weave GitOpsWebinar: End to End Security & Operations with Chainguard and Weave GitOps
Webinar: End to End Security & Operations with Chainguard and Weave GitOps
 
Flux Beyond Git Harnessing the Power of OCI
Flux Beyond Git Harnessing the Power of OCIFlux Beyond Git Harnessing the Power of OCI
Flux Beyond Git Harnessing the Power of OCI
 
Automated Provisioning, Management & Cost Control for Kubernetes Clusters
Automated Provisioning, Management & Cost Control for Kubernetes ClustersAutomated Provisioning, Management & Cost Control for Kubernetes Clusters
Automated Provisioning, Management & Cost Control for Kubernetes Clusters
 
How to Avoid Kubernetes Multi-tenancy Catastrophes
How to Avoid Kubernetes Multi-tenancy CatastrophesHow to Avoid Kubernetes Multi-tenancy Catastrophes
How to Avoid Kubernetes Multi-tenancy Catastrophes
 
Building internal developer platform with EKS and GitOps
Building internal developer platform with EKS and GitOpsBuilding internal developer platform with EKS and GitOps
Building internal developer platform with EKS and GitOps
 
GitOps Testing in Kubernetes with Flux and Testkube.pdf
GitOps Testing in Kubernetes with Flux and Testkube.pdfGitOps Testing in Kubernetes with Flux and Testkube.pdf
GitOps Testing in Kubernetes with Flux and Testkube.pdf
 
Intro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and LinkerdIntro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and Linkerd
 
Implementing Flux for Scale with Soft Multi-tenancy
Implementing Flux for Scale with Soft Multi-tenancyImplementing Flux for Scale with Soft Multi-tenancy
Implementing Flux for Scale with Soft Multi-tenancy
 
Accelerating Hybrid Multistage Delivery with Weave GitOps on EKS
Accelerating Hybrid Multistage Delivery with Weave GitOps on EKSAccelerating Hybrid Multistage Delivery with Weave GitOps on EKS
Accelerating Hybrid Multistage Delivery with Weave GitOps on EKS
 
The Story of Flux Reaching Graduation in the CNCF
The Story of Flux Reaching Graduation in the CNCFThe Story of Flux Reaching Graduation in the CNCF
The Story of Flux Reaching Graduation in the CNCF
 
Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...
Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...
Shift Deployment Security Left with Weave GitOps & Upbound’s Universal Crossp...
 
Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...
Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...
Securing Your App Deployments with Tunnels, OIDC, RBAC, and Progressive Deliv...
 
Flux’s Security & Scalability with OCI & Helm Slides.pdf
Flux’s Security & Scalability with OCI & Helm Slides.pdfFlux’s Security & Scalability with OCI & Helm Slides.pdf
Flux’s Security & Scalability with OCI & Helm Slides.pdf
 
Flux Security & Scalability using VS Code GitOps Extension
Flux Security & Scalability using VS Code GitOps Extension Flux Security & Scalability using VS Code GitOps Extension
Flux Security & Scalability using VS Code GitOps Extension
 
Deploying Stateful Applications Securely & Confidently with Ondat & Weave GitOps
Deploying Stateful Applications Securely & Confidently with Ondat & Weave GitOpsDeploying Stateful Applications Securely & Confidently with Ondat & Weave GitOps
Deploying Stateful Applications Securely & Confidently with Ondat & Weave GitOps
 

Último

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Último (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

WKSctl: Gitops Management of Kubernetes Clusters

  • 1. wksctl: GitOps Management of k8s Clusters Jerry Jackson, Software Engineer, Weaveworks Tamao Nakahara, Head of DX, Weaveworks
  • 2.
  • 3.
  • 4.
  • 5. Weaveworks is a company founded on open source: ● Weave Net: Fast, Encrypted, Cloud-Native Mesh Networking ● Flux (in CNCF Sandbox!): GitOps for k8s ● Cortex (in the CNCF): Distributed, Long-term-storage TSDB compatible with Prometheus ● Weave Flagger: Declarative Progressive Delivery for Service Meshes ● EKSctl: Create an Amazon EKS cluster with one command ● Weave Ignite: VMs with container UX & built-in GitOps management ● Weave Scope: Network/Process Observability for Container Clusters ● WKSctl: k8s configuration management with GitOps ● & More (jkcfg, footloose, kured, ...)
  • 6. Weaveworks You can pay us for these things :) ● Weave Cloud: SaaS product for K8S management, monitoring, and automated deployments (Hosted Prometheus/Cortex, Scope, and Flux) ● Weave Kubernetes Platform: GitOps-aware Enterprise Kubernetes for Production ● Consulting / Training / Support
  • 8. Speakers Help/Support Duration 30-45 Minutes Jerry Jackson Software Engineer Weaveworks Tamao Nakahara Head of DX Weaveworks Browser Safari copy/paste shortcuts may not work wksctl: GitOps Management of Kubernetes Clusters Using Zoom Questions? • Use chat (button: top left corner of screen) • Escape to exit full screen • “To Everyone” or “To all panelists and attendees” Support: https://support.zoom.us/hc/ en-us/articles/206175806-T op-Questions Troubleshooting Use chat If the issue is not easily resolved, we ask that you follow along as we demo the sample app.
  • 9. ● What is it? ● What can you do with it? ● Demo ● Under the Hood ● Q&A 9 Overview
  • 10. ● A tool to easily build and manage GitOps Kubernetes Clusters ● Requires only: ○ Cluster description ■ Subnet definitions for services and pods ■ Path to SSH key with access to all machines ■ Username of SSH user ■ Boilerplate configuration of yum repositories and docker ○ Machine descriptions (IP addresses, ports, roles (master/worker)) ○ Git repository ● Currently based on v1 of Cluster API 10 What is it?
  • 11. ● Construct Kubernetes Clusters based on configurations in Git ○ Currently CentOS 7 ○ Ubuntu under development ● Manage clusters via Git commits ○ Upgrade clusters ○ Add / remove nodes 11 What can you do with it?
  • 12. ● Single Source of Truth ○ Definition of workloads is always accurate and available ● Changes are recorded ○ Can be reviewed or audited via standard tools ● Previous states can be easily restored ○ Failed deployments can be rolled back ● See: https://www.weave.works/blog/what-is-gitops-really for a complete discussion 12 Why manage clusters with Git(Ops)?
  • 13. ● Manage clusters from within ● Defines CRDs that represent machines and clusters ● Specifies goal-seeking controller to maintain desired cluster state ● Works well with GitOps ○ Cluster and Machine manifests managed just like user manifests 13 Cluster API Project
  • 14. ● Set up ssh connectivity to a set of machines ● Define cluster with simple manifests in Git ● Run wksctl apply command to start processing ● Run wksctl kubeconfig to get a kubeconfig file providing cluster access ● That’s it! -- Cluster is created and can then be managed by Git updates 14 How to set up and manage a GitOps cluster with WKSctl
  • 15. ● Need single private ssh key that can access all cluster machines ● Can use any user with sudo permissions ○ User specified in cluster.yaml (defaults to “root”) ○ Key in ■ cluster.yaml (release 0.8.1) ■ Command argument (release 0.8.2+) 15 Set up ssh connectivity
  • 16. ● cluster.yaml ○ Ancillary files ■ docker-config.yaml ■ repo-config.yaml ● machines.yaml ● cluster.yaml and machines.yaml specific to installation ● docker-config.yaml and repo-config.yaml are boilerplate ● All committed and pushed to GitHub 16 Define cluster with simple manifests
  • 17. 17 cluster.yaml apiVersion: cluster.k8s.io/v1alpha1 kind: Cluster metadata: name: example namespace: weavek8sops spec: clusterNetwork: pods: cidrBlocks:[192.168.0.0/16] serviceDomain: cluster.local services: cidrBlocks:[10.96.0.0/12] providerSpec: value: apiVersion: baremetalproviderspec/v1alpha1 kind: BareMetalClusterProviderSpec cri: kind: docker package: docker-ce version: 18.09.7 user: root os: files: - destination: /etc/yum.repos.d/kubernetes.repo source: configmap: repo key: kubernetes.repo - destination: /etc/yum.repos.d/docker-ce.repo source: configmap: repo key: docker-ce.repo - destination: /etc/docker/daemon.json source: configmap: docker key: daemon.json
  • 18. 18 docker-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: docker namespace: system data: daemon.json: | { "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "exec-opts": [ "native.cgroupdriver=cgroupfs" ] }
  • 19. 19 repo-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: repo namespace: system data: kubernetes.repo: | [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kube* docker-ce.repo: | [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://download.docker.com/linux/centos/7/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg [docker-ce-stable-debuginfo] name=Docker CE Stable - Debuginfo $basearch baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/stable enabled=0 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg ….
  • 20. ● Specify ○ Destination ○ Config map name ○ Key ● Create ○ Local <config map name>-config.yaml ● Add ○ Data to deploy under Key 20 “os.files” is a general file deployment mechanism
  • 21. 21 machines.yaml apiVersion: v1 items: - apiVersion: cluster.k8s.io/v1alpha1 kind: Machine metadata: labels: set: master name: master-0 namespace: weavek8sops spec: providerSpec: value: apiVersion: baremetalproviderspec/v1alpha1 kind: BareMetalMachineProviderSpec private: address: 172.17.0.2 port: 22 public: address: 127.0.0.1 port: 2222 versions: kubelet: 1.14.1 - apiVersion: cluster.k8s.io/v1alpha1 kind: Machine metadata: labels: set: worker name: worker-0 namespace: weavek8sops … etc. ... kind: List
  • 22. wksctl apply --help Create or update a Kubernetes cluster Usage: wksctl apply [flags] Flags: --cluster string Location of cluster manifest (default "cluster.yaml") --config-directory string Directory containing configuration information for the cluster (default ".") --git-branch string Git branch WKS should use to sync with your cluster (default "master") --git-deploy-key string Path to the Git deploy key --git-path string Relative path to files in Git (default ".") --git-url string Git repo containing your cluster and machine information -h, --help help for apply --machines string Location of machines manifest (default "machines.yaml") --namespace string namespace override for WKS components (default "weavek8sops") --sealed-secret-cert string Path to a certificate used to encrypt sealed secrets --sealed-secret-key string Path to a key used to decrypt sealed secrets --ssh-key string Path to a key authorized to log in to machines by SSH (default "./cluster-key") --use-manifest-namespace use namespaces from supplied manifests (overriding any --namespace argument) 22 wksctl apply
  • 23. ● For the demo ○ wksctl apply --git-url=<path to GitHub repo> --git-deploy-key <path to private key for repo access> 23 Run “wksctl apply” command
  • 24. ● Weaveworks tool for creating containers that look like VMs ○ Can work with docker containers or ignite/firecracker microVMs ● “Vagrant, but with containers” ○ Extremely fast startup ● Demo will run on footloose “machines” ● More info: https://github.com/weaveworks/footloose 24 Footloose
  • 25. ● Steps ○ Create GitHub repo and clone locally ○ Create and install a deploy key ○ Run wksctl apply ○ Run wksctl kubeconfig 25 Demo
  • 26. ● Can also create cluster using “quickstart” ○ Easiest way to get started ○ Can experiment with GitOps ○ Useful for local testing clusters ■ Like “Minikube” but can run multi-node clusters ○ Steps ■ Fork and clone wks-quickstart-firekube weaveworks repository ■ Change directory to the clone ■ Run ./setup.sh 26 Note
  • 27. ● Add load balancer across control plane nodes ● See Chanwit Kawasaki’s excellent blog post: https://www.weave.works/blog/fork-clone-run-a-gitops-model-for- provisioning-multi-machine-ha-clusters-with-rolling-upgrades 27 Highly Available Clusters
  • 28. ● Initial Master Node installed by wksctl via commands over SSH ● wks-controller running on initial master node installs other nodes ● All Installation performed via “Plans” and “Resources” ○ Resources represent individual tasks ■ Execute a command or script ■ Install a package ■ Install a file ■ Etc. ○ Plans are resources that group other resources 28 Under the Hood
  • 29. 29 Components of Running WKSCtl System
  • 30. ● Periodically checks for git updates and applies them to the cluster ● Configured with information about git repository ○ Git URL ○ Git branch ○ Git path (can look at a subset of a git repository by setting a path) ○ And others (poll interval, readonly, etc.) ● See: https://fluxcd.io/ for details 30 Flux makes WKSctl into a GitOps System
  • 31. 31 Basic WKSctl Cluster Creation Flow
  • 32. ● Responsible for node: ○ Creation (except for initial master), Update (including Upgrade), Deletion ● Notified of changes to machine objects ● Processes one machine at a time ● Ordering of operations performed via error returns ○ If not ready to operate on a particular machine, error out ○ Upgrades masters before workers by erroring out on a worker if there are non-upgraded masters ● Stores no machine state (except for footloose scaling prototype) 32 Machine Actuator
  • 33. ● Create: ○ Generates a Node Plan ○ Executes it ○ Stores json version of the plan on the node if successful ● Update: ○ Generates a new Plan ○ Compares it to stored Plan ○ Updates the node if Plans differ ○ Tears node down and rebuilds it to ensure idempotency 33 Machine Actuator (cont.)
  • 34. ● Upgrade handled specially ○ Doesn’t rebuild machine ○ Uses kubeadm ○ Upgrades masters before workers ■ “Initial master” first (works even without load-balancer) ● Does not currently support downgrade 34 Machine Actuator (cont.)
  • 35. ● Currently unused :-) 35 Cluster Actuator
  • 37. ● Implement all atomic operations performed by wksctl ○ Except for: ■ Modifying node labels ■ Modifying node annotations ■ Draining nodes ■ Uncordoning nodes 37 Resources
  • 38. ● Directory (install, remove directories) ● File (install, remove files) ● RPM (install, remove RPMs) ● Kubeadm (init, join) ● Kubectl (apply, wait) ● Secret (write contents of secret to host file) ● OS (query OS parameters) ● Service (manipulate systemd services) ● Run (execute an inline command/script) ● RunScript (execute a script given a path) ● Plan (group other resources in a dependency graph and execute them) 38 Resource Types
  • 39. ● // Runner is something that can realise a step. type Runner interface { // RunCommand runs a command in a shell. This means cmd can be more than one // single command, it can be a full bourne shell script. RunCommand(cmd string, stdin io.Reader) (stdouterr string, err error) } ● // Resource is an atomic step of the plan. type Resource interface { // State returns the state that this step will realize when applied. State() State // QueryState returns the current state of this step. For instance, if the step // describes the installation of a package, QueryState will return if the // package is actually installed and its version. QueryState(runner Runner) (State, error) // Apply this step and indicate whether downstream resources should be re-applied Apply(runner Runner, diff Diff) (propagate bool, err error) // Undo this step. Undo(runner Runner, current State) error } 39 Resources (cont.)
  • 40. ● Group resources recursively ● “Apply” invokes resources in dependency order ● “Undo” invokes resource undos in reverse dependency order ● Constructed via “Builder”: b := plan.NewBuilder() b.AddResource( "upgrade:node-unlock-kubernetes", &resource.Run{Script: object.String("yum versionlock delete 'kube*' || true")}) b.AddResource( "upgrade:node-install-kubeadm", &resource.RPM{Name: "kubeadm", Version: version, DisableExcludes: "kubernetes"}, plan.DependOn("upgrade:node-unlock-kubernetes")) 40 Plans
  • 41. ● Seed Node Plan (to create initial master) ● Node Plan (to create all other nodes) 41 Two Main Plans
  • 42. ● Each node is annotated with a json representation of its plan ○ When a machine is processed by the machine actuator, the plan that corresponds to its new state is compared with its old plan from the corresponding node ○ When the machine actuator is first invoked with any machine, it retroactively annotates the seed node with a standard node plan for future comparisons ● The seed node plan can be viewed ○ wksctl plan view is a hidden command (not needed for using wksctl) ○ View as a graph or json 42 Plans (cont.)
  • 44. Weave Online User Group Tuesdays, 10:00 am Pacific Time / 18:00 UK time Format: talks or discussions Schedule (topics subject to change based on demand): • Mar 24: Image Is Everything. (Let’s Keep it Secure!) with Jason Epstein • April 7: What’s New in Flagger 1.0 with Stefan Prodan • April 8: Denver DevOps: GitOps Hands-On with Leigh Capili (Denver, CO)
  • 45. Next Steps • Questions? Email tamao@weave.works • The Practical Guide to GitOps: eBook: http://bit.ly/gitops_guide • • GitOps Hands-On Challenge: http://bit.ly/GitOps_HandsOn_EKS • Join us on Slack if you have more questions: https://slack.weave.works • Join the Weave User Group: https://www.meetup.com/Weave-User-Group/