Skip to content

Instantly share code, notes, and snippets.

View slok's full-sized avatar
⚙️
Building reliable solutions

Xabier Larrakoetxea Gallego slok

⚙️
Building reliable solutions
View GitHub Profile
version: "prometheus/v1"
service: "myservice"
labels:
owner: "myteam"
tier: "2"
slos:
# We allow failing (5xx and 429) 1 request every 1000 requests (99.9%).
- name: "requests-availability"
objective: 99.9
description: "Common SLO based on availability for HTTP request responses."
@slok
slok / yq-k8s-tricks.md
Created March 27, 2021 08:10
yq Kubernetes tricks

Add Namespace to all

yq eval -i '.metadata.namespace |= "argo"' "${FILE}"

Add protocol: TCP to the Services that have missing.

yq eval -i 'select(.kind == "Service") |= .spec.ports[] |= select(has("protocol") | not) |= .protocol="TCP" ' ${FILE}
@slok
slok / pprof.md
Last active April 22, 2024 17:36
Go pprof cheat sheet

Enable profiling

Default http server

import (
    _ "net/http/pprof"
    "net/http"
)
package k8sunstructured_test
import (
"bytes"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@slok
slok / main.go
Created June 4, 2018 15:36
Kubernetes controller that updates annotation on pods with `kooper: test` label
package main
import (
"os"
"path/filepath"
"time"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
@slok
slok / kooper-vgo.log
Created May 26, 2018 07:04
vgo kooper try
$ time vgo build
vgo: finding github.com/google/cadvisor v0.0.0-20170309230114-17543becf905
vgo: finding gopkg.in/olivere/elastic.v2 v2.0.0-20151008152123-3cfe88295d20
vgo: finding golang.org/x/oauth2 v0.0.0-20150321034511-ca8a464d23d5
vgo: finding golang.org/x/net v0.0.0-20151120032300-5627bad10b82
vgo: finding github.com/influxdb/influxdb v0.0.0-20151125225445-9eab56311373
vgo: finding github.com/go-ini/ini v0.0.0-20160207163330-193d1ecb466b
vgo: finding github.com/eapache/queue v0.0.0-20150606115303-ded5959c0d4e
vgo: finding github.com/coreos/rkt v0.0.0-20160513154944-14437382a98e
FindRepo: Get https://speter.net/go/exp/math/dec/inf?go-get=1: x509: certificate signed by unknown authority
@slok
slok / handler-opentracing.go
Created May 23, 2018 13:06
kooper handler opentracing
hand := &handler.HandlerFunc{
AddFunc: func(ctx context.Context, obj runtime.Object) error {
// Get the parent span.
pSpan := opentracing.SpanFromContext(ctx)
// Create a new span.
span := tracer.StartSpan("AddFunc", opentracing.ChildOf(pSpan.Context()))
defer span.Finish()
// Do stuff...
// Initialize logger.
log := &log.Std{}
// Create the controller that will refresh every 30 seconds.
ctrl := controller.NewSequential(30*time.Second, hand, retr, log)
// Start our controller.
stopC := make(chan struct{})
if err := ctrl.Run(stopC); err != nil {
log.Errorf("error running controller: %s", err)
os.Exit(1)
}
// Our domain logic that will print every add/sync/update and delete event we .
hand := &handler.HandlerFunc{
AddFunc: func(obj runtime.Object) error {
pod := obj.(*corev1.Pod)
log.Infof("Pod Add event: %s/%s", pod.Namespace, pod.Name)
return nil
},
DeleteFunc: func(s string) error {
log.Infof("Pod Delete event: %s", s)
return nil
// Create our retriever so the controller knows how to get/listen for pod events.
retr := &retrieve.Resource{
Object: &corev1.Pod{},
ListerWatcher: &cache.ListWatch{
ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
return k8scli.CoreV1().Pods("").List(options)
},
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
return k8scli.CoreV1().Pods("").Watch(options)
},