KerbernetesにおけるDMANの実行


分散アプリケーションランタイム、DAXは、クラウドまたは任意のエッジインフラストラクチャ上で実行できるポータブル、イベント駆動型ランタイムです.ビルディングブロックと呼ばれるコンポーネントにマイクロサービスアプリケーションを構築するためのベストプラクティスをまとめます.
あなたが1つ、いくつか、またはそれらのすべてのアプリケーションで使用できるように、各ビルディングブロックは完全に独立しています.ビルディングブロックは拡張可能であるので、あなた自身も書くことができます.
DAPAは、プログラミング言語やフレームワークなどの広い範囲をサポートしています.NET、Java、ノード.JS , GoとPythonそれはあなたのお気に入りのツールを使用して、マイクロサービスのアプリを書くことができますし、文字通りどこに展開することを意味します.

基本的に、ビルディングブロックはHTTPまたはGRPC APIで、アプリケーションコードから呼び出すことができます.サービス・コミュニケーション、国家管理、パブ/サブ、観測可能性、およびサービスのような開発中の主要な課題のいくつかを抽象化します.ビルディングブロックは基礎技術に依存しません.これは、例えば、あなたがApache Kafka、Rabbitmq、Redisストリーム、Azureサービスバス、またはDAXとのインタフェースを持つ他のサポートブローカーを使用できるパブ/サブ機能を実装する必要がある場合を意味します.
この例では、Kerbernetesクラスタ上でDRARを2つ実行する方法を示します.NETアプリケーション.つ目はApache Kafkaにメッセージを送りますが、2番目のものはそれらのメッセージを読み、REDISでそれらを保存します.KafkaとRedisへのコミュニケーションはDAYクライアントを使用して実現されます.これは、NuGetパッケージに依存関係がないことを意味しますConfluent.Kafka or StackExchange.Redis .

アーキテクチャ図


