こんにちはspring-cloud-kubernetes
19522 ワード
spring-cloud-kubernetesについて
Spring-cloud-kubernetesはspringcloudが公式に発表したオープンソースプロジェクトで、Spring CloudとSpring Bootアプリケーションをkubernetes環境で実行し、共通のインタフェースを提供してkubernetesサービスを呼び出し、GitHubの公式アドレスは:https://github.com/spring-clo...
このプロジェクトの提出者の一人はSpringCloudの著者の一人Spencer Gibbです.
シリーズ記事リスト
本文は『spring-cloud-kubernetes実戦シリーズ』の第2編で、全文リンクは以下の通りである.『spring-cloud-kubernetes公式demo実行実戦』 『こんにちはspring-cloud-kubernetes』 『spring-cloud-kubernetesの背後にある3つの重要な知識点』 『spring-cloud-kubernetesのサービス発見とポーリング実戦(溶断を含む)』 『spring-cloud-kubernetesとSpringCloud Gateway』 『spring-cloud-kubernetesとk 8 sのconfigmap』 公式demoでspring-cloud-kubernetesを知る
Spring-cloud-kubernetesプロジェクトは、開発者がspring-cloud-kubernetesを理解し、学習するのに役立つ豊富な公式demoを提供しています.
実戦spring-cloud-kubernetes
今日の実戦の内容は簡単なjavaアプリケーションを開発し、spring-cloud-kubernetesを通じて現在のkubernetesのサービスを呼び出すkubernetes環境(minikube 1.1.1)に配備することです.
環境情報
今回の実戦の環境とバージョン情報は以下の通りです.オペレーティングシステム:CentOS Linux release 7.6.1810 minikube:1.1.1 Java:1.8.0_191 Maven:3.6.0 fabric 8-maven-pluginプラグイン:3.5.37 spring-cloud-kubernetes:1.0.1.RELEASE
上のlinux、minikube、java、mavenは、準備ができていることを確認してください.linux環境でのminikubeのインストールと起動は、「Linuxインストールminikubeガイド」を参照してください.
準備作業はOKですから、コーディングを始めましょう.
ソースのダウンロード
コードを書くつもりがなければ、GitHubから今回の実戦のソースコードをダウンロードすることもできます.アドレスとリンク情報は以下の表に示されています.
名前
リンク
コメント
プロジェクトのホームページ
https://github.com/zq2599/blo...
このプロジェクトはGitHubのホームページにあります.
git倉庫アドレス(https)
https://github.com/zq2599/blo...
このプロジェクトのソースコードの倉庫アドレス、httpsプロトコル
git倉庫アドレス(ssh)
[email protected]:zq2599/blog_demos.git
このプロジェクトのソースコードの倉庫アドレス、sshプロトコル
このgitプロジェクトには複数のフォルダがあります.この章のソースコードはspringcloudk 8 sdiscoveryというフォルダの下にあります.下の図の赤いボックスに示します.
アプリケーションの開発 mavenに基づいてspringbootアプリケーションを作成します.springcloudk 8 sdiscoveryと呼ばれます. このアプリケーションの完全なpom.xmlの内容は以下の通りです:
上記pom.xmlファイルにはいくつかの点に注目する必要があります.a.spring-cloud-kubernetesの次の2つのライブラリに直接依存しています.spring-cloud-kubernetesのサービスは後で使用できます.
b.プラグインfabric 8-maven-pluginを使用してミラーを構築し、minikube環境に配置します.
c.fabric 8-maven-pluginプラグインのために3つのprofileを用意し、今回の実戦では主にkubernetesを使用した.
以上pom.xmlの内容は、主にspring-cloud-kubernetesの依存を追加し、fabric 8を使用して構築と導入します.はアプリケーションにあります.propertiesファイルでのアプリケーション名の設定: アプリケーション起動クラスSpringcloudk 8 sdiscoveryApplicationを作成します.これは一般的なspringboot起動クラスです. controllerクラスを作成し、httpサービスを対外的に提供し、導入が完了した後、これらのhttpサービスによって機能を検証します:
上記のコードには、a.health法がkubernetesのプローブ検査に応答するために使用されることに注意しなければならない.b.getservicedetailメソッドはservicenameというパラメータを受信し、サービスリストに行って対応するサービスオブジェクトをチェックして返す.c.servicesメソッドは、すべてのサービスの名前を返します.
以上がすべてのコードであり,autowireによりDiscoveryClientインスタンスを取得し,そのインスタンスのAPIを呼び出してサービス情報を取得する機能である.
次にminikube環境への構築と導入を適用します.
ビルドのコンパイル現在のパソコンでjava、maven、minikubeが正常であることを確認してください. はpom.xmlファイルが存在するディレクトリは、次のコマンドを実行します.コンパイル構築の配置を一度に完了します.
構築に成功すると、コンソールから次の情報が出力されます. kubectlコマンドでデプロイメントとサービスを表示します.いずれも正常です. コマンドminikubeサービスspringcloudk 8 sdiscovery--urlを実行し、外部からアクセス可能なサービスアドレスを取得します.http://192.168.121.133:31583このうち192.168.121.1133はホストIPアドレスである. ブラウザでのアドレスへのアクセスhttp://192.168.121.133:31583/services次の図に示すように、返される「すべてのサービス」は、実際にはkubernetesのすべてのサービス: です.現在のnamespaceの下のすべてのサービスが発見されることを検証するために、サービス実装を作成し、my-tomcatというデプロイメントとサービスを作成します.
ミラーをダウンロードするには一定の時間がかかるため、少し待つ必要があります.再アクセスアドレスhttp://192.168.121.133:31583/services、次の図、my-tomcatは列にあります: アクセスアドレスhttp://192.168.121.133:31583/getservicedetail?servicename=my-tomcat、my-tomcatというサービス情報が得られます.この情報はフォーマットされたものです. です.
spring-cloud-kubernetesのDiscoveryClientサービスがkubernetesの「サービス」リソースをSpringCloudのサービスに対応していることがわかります.このDiscoveryClientがあれば、kubernetes環境ではeurekaを登録する必要がなく、kubernetesのサービスメカニズムを直接使用しています.この時SpringCloudのDiscoveryClientのデザインがこんなに素晴らしいと感慨せざるを得ません.
これでspring-cloud-kubernetesの初体験は終わり、私たちのプログラムを簡単にコードすることでkubernetes環境でサービス資源の情報を得ることができ、学習が深まるにつれて、私たちはより多くのspring-cloud-kubernetes能力を使うことができ、spring-cloud-kubernetesの設計者に感謝し、私たちのSpringCloudアプリケーションをkubernetes世界で楽しむことができます.
疑惑が解けない
上記のコードはSpringCloudに関連しており、spring-cloud-kubernetesとは関係ありません.なぜプログラムが実行されるとkubernetes環境のサービス情報を取得できるのでしょうか.この問題を明らかにしなければ、後の学習は展開しにくい.私たちは自分のコードがkubernetes環境と何の関係があるのか分からないので、kubernetesと対話しているかどうか分からないからだ.
以上の質問は、「spring-cloud-kubernetesの背後にある3つの重要な知識点」にアクセスしてください.詳細な分析があります.
私の公衆番号に注目してください.
Spring-cloud-kubernetesはspringcloudが公式に発表したオープンソースプロジェクトで、Spring CloudとSpring Bootアプリケーションをkubernetes環境で実行し、共通のインタフェースを提供してkubernetesサービスを呼び出し、GitHubの公式アドレスは:https://github.com/spring-clo...
このプロジェクトの提出者の一人はSpringCloudの著者の一人Spencer Gibbです.
シリーズ記事リスト
本文は『spring-cloud-kubernetes実戦シリーズ』の第2編で、全文リンクは以下の通りである.
Spring-cloud-kubernetesプロジェクトは、開発者がspring-cloud-kubernetesを理解し、学習するのに役立つ豊富な公式demoを提供しています.
実戦spring-cloud-kubernetes
今日の実戦の内容は簡単なjavaアプリケーションを開発し、spring-cloud-kubernetesを通じて現在のkubernetesのサービスを呼び出すkubernetes環境(minikube 1.1.1)に配備することです.
環境情報
今回の実戦の環境とバージョン情報は以下の通りです.
上のlinux、minikube、java、mavenは、準備ができていることを確認してください.linux環境でのminikubeのインストールと起動は、「Linuxインストールminikubeガイド」を参照してください.
準備作業はOKですから、コーディングを始めましょう.
ソースのダウンロード
コードを書くつもりがなければ、GitHubから今回の実戦のソースコードをダウンロードすることもできます.アドレスとリンク情報は以下の表に示されています.
名前
リンク
コメント
プロジェクトのホームページ
https://github.com/zq2599/blo...
このプロジェクトはGitHubのホームページにあります.
git倉庫アドレス(https)
https://github.com/zq2599/blo...
このプロジェクトのソースコードの倉庫アドレス、httpsプロトコル
git倉庫アドレス(ssh)
[email protected]:zq2599/blog_demos.git
このプロジェクトのソースコードの倉庫アドレス、sshプロトコル
このgitプロジェクトには複数のフォルダがあります.この章のソースコードはspringcloudk 8 sdiscoveryというフォルダの下にあります.下の図の赤いボックスに示します.
アプリケーションの開発
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
com.bolingcavalry
springcloudk8sdiscovery
0.0.1-SNAPSHOT
springcloudk8sdiscovery
Demo project for Spring Boot
1.8
2.1.1.RELEASE
3.5
2.8.2
2.18.1
2.21.0
3.5.37
org.springframework.boot
spring-boot-dependencies
pom
import
${spring-boot.version}
org.springframework.cloud
spring-cloud-kubernetes-core
1.0.1.RELEASE
org.springframework.cloud
spring-cloud-kubernetes-discovery
1.0.1.RELEASE
org.springframework.cloud
spring-cloud-commons
2.1.1.RELEASE
org.springframework.boot
spring-boot-starter
2.1.1.RELEASE
org.springframework.boot
spring-boot-starter-web
2.1.1.RELEASE
org.springframework.boot
spring-boot-starter-actuator
2.1.1.RELEASE
com.alibaba
fastjson
1.2.28
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
repackage
org.apache.maven.plugins
maven-deploy-plugin
${maven-deploy-plugin.version}
true
org.apache.maven.plugins
maven-surefire-plugin
${maven-surefire-plugin.version}
true
false
io.fabric8
fabric8-maven-plugin
${fabric8.maven.plugin.version}
fmp
resource
kubernetes
io.fabric8
fabric8-maven-plugin
${fabric8.maven.plugin.version}
fmp
resource
build
NodePort
release
io.fabric8
fabric8-maven-plugin
${fabric8.maven.plugin.version}
fmp
resource
helm
integration
io.fabric8
fabric8-maven-plugin
${fabric8.maven.plugin.version}
fmp
resource
build
org.apache.maven.plugins
maven-failsafe-plugin
${maven-failsafe-plugin.version}
run-integration-tests
integration-test
integration-test
verify
false
false
上記pom.xmlファイルにはいくつかの点に注目する必要があります.a.spring-cloud-kubernetesの次の2つのライブラリに直接依存しています.spring-cloud-kubernetesのサービスは後で使用できます.
org.springframework.cloud:spring-cloud-kubernetes-core:1.0.1.RELEASE
org.springframework.cloud:spring-cloud-kubernetes-discovery:1.0.1.RELEASE
b.プラグインfabric 8-maven-pluginを使用してミラーを構築し、minikube環境に配置します.
io.fabric8
fabric8-maven-plugin
${fabric8.maven.plugin.version}
fmp
resource
c.fabric 8-maven-pluginプラグインのために3つのprofileを用意し、今回の実戦では主にkubernetesを使用した.
kubernetes
io.fabric8
fabric8-maven-plugin
${fabric8.maven.plugin.version}
fmp
resource
build
NodePort
以上pom.xmlの内容は、主にspring-cloud-kubernetesの依存を追加し、fabric 8を使用して構築と導入します.
spring.application.name=springcloudk8sdiscovery
package com.bolingcavalry.springcloudk8sdiscovery;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class Springcloudk8sdiscoveryApplication {
public static void main(String[] args) {
SpringApplication.run(Springcloudk8sdiscoveryApplication.class, args);
}
}
@RestController
public class DiscoveryController {
@Autowired
private DiscoveryClient discoveryClient;
/**
*
* @return
*/
@RequestMapping("/health")
public String health() {
return "health";
}
/**
*
* @return
*/
@RequestMapping("/getservicedetail")
public String getservicedetail(
@RequestParam(value = "servicename", defaultValue = "") String servicename) {
return "Service [" + servicename + "]'s instance list : " + JSON.toJSONString(discoveryClient.getInstances(servicename));
}
/**
*
* @return
*/
@RequestMapping("/services")
public String services() {
return this.discoveryClient.getServices().toString()
+ ", "
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
}
上記のコードには、a.health法がkubernetesのプローブ検査に応答するために使用されることに注意しなければならない.b.getservicedetailメソッドはservicenameというパラメータを受信し、サービスリストに行って対応するサービスオブジェクトをチェックして返す.c.servicesメソッドは、すべてのサービスの名前を返します.
以上がすべてのコードであり,autowireによりDiscoveryClientインスタンスを取得し,そのインスタンスのAPIを呼び出してサービス情報を取得する機能である.
次にminikube環境への構築と導入を適用します.
ビルドのコンパイル
mvn clean package fabric8:deploy -Pkubernetes
構築に成功すると、コンソールから次の情報が出力されます.
...
[INFO]
[INFO] <<< fabric8-maven-plugin:3.5.37:deploy (default-cli) < install @ springcloudk8sdiscovery <<<
[INFO]
[INFO]
[INFO] --- fabric8-maven-plugin:3.5.37:deploy (default-cli) @ springcloudk8sdiscovery ---
[INFO] F8: Using Kubernetes at https://192.168.121.133:8443/ in namespace default with manifest /usr/local/work/demo/springcloudk8sdiscovery/target/classes/META-INF/fabric8/kubernetes.yml
[INFO] Using namespace: default
[INFO] Updating a Service from kubernetes.yml
[INFO] Updated Service: target/fabric8/applyJson/default/service-springcloudk8sdiscovery.json
[INFO] Using namespace: default
[INFO] Updating Deployment from kubernetes.yml
[INFO] Updated Deployment: target/fabric8/applyJson/default/deployment-springcloudk8sdiscovery.json
[INFO] F8: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.207 s
[INFO] Finished at: 2019-06-09T18:50:09+08:00
[INFO] ------------------------------------------------------------------------
[root@minikube springcloudk8sdiscovery]# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
springcloudk8sdiscovery 1/1 1 1 75m
[root@minikube springcloudk8sdiscovery]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 33h
springcloudk8sdiscovery NodePort 10.102.167.79 8080:31583/TCP 75m
kubectl run my-tomcat --image=tomcat:7.0.94-jre7-alpine --replicas=2 --port=8080 \
&& kubectl expose deployment my-tomcat --port=8080 --target-port=8080 --external-ip=192.168.50.7 --type=LoadBalancer
ミラーをダウンロードするには一定の時間がかかるため、少し待つ必要があります.
[
{
"host": "172.17.0.4",
"instanceId": "91201db9-8aa6-11e9-a5b5-000c29fd2001",
"metadata": {
"run": "my-tomcat"
},
"port": 8080,
"scheme": "http://",
"secure": false,
"serviceId": "my-tomcat",
"uri": "http://172.17.0.4:8080"
},
{
"host": "172.17.0.5",
"instanceId": "91223cda-8aa6-11e9-a5b5-000c29fd2001",
"metadata": {
"$ref": "$[0].metadata"
},
"port": 8080,
"scheme": "http://",
"secure": false,
"serviceId": "my-tomcat",
"uri": "http://172.17.0.5:8080"
}
]
spring-cloud-kubernetesのDiscoveryClientサービスがkubernetesの「サービス」リソースをSpringCloudのサービスに対応していることがわかります.このDiscoveryClientがあれば、kubernetes環境ではeurekaを登録する必要がなく、kubernetesのサービスメカニズムを直接使用しています.この時SpringCloudのDiscoveryClientのデザインがこんなに素晴らしいと感慨せざるを得ません.
これでspring-cloud-kubernetesの初体験は終わり、私たちのプログラムを簡単にコードすることでkubernetes環境でサービス資源の情報を得ることができ、学習が深まるにつれて、私たちはより多くのspring-cloud-kubernetes能力を使うことができ、spring-cloud-kubernetesの設計者に感謝し、私たちのSpringCloudアプリケーションをkubernetes世界で楽しむことができます.
疑惑が解けない
上記のコードはSpringCloudに関連しており、spring-cloud-kubernetesとは関係ありません.なぜプログラムが実行されるとkubernetes環境のサービス情報を取得できるのでしょうか.この問題を明らかにしなければ、後の学習は展開しにくい.私たちは自分のコードがkubernetes環境と何の関係があるのか分からないので、kubernetesと対話しているかどうか分からないからだ.
以上の質問は、「spring-cloud-kubernetesの背後にある3つの重要な知識点」にアクセスしてください.詳細な分析があります.
私の公衆番号に注目してください.