LoginSignup
1
0

Kubernetes: Fleet + Helmでアプリケーションをデプロイしてみる

Posted at

TL;DR

簡単なPythonスクリプトをFleet + HelmでMinikube環境にデプロイしてみました。
この記事ではデプロイ方法およびFleetについて解説します。

この記事で取り扱うPythonスクリプトやマニフェスト等の設定は、以下のリポジトリにあります。
https://github.com/cacapouh/simple-app

Fleetのインストール

ざっくり言いますと、
Fleetは、GitOpsを活用してコンテナおよびデプロイメントを効果的に管理するエンジンです。

公式サイトの説明にあるように、以下のコマンドでKubernetes環境にデプロイすることができます。

helm -n cattle-fleet-system install --create-namespace --wait fleet-crd \
    fleet/fleet-crd
helm -n cattle-fleet-system install --create-namespace --wait fleet \
    fleet/fleet

デプロイ対象のPythonスクリプト

サンプルアプリとして、環境変数VERSIONを標準出力するものをデプロイします。
以下はそのためのPythonスクリプト, Dockerfileです。

main.py
import os

if __name__ == '__main__':
    print("version: {}".format(os.environ["VERSION"]))
Dockerfile
FROM python:3.9

RUN mkdir /work
WORKDIR /work
COPY main.py /work

ENTRYPOINT python main.py

以下のコマンドでDockerビルドできます。

docker build . -t simple-app
minikube image load simple-app:latest  # イメージをロードしておく

PythonスクリプトをHelm Chartに

helm createコマンドでHelm Chartを初期化します。

Helmのテンプレート機能につきましては、以下の記事でも説明していますので宜しければご一読お願いします。

以下は、Helm Chart内で扱うdeployment.ymlChart.yamlの設定です。

deployment.ymlではPythonスクリプトの方で読み込む環境変数VERSIONを設定しています。
VERSIONにはChart.yamlの設定値versionが設定されます。

deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-app-deployment
  labels:
    app: simple-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simple-app
  template:
    metadata:
      labels:
        app: simple-app
    spec:
      containers:
      - name: simple-app
        image: "simple-app:latest"
        imagePullPolicy: IfNotPresent
        env:
          - name: VERSION
            value: "{{ .Chart.Version }}"
Chart.yml
apiVersion: v2
name: helm
description: A Helm chart for Kubernetes
type: application
version: 0.0.1
appVersion: "0.0.1"

最後に上記のファイル群を適当なGitリポジトリにpushします。
この記事では、以下のリポジトリにpushしました。

FleetにGitリポジトリを監視させる

FleetのGitRepoというカスタムリソースをデプロイすることによって、
Gitリポジトリの監視設定を加えることが可能です。

以下は https://github.com/cacapouh/simple-app を監視するマニフェストです。
デフォルト設定はmainではなくてmasterブランチを監視するようになっているため注意が必要です。

repo.yml
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
  name: simple-app-repo
  namespace: fleet-local
spec:
  repo: https://github.com/cacapouh/simple-app
  branch: main
  paths:
  - helm
マニフェスト適用
kubectl apply -f repo.yml

デプロイ結果

以下は、リポジトリ監視設定追加後にデプロイされたアプリケーションのログを確認した結果です。
Podのログにversion: 0.0.1が出力されましたので、正しく動いていそうです。

$ kubectl get pods
NAME                                     READY   STATUS      RESTARTS     AGE
simple-app-deployment-75d7b88c6c-2c5k2   0/1     Completed   1 (3s ago)   3s

$ kubectl logs simple-app-deployment-75d7b88c6c-2c5k2 
version: 0.0.1

おわりに

簡単なPythonスクリプトをHelmパッケージとしてまとめて、
Gitリポジトリにpushして、それをFleetに監視させることによってデプロイができました :thumbsup:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0