Katenary ile docker-compose'u helm chart'a çevirmek
Tags: kubernetes, helm, katenary, docker
Published: 2023-05-08 07:50:00

**Katenary** uygulaması, elinizde bulunan bir "**docker-compose**" dosyasını **Helm Chart**'a çevirip, Helm Kubernetes paket yöneticisi ile kurulabilmesini sağlar. Katenary uygulaması [açık kaynak kodlu bir uygulama](https://github.com/metal3d/katenary) olup golang dili ile yazılmıştır.

# Katenary kurulumu

Basitçe Katenary kurmak için aşağıdaki komutu çalıştırmanız yeterlidir. Uygulamayı kullanabilmek için Kubernetes ortamına gereksinim yoktur.

```bash
sh <(curl -sSL https://raw.githubusercontent.com/metal3d/katenary/master/install.sh)
```

# docker-compose'u Helm'e çevirme

Elinizde bir docker-compose.yml dosyası olduğunu varsayarsak tek bir komut ile ilgili docker-compose dosyası Helm yapısına dönüşmektedir.

```bash
katenary convert -c docker-compose.yml -o ./charts
```

Yukarıdaki komut ile docker-compose.yml bulunan dizinde charts isminde bir klasör oluşturarak içeriğinde loglarda görülebileceği gibi servis ve deployment yapılandırmalarını içermektedir. İlgili komutu çalıştırdığınızda aşağıdaki gibi olumlu bir çıktı olmasını beklemekteyiz.

```
Do you really want to continue? [y/N]: y
📦 Generating deployment for  ornekuygulama
📦 Generating deployment for  redis
⚡ Generate volume values core for container named ornekuygulama in deployment ornekuygulama
⚡ Generate volume values certs for container named ornekuygulama in deployment ornekuygulama
📦 Generating deployment for  db
🔌 Generating service for  ornekuygulama
📦 Generating deployment for  ornekiki
⚡ Generate volume values db for container named db in deployment db
🔌 Generating service for  db
```

Bu şekilde olumlu olmayan durumlarda çeşitli docker-compose yapılandırma ayarının eksik olduğu gibi bilgiler dönerek sizi ilgili bilgileri doldurmanızı teşvik etmektedir.

# Helm chart klasörü içeriği

Bu şekilde oluşan klasör içerisinde "**Chart.yaml**" ve "**values.yaml**" dosyası ve "**templates**" klasörü bulunmaktadır. 

**templates** klasörü içerisinde servis, pvc ve deployment yapılandırma ayarları bulunmaktadır. Kubernetes üzerinde sistemin ayağa kalkması için önemli dosyalardır.

**Chart.yaml** dosyası içerisinde, Helm Chart paketi için temel bazı içerikler otomatik oluşmaktadır ve yaklaşık olarak aşağıdaki gibidir:

```
# Katenary command line: katenary convert -c docker-compose.yml -o ./charts
apiVersion: v2
appVersion: 0.0.1
description: A helm chart for ornekuygulama
name: ornekuygulama
type: application
version: 0.1.0
```

**values.yaml** dosyası içerisinde, kubernetes ortamı ayağa kalkarken gerekli olan değişkenleri tutmaktadır. Bunlar servis ve deploymenlar için; hem ortam değişkenleri, hem repository ve imaj bilgileri, hem dosya storage bilgileri olabilmektedir.

# Helm Chart dosyası oluşturma

Helm Chart klasöründen dosya oluşturabilmek için Chart.yaml dosyasının olduğu yerde aşağıdaki komut ile bir kontrol yapılabilir. Bunun için öncelikle Helm'in de yüklü olması gerekmektedir. Bu durum için Kubernetes ortamı kurulu olması gerekmemekte, sadece Helm yüklü olması yeterlidir.

```bash
helm lint
```

Bu komutla temel düzeyde bir paket kontrolü sağlanmaktadır. Örneğin bu komut ile ikon bilgisinin eksik olduğunu aşağıdaki şekilde dönerek, sorun olmadığını belirtmektedir.

```
==> Linting .
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed
```

Sonrasında bir üst dizine (Chart.yaml'ın bulunduğu dizinin üst dizini) yani klasörün olduğu dizine çıkarak helm package komutu uygulanabilir.

```bash
cd ../
helm package ornekuygulama
```

Bu adım sonrasında aşağıdaki gibi Helm Chart oluşmaktadır.

```
Successfully packaged chart and saved it to: /PATH/charts/ornekuygulama-0.1.0.tgz
```

# Elle Helm Chart kurulumu

Oluşan dosya Kubernetes ortamına entegre helm yapısı üzerinde aşağıdaki gibi kurulabilmektedir.

```bash
helm install releaseismi ornekuygulama-0.1.0.tgz
```

Helm kurulumu sonrası aşağıdaki gibi bir çıktı beklemekteyiz.

```
NAME: releaseismi
LAST DEPLOYED: Sun May  X 14:05:07 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Congratulations,

Your application is now deployed. This may take a while to be up and responding.
```

-----------------------


"Başkalarının yaptıklarına söylediklerine ve düşündüklerine aldırış etmeyen, sadece iyi bir insan olmak için kendi yaptıklarıyla ilgilenen bir insan ne çok zaman kazanır."

Marcus Aurelius - Kendime...