必要条件
このデモでは、次のマシンにインストールする必要があります.
  • クベルネッツkubectl
  • クベルネッツクラスターMinikube or Docker Desktop
  • また、リポジトリとcd 右側のディレクトリに
    git clone https://github.com/cvitaa11/dapr-demo
    cd dapr-demo
    

    ステップ1 -あなたのKubernetesクラスタのセットアップDiv
    あなたが必要とする最初のものはRBACが可能なKubernetesクラスタです.これは、Minikube/Dockerデスクトップを使用してマシン上で実行することができるか、それはAzureAKS または別のクラウドベンダーからいくつかの他の管理Kubernetesインスタンス.
    クラスタがあると、以下の手順に従ってddyを展開します.詳細についてはhere
    $ dapr init -k
    ⌛  Making the jump to hyperspace...
    ℹ️  Note: To install Dapr using Helm, see here: https://docs.dapr.io/getting-started/install-dapr-kubernetes/#install-with-helm-advanced
    
    ✅  Deploying the Dapr control plane to your cluster...
    ✅  Success! Dapr has been installed to namespace dapr-system. To verify, run `dapr status -k' in your terminal. To get started, go here: https://aka.ms/dapr-getting-started
    
    The dapr Kerbernetes展開が作成されるとすぐにCLIが終了します.Kubernetesの展開は非同期であるので、DAPA展開が継続する前に実際に完了することを確認する必要があります.

    ステップ2 -セットアップアパッチカフカ
    KubernetesクラスタでApache Kafkaを設定する最も簡単な方法はHelm パッケージマネージャー.開発マシンにヘルムをインストールするにはguide .
    私たちはBitnamy Library for Kubernetes ZookeperとKafkaメッセージブローカーを起動します.
    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install my-release bitnami/kafka
    

    ステップ3 -セットアップredis
    アパッチカフカと同じように、あなたのKubernetesクラスタ上でredisスピンする簡単な方法はヘルムを使用することです.
    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install redis bitnami/redis
    
    カフカのインストールを確認するにはkubectl get all また、similiarの出力が表示されるはずです.
    NAME                             READY   STATUS        RESTARTS   AGE
    pod/my-release-kafka-0           1/1     Running       0          18m
    pod/my-release-zookeeper-0       1/1     Running       0          18m
    pod/redis-master-0               1/1     Running       1          11m
    pod/redis-slave-0                1/1     Running       1          11m
    pod/redis-slave-1                1/1     Running       1          11m
    
    NAME                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    service/kubernetes                      ClusterIP   10.96.0.1        <none>        443/TCP                      15d
    service/my-release-kafka                ClusterIP   10.110.225.238   <none>        9092/TCP                     18m
    service/my-release-kafka-headless       ClusterIP   None             <none>        9092/TCP,9093/TCP            18m
    service/my-release-zookeeper            ClusterIP   10.99.95.252     <none>        2181/TCP,2888/TCP,3888/TCP   18m
    service/my-release-zookeeper-headless   ClusterIP   None             <none>        2181/TCP,2888/TCP,3888/TCP   18m
    service/redis-headless                  ClusterIP   None             <none>        6379/TCP                     11m
    service/redis-master                    ClusterIP   10.111.109.148   <none>        6379/TCP                     11m
    service/redis-slave                     ClusterIP   10.111.66.85     <none>        6379/TCP                     11m
    
    NAME                                    READY   AGE
    statefulset.apps/my-release-kafka       1/1     18m
    statefulset.apps/my-release-zookeeper   1/1     18m
    statefulset.apps/redis-master           1/1     11m
    statefulset.apps/redis-slave            2/2     11m
    

    Step 4 - KerbernetesクラスタのDAXコンポーネントを作成する
    pub/SubとState Storeのコンポーネントを配置するには、右のディレクトリに配置し、DAY YAMLマニフェストを適用してください.
    cd dapr-components
    kubectl apply -f .\kafka.yaml
    kubectl apply -f .\redis.yaml
    

    手順5 -配備する.NETコアアプリケーション
    すべての前提条件が準備ができたら、我々は我々のアプリを展開することができます.展開する.NETコアパブリッシャーとコンシューマーアプリケーションでは、右のディレクトリに配置し、Kubernetesマニフェストを適用することを確認します.
    cd k8s
    kubectl apply -f .\publisher.yaml
    kubectl apply -f .\consumer.yaml
    
    各マニフェストDeployment アプリケーションとService ブラウザ経由でアプリケーションにアクセスするためのオブジェクトです.
    移動するlocalhost:8081/swagger そして、あなたは私たちの出版社のアプリをポストメソッドでMessageController . このアクションは、KAFKAパブ/サブコンポーネント上のNewMessageトピックにメッセージを送信します.アプリケーションとメッセージブローカの通信は直接行われません.DAPAは発行元ポッド内のサイドカーコンテナとして実行され、メッセージを送信するプロセス全体を処理します.
    私たちの消費者アプリケーションはlocalhost:9091 そして、Kafkaパブ/サブコンポーネントの上で新しいメッセージ話題を購読します.新しいメッセージが到着すると、コンテンツとトラフを読んで、DRYクライアントはRedisステートストアUnderのキーメッセージに保存します.
    プロセス全体をテストするにはREDISクライアントPODを実行し、内容が格納されているかどうかを確認できます.まず、パスワードを変数に置き換えます.
    export REDIS_PASSWORD=$(kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" | base64 --decode)
    
    クライアントを次のコマンドで実行します.
    kubectl run --namespace default redis-client --rm --tty -i --restart='Never' \
        --env REDIS_PASSWORD=$REDIS_PASSWORD \
       --image docker.io/bitnami/redis:6.0.12-debian-10-r3 -- bash
    
    REDIS CLIを使用して接続します.
    redis-cli -h redis-master -a $REDIS_PASSWORD
    
    今あなたがredisに接続されている場合は、コマンドを使用することができますHGETALL message それは我々がカフカに送ったメッセージの内容を返します.これにより、全プロセスが機能することを確認した.
    あなたがDRYについてもっと知りたいならば、始まる最高の場所は公式ですdocumentation .