Windows containers in Kubernetes

Nós sabemos que boa parcela da infraestrutura que suporta as aplicações que mais utilizamos é baseada em sistemas Microsoft. Com o advento das tecnologias cloud native como o kubernetes, esses componentes parecem ter ficado para trás, porém isso não é totalmente verdade. Visando possibilitar a modernização dos sistemas baseados em windows, temos no kubernetes o suporte para Windows Containers, e é sobre ele que iremos falar hoje!
Motivadores
Como comentado brevemente na introdução do artigo, uma boa parcela dos sistemas web que estão em execução hoje em dia rodam em ambientes Microsoft, especialmente em ambientes windows.
Dito isso, as razões que você pode considerar para executar containers windows em um ambientes kubernetes irão variar conforme as necessidades do seu negócio, ficando a seu critério a tomada de decisão referente ao direcionamento de uso dessa arquitetura.

Um motivador muito comum para escolha dessa arquitetura é a falta de tempo para reformulação de uma aplicação que hoje já é executada em ambiente Microsoft e que sofreu certo tipo de evolução, atingindo a marca de ser containerizada. Executar essa aplicação em kubernetes pode trazer benefícios que um monolíto em um windows server não poderia fornecer, como a capacidade de escalabilidade horizontal.
Outro ponto também importante e frequentemente considerado na tomada de decisão é o uso de biblioteca do sistema. Caso sua aplicação utilize funcionalidades fornecidas a nível de sistema operacional, executar sua aplicação em um ambiente linux retirará recursos essenciais para o funcionamento do serviço, a não ser que seu código tenha sido previamente refatorado.
Em grandes empresas, onde o parque tecnológico é muito grande, é comum vermos diversas tecnologias diferentes sendo utilizadas para o mesmo propósito. Para reduzir essa complexidade, utilizar um orquestrador centralizado poderá economizar muita dor de cabeça dos times de tecnologia.
Características técnicas
Como qualquer outra solução, os containers windows tem suas particularidades. Já há algum tempo, o ecossistema do kubernetes foi preparado para permitir a execução de containers windows, garantindo o suporte da solução.
Para habilitar essa execução o primeiro passo é ter em seu cluster nodes que executem o sistema operacional windows. Esse é um pré requisito extremamente necessário dado que não será possível executar seu container sem ele.
Tendo em mente uma arquitetura produtiva que faça uso de nodes windows e linux, é interessante separar os nodes do seu cluster de alguma forma que permita que o seu time consiga identificar qual o sistema operacional executado naquele node, evitando dessa forma muita dor de cabeça em cenários de troubleshooting.

Uma solução para esse cenário é utilizar nos nodes os chamados node taints, que nos permitem taggear os nodes conforme desejado e selecionarmos através das labels onde desejamos que as aplicações tenham o deployment feito.
Com os nodes taggeados podemos utilizar no scheduling dos pods os Node Selectors, que nos permitirão selecionar quais hosts deverão receber aqueles pods. No cenário apresentado, os nodes selecionados serão os que tem como sistema operacional o windows.
Outros pontos para ficar de olho
Os reais motivadores para se utilizar containers windows em ambientes kubernetes já foram discutidos, mas de forma resumida, eles são “pessoais”, devendo ser determinados dentro da sua organização.
O que nós não podemos deixar de comentar é: existem diferenças que não podem ser deixadas de lado.
A construção de sistemas que utilizam como base um ambiente linux é totalmente diferente dos que utilizam ambientes windows. Não são todas as funcionalidades que estão disponíveis e as APIs não foram completamente estendidas.
Consultando diferentes fóruns na internet, algumas das diferenças mais notáveis são:
Permissionamento em arquivos - é configurado em um modelo de ACL (Access Control Lists).
File path - (quem nunca teve problema com isso, rs) onde utilizando windows, representamos os paths com a barra ao contrário (\).
Esquecendo um pouco esses pontos de atenção, gostaria de mencionar o incentivo que a comunidade vem tendo para evoluir esse cenário. Constantemente me pego lendo as releases notes das novas versões do kubernetes e frequentemente encontro menções a novas features que foram implementadas e que tem suporte para ambientes windows containerizados.
Portanto, independente do quão polêmico é o uso de windows em kubernetes é importante sabermos que a cada dia que se passa, essa combinação de tecnologias se torna ainda mais viável, abrindo as possibilidades para os mais diversos cenários que podemos encontrar!
Por menos convencional que seja, os containers Windows apresentam uma alternativa a execução de workloads em ambientes kubernetes. Você não precisa necessáriamente os utilizar, porém é interessante conhecer a possibilidade, que pode vir a ser útil a qualquer momento.
Muito obrigado por acompanhar até aqui, caso tenha alguma dúvida não deixe de me contatar.
Até logo!



