SkaffoldであなたのローカルKubernetes発展を単純化する方法

8871 ワード

正直に答えましょう、我々が通常Kubernetes関連の環境を想像する方法?これまでのところ、
  • docker コンテナイメージを構築するために(ローカルで実行しますが、通常はテスト用にのみ実行します).
  • コンテナイメージを保存して、彼らをKubernetesのために利用できるようにするDocker Registry

  • YAMLはコンテナ、ポッドを説明する.我々は実際にKubernetesで実行したい.これらのYAMLファイルは私たちが作成したDocker画像を参照できます.
  • kubectl Kubernetes APIへのリクエストを作成するツールとして(そして、YAMLに基づくオブジェクトを作成する).
  • helm 一緒にヤスリを包装して、ものを構成可能にするために.
  • 今何か新しいものを加えましょう.今私たちは実際のアプリに取り組んでいると仮定し、いくつかのコードの変更を行い、それらを展開したい.どうすればいいのでしょうか
  • 最初にコードを変更します.
  • 次に、新しいDocker画像をビルドします.私たちが離れてそれらを伝えることができるように、より良い彼らに古いDocker画像より異なるタグを与えます.
  • その後、Dockerレジストリに新しいDocker画像を押してください.
  • KYBERNETESにYAMLを再配備します.おそらく使用helm : 我々が使用したいコンテナイメージはhelm . したがって、展開する前に設定を変更します.
  • 🐌🐌🐌 それは多くのステップです!Kubernetesはクールですが、それは我々の開発の苦境を遅くします.
    ここはどこですskaffold 写真が来る.Skaffoldは少し接着剤層です(これ以上ですが、今のところこれを使います).
  • Docker画像を作成する
  • プッシュする
  • その後、使用してKuberNetesリソースをhelm ) Dockerイメージで、それはちょうど造られます
  • そして、それは1つのコマンドですべてをします.
    Skaffold 〜13 Kです⭐ オープンソースのCLIツールは、継続的な開発とKubernetesアプリケーションの展開を支援する具体的に開発者を目指してGoogleによって作成された.
    その後、ローカルのアプリケーションソースコードを反復処理できますdeploy to local [リモート] KubernetesクラスタSkaffoldは、ビルド、プッシュ、およびアプリケーションの配備のワークフローを処理します.
    最も基本的なレベルでは、skaffoldはこのように動作しますit:
  • あなたのアプリのKubernetes設定ファイルを作成します
  • アプリケーションをローカルまたはリモートのクラスタに配備する
  • あなたのソースコードをモニターし、必要に応じて自動的に再配備する
  • あなたのローカル端末からあなたのローカル端末に
  • しかし、Skaffoldもこの基本的な機能の上にいくつかの高度な機能を提供しています.まず最初に、skaffoldは拡張可能なプラグイン可能なアーキテクチャを提供します.そして、開発者が彼らのアプリケーションを構築して、配備することに関係している各々のステップのために適切なツールを選ぶのを許します.スカフェルドattempts to provide portability 異なるビルドシステム、イメージレジストリおよび配置ツール間のCI統合.skaffold また、あなたのアプリケーションイメージを押すことによってDocker Registriesと対話することができます.それは明白なKubernetesマニフェストで働くことができますhelm パッケージマネージャとしては任意です).
    下の図はskaffold ワークフローは、構成ファイルの生成や、両方の実行モードでの展開ライフサイクルを含みます.

    Skaffoldによる展開


    Skaffoldは2つの異なるモードで使用できます.

    ⚙️ 開発モード


    コマンドを発行することでskaffold dev . 開発モードでは、ソースコードの変更を監視し、自動的にすべての適切なDocker画像を生成し、Kubernetesクラスタに画像を展開します.さらに、それは展開されたアプリケーションからのログストリーミングを提供します.

    ⚙️ 展開モード


    コマンドを発行することでskaffold run . このモードでは、Skaffoldは一度だけパイプラインを実行し、パイプライン内の任意のエラーで終了します.これは、アプリケーションの開発の完了後に健全性チェックとして使用することができますので、便利です.
    足場の主な特徴は以下の通りです.
  • それはあなたのソースコードのローカルな変更を監視し、自動的にビルド/ローカルまたはリモートKubernetesクラスタに展開をプッシュします.
  • これは、リモートおよびローカルDockerエンジンやレジストリをサポートしています.(リモートDockerエンジンを使用すると、ビルド時間が大幅に増加することがあります.
  • アプリケーション間の依存関係を追跡し、変更されたものを自動的に展開できます.
  • さまざまなワークフローをサポートするために各実装を構成可能にするAPIをビルドして展開する機能を備えた既存のツールとワークフローをサポートします.
  • Skaffoldの主な利点の一つは、それが提供する統合の数です.これにはネイティブのサポートがあります.
  • ビルドキット
  • Google cloud build
  • Kustomize
  • The skaffold.yaml 主な構成ファイルであるファイルには、アプリケーションを構築し展開する方法を変更するためのいくつかのオプションがあります.それは本質的にもテストやプッシュ画像の世話をすることができますローカル開発のためのミニCI/CDソリューションです.
    Linux用のスタンドアロン実行可能ファイルを使用して、Skaffoldインストールを完了します.インストール手順は次のとおりです.
    Skaffoldの最新版をダウンロードして、それをアンパックして、あなたの所にそれを置いてください$PATH . Skaffold実行可能とバージョンを確認する
    $ curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \
    sudo install skaffold /usr/local/bin/
    

    アプリケーションの設定


    このチュートリアルでは、スプリングブートアプリケーションを使用します.それは、中で単純な挨拶メッセージを返す1つの終点を提供しますJSON 形式.ここに例のアプリケーションを見つけることができます.
    アプリケーションを実行するには、まずDockerfile アプリケーションを格納するファイル.以下に例を示します.
    FROM maven:3-jdk-11 as BUILD
    COPY . /usr/src/app
    RUN mvn --batch-mode -f /usr/src/app/pom.xml clean package
    FROM openjdk:11-jre-slim
    ENV PORT 42050
    EXPOSE 42050
    COPY --from=BUILD /usr/src/app/target /opt/target
    WORKDIR /opt/target
    CMD ["/bin/bash", "-c", "find -type f -name '*.jar' | xargs java -jar"]
    
    に加えてDockerfile , また、私たちはk8s-app.yaml Skaffold設定ファイルを生成するファイル.シンプルバージョンk8s-app.yaml ファイルを以下に示します:
    apiVersion: v1
    kind: Pod
    metadata:
      name: skaffold-demo
    spec:
      containers:
      - name: skaffold-demo
        image: roukou/skaffold-demo
    
    さて、skaffold設定ファイルはコマンドを発行することで生成できます.
    $ skaffold init
    
    このコマンドはskaffold.yaml file containing all needed information アプリケーションを所望のKubernetesクラスタに構築して配備するには.生成されるskaffold.yaml ファイルは
    apiVersion: skaffold/v1beta28
    kind: Config
    build:
      artifacts:
      - image: roukou/skaffold-demo
    deploy:
      kubectl:
        manifests:
        - k8s-app.yaml
    
    新しいプロジェクトを作成するとき、Skaffold Configsをブートすることができますinit コマンド(非常に便利な機能).また、いくつかの設定を定義することができます:開発のための1つの設定、および実行コマンドを介してステージ環境に展開する別のものdev この場合、Skaffoldは変更を監視しません.

    アプリケーション展開フロー


    設定ファイルの作成後、目的のアプリケーションを配備する2つのオプションがあります.開発時にはコマンドを使用できます.
    $ skaffold dev --default-repo localhost:32000
    
    上記のコマンドは、ファイルが変更されたときにアプリケーションを継続的に展開します.それはすべての変更のソースコードファイルを監視し、高速再展開を行います.
    一度配備してコードの変更を追跡しない場合は、runコマンドを実行します.
    $ skaffold run --default-repo localhost:32000
    
    使用するinsecure MicroK8s repo ここでは、あなた自身を使用する自由です.もし--default-repo がユーザによって提供される.there is no automated image name rewriting , そして、SkaffoldはYAMLで提供されるようにイメージをプッシュしようとします.
    成功した展開の後、アプリケーションがKubernetesクラスタでおなじみのKubectlコマンドを使用して配備されているかどうかを確認できます.
    $ kubectl get pods
    
    コマンドを使用してアプリケーションが実行されていることを確認できます.
    $ curl http:///skaffold/api/v1.0 
    
    また、アプリケーションが期待どおりに展開されていることを確認するには、Kubernetesダッシュボードを確認できます.
    最後に、削除コマンドで配備されたアプリケーションを削除できます.
    $ skaffold delete
    
    要約すると、Skaffoldは、ヘルムを必要としない非常に柔軟なソリューションであり、どのような統合を使用することができますどのような種類で非常に広範です.