Kotlin , Kubernetes , Linkerdによるマイクロサービス
KHipster is a development platform to generate, develop and deploy Spring Boot + Angular/React/Vue Fullstack Web applications and Spring microservices. KHipster is built on top of JHipster.
この投稿では次のように行います.
Kipsterでマイクロサービスを生成する
ステップ1:インストール
KipsterはNPMパッケージとして利用可能です.インストールするには
λ npm i -g generator-jhipster-kotlin
Do not have Node installed? Check out
nvm
(Node Version Manager) that makes it easy to setup Node - here.
次に、実行してインストールを確認します.
λ khipster
Step 2 : JDLファイルの作成
The JDL is a JHipster-specific domain language.
JDLはアプリケーション、展開、エンティティ、およびそれらの関係を記述するためにDSLを提供します.
Applications
サービス全体を参照してください、アプリケーションはモノリスやマイクロサービスすることができます.The deployments
アプリケーションを展開する方法を参照してくださいkubernetes
. The entities
あなたのアプリケーションのデータベース表への直線マップ.The relationships
エンティティの関係を参照しますone-to-one
, one-to-many
, など.JDLは、マイクロサービスアプリケーションとエンティティを作成するプロセスを簡素化します.// Gateway application
application {
config {
applicationType gateway
authenticationType jwt
baseName gateway
buildTool gradle
clientFramework react
databaseType sql
devDatabaseType h2Disk
prodDatabaseType mysql
packageName com.sendilkumarn
serverPort 8080
serviceDiscoveryType no
}
entities *
}
// Microservice application
application {
config {
applicationType microservice
authenticationType jwt
baseName service
buildTool gradle
databaseType sql
devDatabaseType h2Disk
prodDatabaseType mysql
packageName com.sendilkumarn
serverPort 8081
serviceDiscoveryType no
}
entities product
}
// Product entity
entity product {
name String required
price Long required
}
2つのアプリケーションを定義しました.gateway
and service
, エンティティとエンティティ:product
. 間の大きな違いgateway
and service
:gateway
用途clientFramework
ASreact
, applicationType
ASgateway
service
用途applicationType
ASmicroservice
Refer we have used
serviceDiscoveryType no
, this implies that we are not using serviceDiscovery in the microservices. We will use Linkerd for servicediscovery.Did you know? JHipster supports
sql
andnoSql
database and it has many configuration options for generating the applications. Check the entire list of application configuration options here.
Kubernetesの設定を生成する
Kipster提供
kubernetes
Kubernetes設定ファイルを生成するオプションJHipster
生成アプリケーション.Kubernetesチェックアウトについてより調査することに興味があるhere . The jdl
受け入れるdeployment
Kubernetes展開を定義するブロック.deployment {
deploymentType kubernetes
appsFolders [gateway, service]
dockerRepositoryName "sendilkumarn"
serviceDiscoveryType no
istio false
kubernetesNamespace khipster
kubernetesServiceType Ingress
}
Note: It checks whether you have installed Docker since we need Docker for creating and pushing the images and use them later.
Kubernetesの定義は
deployment
ブロック付きdeploymentType
ASkubernetes
. The appsFolders
生成されたアプリケーションのフォルダにポイントします.私たちはdockerRepositoryName
, ここではDockerユーザ名を参照します.アプリケーションと同様に、serviceDiscoveryType
ASno
(私たちは使用するのでLinkerd
サービスディスカバリ用).Kipster提供istio
私たちが利用するので、箱からLinkerd
そのために.使用するKubernetes名前空間を定義しますkubernetesNamespace
プロパティ.すべての展開とサービス使用khipster
アプリケーションを配備する名前空間.最後に、私たちは
Ingress
としてKubernetesServiceType
設定.Kubernetesの最小展開単位はpod
. PODはDockerコンテナのグループです.詳細についてはpods . 各podはその作成中にIPアドレスを取得します.アプリケーションにアクセスしなければならないなら、PODのIPアドレスに接続しなければなりません.kubernetesクラスタでは,podsは様々な要因に基づいて自動的に生成され,破壊される.それで、ポッドが新しく発生するとき、それらを参照しているIPアドレスは変わるかもしれません.ポッドで実行中のアプリケーションに接続するには、サービスを使用します.サービスは、ポッドのセットとそれらにアクセスする方法を定義します.サービスは、それに名前でポッドを識別するのに役立つloadbalancerまたはサービス発見者のようです.Kubernetesは3種類のサービスタイプを提供します.
Ingressはサービスタイプではありませんが、Ingressでサービスを公開できます.侵入はクラスタのエントリポイントとして機能します.同じIPアドレスの下で複数のサービスを公開することは理想的です.
We need
ingress-controller
to expose services via ingress IP, we will set up ingress-controller below.
Kipsterを使用してコードを生成する
The
khipster import-jdl
インポートJDL
ファイルと配備構成ファイルを生成します.λ khipster import-jdl app.jdl
Gateway application generated successfully.
Service application generated successfully.
Kubernetes configuration generated successfully.
ログインしてくださいdocker login
. それぞれのフォルダで各サービスを行ってビルドします.λ ./gradlew bootJar -Pprod jib -Djib.to.image=<docker-username>:<app-name>
でクラスタを作成する
Install gcloud here.
λ gcloud beta container --project <project-name> clusters create "khipster-cluster" --machine-type "c2-standard-4" --num-nodes "2" --zone "us-central1-c"
クラスタ名を作成しますkhipster-cluster
与えられたプロジェクトで.私たちはmachine-type
with c2-standard-4
で2ノードus-central1-c
ゾーン.ゼロからクラスタを作成しなければならないので、これは完了するのにしばらくかかります.Explore more about K8s installation in the GCP here.
Linkerd CLIをインストールし、KubernetesクラスタでLinkerdを展開します
Linkerd is a
service mesh
for Kubernetes. Linkerd makes running services easier and safer by giving you runtime debugging, observability, reliability, and security—all without requiring any changes to your code. - Linkerd website
CLIをシステムに手動でインストールし、パスを設定します.
λ curl -sL https://run.linkerd.io/install | sh
Linkerd stable-2.9.0 was successfully installed 🎉
λ export PATH=$PATH:$HOME/.linkerd2/bin
次のように実行します.λ linkerd version
Client version: stable-2.9.0
Server version: unavailable
インストールが完了したら.KubernetesクラスタにLinkerdをインストールする前に、Kubernetesクラスタが正しく設定されているかどうかを確認します.次のコマンドを実行します.λ linkerd check --pre
....
Status check results are √
The above command checks whether the kubernetes cluster is configured correctly and ready to install the Linkerd control plane.
注意:裸のKubernetes設定では、必要なクラスタ管理機能がない場合があります.作成する
clusterrolebinding
with cluster-admin
選択したアカウントの役割.λ kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin \
--user="$(gcloud config get-value core/account)"
clusterrolebinding.rbac.authorization.k8s.io/cluster-admin-binding created
KubernetesクラスタにLinkerdをインストールするには、次の手順を実行しますλ linkerd install | kubectl apply -f -
The linkerd install
コマンドはKubernetes設定ファイルを作成します.設定ファイルをパイプでパイプしますkubectl apply -f
それらの生成されたファイルのコマンド.これは完全に作成されますlinkerd
Kubernetesクラスタでインストールが完了したらインストールを完了しますλ linkerd check
KubernetesでのIngressコントローラの配備
Ingress exposes
HTTP
andHTTPS
routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.
IngressはKubernetesクラスタ内で動作するサービスに接続する外部IPを提供します.イングルは、ロードバランシング、SSL/TLSなどを提供します.バニラバージョンのnginx ingressコントローラをインストールします.
λ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/cloud/deploy.yaml
一度、インクルードコントローラがKubernetesクラスタにインストールされます.次のコマンドを実行してIPアドレスを取得します.λ kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
xxx.xxx.xxx.xxx
我々のアプリケーションは、上記のIPアドレスを介してアクセスできます.Kubernetesクラスタにおけるアプリケーションの配備
Kubernetesクラスタにアプリケーションを配備するには、Kubernetesフォルダに移動し、次のコマンドを実行します.
λ ./kubectl-apply.sh apply -f
すべての展開とサービスはK 8 Sクラスタにインストールされます.今、私たちは自動的にLinkerdを注入する必要がありますkhipster
特定の名前空間のすべてのサービスの名前空間.次に、Linkerdを追加しましょう
khipster
実行時の名前空間:λ kubectl get -n khipster deploy -o yaml \
| linkerd inject - \
| kubectl apply -f -
You can also inject proxy automatically. Refer here for more information.
現在、Kubernetesクラスタはすべての必要な構成で準備ができています.
アプリケーションへの設定トラフィック
ここで最後のステップはサービスへのサービスサービスをマップすることです.注意
annotation
にmetadata
セクションでは、NGNXプロキシプロキシヘッダーHTTPプロキシを使用します.参照here を参照してください.apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-ingress
namespace: khipster
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header l5d-dst-override $service_name.$namespace.svc.cluster.local:$service_port;
spec:
rules:
- host: <ip-address>.nip.io
http:
paths:
- path: /
backend:
serviceName: gateway
servicePort: 80
- path: /service
backend:
serviceName: service
servicePort: 8081
.nip.io refer the nip.io at the end. nip.io helps to redirect check here
また、
spec
セクション.specセクションはリダイレクトのルールを提供します.ホストを提供し、名前を付けてサービスへのパスをマップします.ビオラ!今すぐアプリケーションが準備ができて!移動する<ip-address>.nip.io
マイクロサービスの実行を確認する.リンカと一緒に来る
dashboard
& grafana
サービス、トラフィック、およびすべてを監視する.あなたはそれらをチェックアウトすることができますlinkerd dashboard
.//💻 GitHub // ✍️ Blog
Reference
この問題について(Kotlin , Kubernetes , Linkerdによるマイクロサービス), 我々は、より多くの情報をここで見つけました https://dev.to/sendilkumarn/microservices-with-kotlin-kubernetes-and-linkerd-4i4pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol