How to profile and debug a Java application running on Kubernetes
https://spoud-io.medium.com/how-to-profile-and-debug-a-java-application-running-on-kubernetes-34cdb1f0c05e
https://spoud-io.medium.com/how-to-profile-and-debug-a-java-application-running-on-kubernetes-34cdb1f0c05e
We Can Resize Pods without Restarts! Or Can't We?
https://www.perfectscale.io/blog/resize-pods-without-restarts
https://www.perfectscale.io/blog/resize-pods-without-restarts
Migrating from Istio to Linkerd
https://buoyant.io/blog/migrating-from-istio-to-linkerd
In this guide we'll walk you through a task that is increasingly common in the Kubernetes space: migrating an existing Istio deployment to Linkerd. We'll start with a general overview of our recommended strategy for approaching this task, and then dig into some of the gory details.
The good news is that most of the time, this is a pretty straightforward task that primarily consists of "removing lots of unnecessary Istio configuration". But as with all such changes, it can get a little hairy depending on the specifics of what your application does and how tightly you've (possibly accidentally) built dependencies to Istio's behavior. Happily, there is an incremental way to approach your migration which can help reduce overall risk—we'll talk about that below. Either way, be sure to read through carefully and think through your plan and strategy before you dive right in.
https://buoyant.io/blog/migrating-from-istio-to-linkerd
gemini
https://github.com/FairwindsOps/gemini
Gemini is a Kubernetes CRD and operator for managing VolumeSnapshots. This allows you to create a snapshot of the data on your PersistentVolumes on a regular schedule, retire old snapshots, and restore snapshots with minimal downtime.
https://github.com/FairwindsOps/gemini
television
https://github.com/alexpasmantier/television
Television is a fast and versatile fuzzy finder TUI.
It lets you quickly search through any kind of data source (files, git repositories, environment variables, docker images, you name it) using a fuzzy matching algorithm and is designed to be easily extensible.
https://github.com/alexpasmantier/television
Pushing the whole company into the past on purpose
https://rachelbythebay.com/w/2025/01/09/lag
Every six months or so, this neat group called the International Earth Rotation Service issues a directive on whether there will be a leap second inserted at the end of that six month period. You usually find out at the beginning of January or the beginning of July, and thus would have a leap second event at the end of June or December, respectively.
https://rachelbythebay.com/w/2025/01/09/lag
documentdb
https://github.com/microsoft/documentdb
DocumentDB offers a native implementation of document-oriented NoSQL database, enabling seamless CRUD operations on BSON data types within a PostgreSQL framework. Beyond basic operations, DocumentDB empowers you to execute complex workloads, including full-text searches, geospatial queries, and vector embeddings on your dataset, delivering robust functionality and flexibility for diverse data management needs.
PostgreSQL is a powerful, open source object-relational database system that uses and extends the SQL language combined with many features that safely store and scale the most complicated data workloads.
https://github.com/microsoft/documentdb
Kafka vs NATS: A Comparison for Message Processing
https://dzone.com/articles/kafka-vs-nats-message-processing
Kafka and NATS are both popular tools for message processing. This article provides a comparison between Kafka and NATS.
https://dzone.com/articles/kafka-vs-nats-message-processing
Go All the Way: Why Golang is Your Swiss Army Knife for Modern Development
https://blog.oodle.ai/go-all-the-way-why-golang-is-your-swiss-army-knife-for-modern-development
At Oodle's inception, we faced a common dilemma: choosing the right technology stack to get started. With a small team proficient in Go and a big vision, we needed a language that could handle everything from application development to infrastructure management. After careful consideration, we chose Go, and it has proven to be our Swiss Army knife for modern development. Here's why.
https://blog.oodle.ai/go-all-the-way-why-golang-is-your-swiss-army-knife-for-modern-development
tfmv
https://github.com/suzuki-shunsuke/tfmv
tfmv is a CLI to rename Terraform resources, data sources, and modules and generate moved blocks.
https://github.com/suzuki-shunsuke/tfmv
Forwarded from Performance matters!
Алгоритмы управления потоком (Flow Control) в TCP служат для предотвращения перегрузки сети и потерь данных.
Исследования в этой области не прекращаются и на сегодня нам доступно множество вариантов:
*
*
*
*
*
*
*
* ...
По умолчанию в Linux используется
Так может нам просто переехать на новые рельсы?
Хотя кажется правильнее поставить вопрос по другому: в каких случаях какой алгоритм может быть предпочтительнее?
————
Алгоритмы Flow Control можно условно разделить на два типа:
1. Loss-based (ориентированы на потери пакетов):
2. Delay-based (ориентированы на изменения RTT):
Основная цель любой реализации Flow Control — максимально эффективно использовать пропускную способность канала, сохраняя баланс между скоростью передачи данных и предотвращением перегрузок.
Скорость регулируется через Congestion Window (окно перегрузки) — сколько данных можно отправить без получения подтверждения.
Разница между подходами к контролю перегрузки заключается в методах её определения.
Loss-based (CUBIC)
Алгоритмы этого типа оценивают перегрузку по потерям пакетов.
Пришел дублирующий ACK или сработал Retransmission Timeout (RTO)? Значит есть потери и следовательно канал перегружен - снижаем скорость.
Затем ориентируясь на поступающие ACK, скорость увеличивается, пока не обнаружатся новые потери.
Такой подход может забивать очереди в канале до предела, что и будет приводить к потерям. Реакция носит реактивный характер: перегрузка фиксируется только после её возникновения.
Delay-based (BBR)
В Delay-based алгоритмах, таких как BBR, перегрузка оценивается на основе изменения задержек:
* минимальный RTT (
* если текущий RTT (
Таким образом, BBR стремится избегать заполнения очередей, что позволяет сократить задержки.
Его подход более превентивный: предотвращение перегрузки до её появления.
————
Внутри дата-центров, где RTT низкий,
Вообщем как обычно надо быть осторожее!
Почитать:
- https://blog.apnic.net/2017/05/09/bbr-new-kid-tcp-block/
- https://book.systemsapproach.org/congestion.html
- https://tcpcc.systemsapproach.org/
tags: #network #tcp
Исследования в этой области не прекращаются и на сегодня нам доступно множество вариантов:
*
Reno
(1986)*
New Reno
(1999)*
CUBIC
(2004)*
FAST TCP
(2005)*
BBRv1
(2016)*
BBRv2
(2019)*
BBRv3
(2023)* ...
По умолчанию в Linux используется
CUBIC
. Однако создатели BBR (Google) выкладывают любопытные исследования, где резюмируют:BBR enables big throughput improvements on high-speed, long-haul links...
BBR enables significant reductions in latency in last-mile networks that connect users to the internet...
Так может нам просто переехать на новые рельсы?
Хотя кажется правильнее поставить вопрос по другому: в каких случаях какой алгоритм может быть предпочтительнее?
————
Алгоритмы Flow Control можно условно разделить на два типа:
1. Loss-based (ориентированы на потери пакетов):
Reno
, NewReno
, CUBIC
2. Delay-based (ориентированы на изменения RTT):
FAST TCP
, BBRv*
Основная цель любой реализации Flow Control — максимально эффективно использовать пропускную способность канала, сохраняя баланс между скоростью передачи данных и предотвращением перегрузок.
Скорость регулируется через Congestion Window (окно перегрузки) — сколько данных можно отправить без получения подтверждения.
Разница между подходами к контролю перегрузки заключается в методах её определения.
Loss-based (CUBIC)
Алгоритмы этого типа оценивают перегрузку по потерям пакетов.
Пришел дублирующий ACK или сработал Retransmission Timeout (RTO)? Значит есть потери и следовательно канал перегружен - снижаем скорость.
Затем ориентируясь на поступающие ACK, скорость увеличивается, пока не обнаружатся новые потери.
Такой подход может забивать очереди в канале до предела, что и будет приводить к потерям. Реакция носит реактивный характер: перегрузка фиксируется только после её возникновения.
Delay-based (BBR)
В Delay-based алгоритмах, таких как BBR, перегрузка оценивается на основе изменения задержек:
* минимальный RTT (
RTT_min
) принимается за эталон;* если текущий RTT (
RTT_now
) превышает RTT_min
, алгоритм предполагает, что канал перегружен, и снижает скорость передачи данных.Таким образом, BBR стремится избегать заполнения очередей, что позволяет сократить задержки.
Его подход более превентивный: предотвращение перегрузки до её появления.
————
CUBIC
проигрывает BBR
в сетях с высоким RTT, например, в интернете. Это происходит из-за медленного роста скорости после обнаружения потерь: ACK приходят с задержкой.Внутри дата-центров, где RTT низкий,
CUBIC
должен справляться лучше - быстрые ACK ускоряют рост скорости передачи данных.BBR
же в таких сетях может не дать преимуществ. При всплесках трафика он снижает скорость, чтобы избежать заполнения очередей, из-за чего канал используется не полностью. Кроме того, возможны конфликты между алгоритмами, когда та или иная реализация будет захватывать пропусную способность, вытесняя другие. Настоящие войны)Вообщем как обычно надо быть осторожее!
Почитать:
- https://blog.apnic.net/2017/05/09/bbr-new-kid-tcp-block/
- https://book.systemsapproach.org/congestion.html
- https://tcpcc.systemsapproach.org/
tags: #network #tcp
Google Cloud Blog
TCP BBR congestion control comes to GCP – your Internet just got faster | Google Cloud Blog
GitOps Secrets with Argo CD, Hashicorp Vault and the External Secret Operator
https://medium.com/containers-101/gitops-secrets-with-argo-cd-hashicorp-vault-and-the-external-secret-operator-eb1eec1dab0d
In this post, we showcase the External Secret Operator and Hashicorp Vault and focus on 2 important aspects.
- How to avoid saving ANY secrets in Git, including tokens for fetching the application secrets
- How to refresh secrets automatically without pod restarts and application deployments
https://medium.com/containers-101/gitops-secrets-with-argo-cd-hashicorp-vault-and-the-external-secret-operator-eb1eec1dab0d
A hands-on lab: Why running as root in Kubernetes containers is dangerous?
https://medium.com/@marcin.wasiucionek/why-is-running-as-root-in-kubernetes-containers-dangerous-e5f1a116080e
https://medium.com/@marcin.wasiucionek/why-is-running-as-root-in-kubernetes-containers-dangerous-e5f1a116080e
Securing Secrets in Confidential Containers: Usage patterns to avoid
https://itnext.io/securing-secrets-in-confidential-containers-usage-patterns-to-avoid-941388cde546
https://itnext.io/securing-secrets-in-confidential-containers-usage-patterns-to-avoid-941388cde546
Exposing Ports in Kubernetes: What You Should Know
https://awsmorocco.com/exposing-ports-in-kubernetes-what-you-should-to-know-cd1a80655f6c
https://awsmorocco.com/exposing-ports-in-kubernetes-what-you-should-to-know-cd1a80655f6c
Kubernetes Operator. Create the one with Kubebuilder
https://fenyuk.medium.com/kubernetes-operator-create-the-one-with-kubebuilder-5d1ac240d0d4
One of possible way to customize the Kubernetes cluster is to use Operators. They extend Kubernetes capabilities by automating the lifecycle management of applications beyond what’s natively supported. This process is powered by Custom Resource Definitions (CRDs) and Custom Resources (CRs). CRDs allow you to define your own API objects, while CRs are the instances of these definitions.
https://fenyuk.medium.com/kubernetes-operator-create-the-one-with-kubebuilder-5d1ac240d0d4
Native Grafana plugins for VictoriaMetrics and VictoriaLogs
https://grafana.com/grafana/plugins/victoriametrics-metrics-datasource
https://grafana.com/grafana/plugins/victoriametrics-logs-datasource
https://grafana.com/grafana/plugins/victoriametrics-metrics-datasource
https://grafana.com/grafana/plugins/victoriametrics-logs-datasource
kubectl-modify-secret
https://github.com/rajatjindal/kubectl-modify-secret
kubectl-modify-secrets allows user to directly modify the secret without worrying about base64 encoding/decoding
https://github.com/rajatjindal/kubectl-modify-secret