Spring Cloud Kubernetes(二)_maven

15. 春季云 Kubernetes 发现服务器

Spring Cloud Kubernetes Discovery Server 提供 HTTP 端点,应用程序可用于收集信息 关于 Kubernetes 集群中可用的服务。The Spring Cloud Kubernetes Discovery Server 可由应用程序使用以提供数据 该启动器提供的实现。​​spring-cloud-starter-kubernetes-discoveryclient​​​​DiscoveryClient​

15.1. 权限

Spring 云发现服务器使用 Kubernetes API 服务器获取有关服务和端点资源的数据,因此它需要列表、监视和 获取使用这些终结点的权限。请参阅以下示例 Kubernetes 部署 YAML 以获取 如何检查如何在 Kubernetes 上配置服务帐户。

15.2. 端点

服务器公开了三个终结点。

15.2.1./应用

发送到的请求将返回可用服务的 JSON 数组。每个项目包含 Kubernetes 服务的名称和服务实例信息。下面是一个示例响应。​​GET​​​​/apps​

[
{
"name":"spring-cloud-kubernetes-discoveryserver",
"serviceInstances":[
{
"instanceId":"836a2f25-daee-4af2-a1be-aab9ce2b938f",
"serviceId":"spring-cloud-kubernetes-discoveryserver",
"host":"10.244.1.6",
"port":8761,
"uri":"http://10.244.1.6:8761",
"secure":false,
"metadata":{
"app":"spring-cloud-kubernetes-discoveryserver",
"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"spring-cloud-kubernetes-discoveryserver\"},\"name\":\"spring-cloud-kubernetes-discoveryserver\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"name\":\"http\",\"port\":80,\"targetPort\":8761}],\"selector\":{\"app\":\"spring-cloud-kubernetes-discoveryserver\"},\"type\":\"ClusterIP\"}}\n",
"http":"8761"
},
"namespace":"default",
"scheme":"http"
}
]
},
{
"name":"kubernetes",
"serviceInstances":[
{
"instanceId":"1234",
"serviceId":"kubernetes",
"host":"172.18.0.3",
"port":6443,
"uri":"http://172.18.0.3:6443",
"secure":false,
"metadata":{
"provider":"kubernetes",
"component":"apiserver",
"https":"6443"
},
"namespace":"default",
"scheme":"http"
}
]
}
]

15.2.2./应用/{名称}

请求可用于获取给定所有实例的实例数据 服务。下面是发出请求时的示例响应。​​GET​​​​/app/{name}​​​​GET​​​​/app/kubernetes​

[
{
"instanceId":"1234",
"serviceId":"kubernetes",
"host":"172.18.0.3",
"port":6443,
"uri":"http://172.18.0.3:6443",
"secure":false,
"metadata":{
"provider":"kubernetes",
"component":"apiserver",
"https":"6443"
},
"namespace":"default",
"scheme":"http"
}
]

15.2.3. /app/{name}/{instanceid}

发出的请求将返回特定实例数据 给定服务的实例。下面是发出请求时的示例响应。​​GET​​​​/app/{name}/{instanceid}​​​​GET​​​​/app/kubernetes/1234​

{
"instanceId":"1234",
"serviceId":"kubernetes",
"host":"172.18.0.3",
"port":6443,
"uri":"http://172.18.0.3:6443",
"secure":false,
"metadata":{
"provider":"kubernetes",
"component":"apiserver",
"https":"6443"
},
"namespace":"default",
"scheme":"http"
}
15.3. 部署 YAML

Spring Cloud Discovery Server 的映像托管在Docker Hub 上。

下面是可用于将 Kubernetes Configuration Watcher 部署到 Kubernetes 的示例部署 YAML。

---
apiVersion: v1
kind: List
items:
- apiVersion: v1
kind: Service
metadata:
labels:
app: spring-cloud-kubernetes-discoveryserver
name: spring-cloud-kubernetes-discoveryserver
spec:
ports:
- name: http
port: 80
targetPort: 8761
selector:
app: spring-cloud-kubernetes-discoveryserver
type: ClusterIP
- apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: spring-cloud-kubernetes-discoveryserver
name: spring-cloud-kubernetes-discoveryserver
- apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app: spring-cloud-kubernetes-discoveryserver
name: spring-cloud-kubernetes-discoveryserver:view
roleRef:
kind: Role
apiGroup: rbac.authorization.k8s.io
name: namespace-reader
subjects:
- kind: ServiceAccount
name: spring-cloud-kubernetes-discoveryserver
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: namespace-reader
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["services", "endpoints"]
verbs: ["get", "list", "watch"]
- apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-kubernetes-discoveryserver-deployment
spec:
selector:
matchLabels:
app: spring-cloud-kubernetes-discoveryserver
template:
metadata:
labels:
app: spring-cloud-kubernetes-discoveryserver
spec:
serviceAccount: spring-cloud-kubernetes-discoveryserver
containers:
- name: spring-cloud-kubernetes-discoveryserver
image: springcloud/spring-cloud-kubernetes-discoveryserver:2.1.0-SNAPSHOT
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 8761
path: /actuator/health/readiness
livenessProbe:
httpGet:
port: 8761
path: /actuator/health/liveness
ports:
- containerPort: 8761

16. 示例

Spring Cloud Kubernetes 试图通过以下方式使您的应用程序使用 Kubernetes Native Services 变得透明 遵循春云接口。

在应用程序中,您需要将依赖关系添加到类路径中,并删除包含实现的任何其他依赖关系(即 Eureka 发现客户机)。 这同样适用于需要添加到类路径并删除包含实现(即配置服务器客户机)的任何其他依赖项的情况。​​spring-cloud-kubernetes-discovery​​​​DiscoveryClient​​​​PropertySourceLocator​​​​spring-cloud-kubernetes-config​​​​PropertySourceLocator​

以下项目重点介绍了这些依赖项的用法,并演示了如何从任何 Spring 引导应用程序中使用这些库:

  • Spring Cloud Kubernetes 示例:位于此存储库中的示例。
  • Spring Cloud Kubernetes 完整示例:小黄人和老板
  • 走狗
  • 老板
  • Spring Cloud Kubernetes完整示例:SpringOne 平台票务服务
  • Spring Cloud Gateway with Spring Cloud Kubernetes Discovery and Config
  • Spring Boot Admin with Spring Cloud Kubernetes Discovery and Config

17. 其他资源

本节列出了其他资源,例如有关Spring Cloud Kubernetes的演示文稿(幻灯片)和视频。

  • S1P PKS上的春云
  • Spring Cloud、Docker、Kubernetes → London Java Community 2018 年 7 月

请随时通过拉取请求向此存储库提交其他资源。

18. 配置属性

要查看所有与 Kubernetes 相关的配置属性列表,请查看附录页面。

19. 建筑

19.1. 基本编译和测试

要构建源代码,您需要安装 JDK 17。

Spring Cloud 使用 Maven 进行大多数与构建相关的活动,而您 应该能够通过克隆 您感兴趣的项目和键入的内容

$ ./mvnw install

您也可以自己安装 Maven (>=3.3.3) 并运行命令 代替以下示例。如果你这样做,你也 可能需要添加如果您的本地 Maven 设置没有 包含 Spring 预发布工件的存储库声明。​​mvn​​​​./mvnw​​​​-P spring​

请注意,您可能需要增加内存量 通过设置 a 环境变量 一个值,比如。我们尝试在 配置,所以如果你发现你必须这样做才能做出一个 构建成功,请提出票证以将设置添加到 源代码管理。​​MAVEN_OPTS​​​​-Xmx512m -XX:MaxPermSize=128m​​​​.mvn​

一般需要中间件(即 Redis)进行测试的项目 要求安装并运行 [Docker](www.docker.com/get-started) 的本地实例。

19.2. 文档

spring-cloud-build模块有一个“docs”配置文件,如果你切换 在它上面将尝试从中构建ASCIIDOC源。作为该过程的一部分,它将通过加载所有包含来查找并处理它,但不是 解析或渲染它,只需将其复制到(默认为,即项目的根目录)。如果有 自述文件中的任何更改都将在 Maven 构建后显示为 修改后的文件位于正确的位置。只需提交它并推动更改即可。​​src/main/asciidoc​​​​README.adoc​​​​${main.basedir}​​​​$/tmp/releaser-1667493013281-0/spring-cloud-kubernetes/docs​

19.3. 使用代码

如果您没有 IDE 首选项,我们建议您在处理代码时使用Spring Tools Suite或Eclipse。我们使用m2eclipse eclipse插件来获得 maven 支持。其他 IDE 和工具 只要他们使用 Maven 3.3.3 或更高版本,也应该可以毫无问题地工作。

19.3.1. 激活 Spring Maven 配置文件

Spring Cloud 项目需要激活“spring”Maven 配置文件才能解析 Spring 里程碑和快照存储库。使用首选 IDE 进行此设置 配置文件处于活动状态,否则您可能会遇到生成错误。

19.3.2. 使用 m2eclipse 导入到 eclipse 中

我们建议使用m2eclipse eclipse插件 日蚀。如果您还没有安装 m2eclipse,可以从“eclipse 市场”。

旧版本的 m2e 不支持 Maven 3.3,因此一旦 项目被导入到 Eclipse 中,你还需要告诉 M2Eclipse 为项目使用正确的配置文件。如果你 查看与项目中的 POM 相关的许多不同错误,请检查 您有最新的安装。如果您无法升级 m2e, 将“弹簧”配置文件添加到您的。或者,您可以 从父级的“spring”配置文件中复制存储库设置 pom 进入你的。​​settings.xml​​​​settings.xml​

19.3.3. 在没有 m2eclipse 的情况下导入到 eclipse 中

如果您不想使用 m2eclipse,则可以使用 以下命令:

$ ./mvnw eclipse:eclipse

生成的日食项目可以通过从菜单中选择来导入。​​import existing projects​​​​file​

20. 贡献

Spring Cloud 在非限制性 Apache 2.0 许可证下发布, 并遵循非常标准的Github开发流程,使用Github。 跟踪问题并将拉取请求合并到主服务器。如果需要帮助, 即使是微不足道的贡献,请不要犹豫,但是 请遵循以下准则。

20.1. 签署贡献者许可协议

在我们接受重要的补丁或拉取请求之前,我们需要您签署贡献者许可协议。 签署贡献者协议并不授予任何人对主节点的提交权限 存储库,但这确实意味着我们可以接受您的贡献,您将获得 作者信用,如果我们这样做。活跃的贡献者可能会被要求加入核心团队,并且 给定合并拉取请求的能力。

20.2. 行为准则

本项目遵守贡献者盟约准则 行为。通过参与,您应该遵守此准则。请举报 ​​spring-code-of-conduct@pivotal.io​​ 不可接受的行为。

20.3. 代码约定和内务管理

这些对于拉取请求都不是必需的,但它们都会有所帮助。它们也可以是 在原始拉取请求之后但在合并之前添加。

  • 使用 Spring 框架代码格式约定。如果您使用 Eclipse 您可以使用 Spring 中的文件导入格式化程序设置 云构建项目。如果使用 IntelliJ,则可以使用Eclipse Code 格式化程序 用于导入相同文件的插件。eclipse-code-formatter.xml
  • 确保所有新文件都有一个简单的Javadoc类注释,至少带有antag来标识你,最好至少有一个关于类是什么的段落 为。.java@author
  • 将 ASF 许可证标头注释添加到所有新文件(从现有文件复制) 在项目中).java
  • 将自己添加为您大幅修改的.java文件(更多 比外观变化)。@author
  • 添加一些 Javadoc,如果更改命名空间,则添加一些 XSD 文档元素。
  • 一些单元测试也会有很大帮助——必须有人去做。
  • 如果没有其他人正在使用您的分支,请根据当前主节点(或 主项目中的其他目标分支)。
  • 编写提交消息时,请遵循以下约定, 如果您正在修复现有问题,请在提交末尾添加 消息(其中 XXXX 是问题编号)。Fixes gh-XXXX

20.4. 检查样式

Spring Cloud Build 附带了一组检查样式规则。您可以在模块中找到它们。该模块下最值得注意的文件是:​​spring-cloud-build-tools​

弹簧云构建工具/

└── src
├── checkstyle
│ └── checkstyle-suppressions.xml
└── main
└── resources
├── checkstyle-header.txt
└── checkstyle.xml

默认检查样式规则

文件头设置

默认抑制规则

20.4.1. 校验样式配置

默认情况下,检查样式规则处于禁用状态。要将检查样式添加到项目中,只需定义以下属性和插件。

绒球.xml

<properties>
<maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError>
<maven-checkstyle-plugin.failsOnViolation>true
</maven-checkstyle-plugin.failsOnViolation>
<maven-checkstyle-plugin.includeTestSourceDirectory>true
</maven-checkstyle-plugin.includeTestSourceDirectory>
</properties>

<build>
<plugins>
<plugin>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>

<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</build>

在出现检查样式错误时构建失败

在检查样式冲突时生成失败

Checkstyle 还分析测试源

添加 Spring Java 格式插件,该插件将重新格式化您的代码以通过大多数 Checkstyle 格式化规则

将检查样式插件添加到构建和报告阶段

如果您需要隐含某些规则(例如,行长需要更长),那么在隐含下定义一个文件就足够了。例:​​${project.root}/src/checkstyle/checkstyle-suppressions.xml​

projectRoot/src/checkstyle/checkstyle-suppresions.xml

<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"https://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<suppress files=".*ConfigServerApplication\.java" checks="HideUtilityClassConstructor"/>
<suppress files=".*ConfigClientWatch\.java" checks="LineLengthCheck"/>
</suppressions>

建议将 theand复制到您的项目中。这样,将应用一些默认格式规则。您可以通过运行以下脚本来执行此操作:​​${spring-cloud-build.rootFolder}/.editorconfig​​​​${spring-cloud-build.rootFolder}/.springformat​

$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat

20.5. IDE 设置

20.5.1. 智能理念

为了设置 Intellij,您应该导入我们的编码约定、检查配置文件并设置检查样式插件。 可以在Spring Cloud Build项目中找到以下文件。

弹簧云构建工具/

└── src
├── checkstyle
│ └── checkstyle-suppressions.xml
└── main
└── resources
├── checkstyle-header.txt
├── checkstyle.xml
└── intellij
├── Intellij_Project_Defaults.xml
└── Intellij_Spring_Boot_Java_Conventions.xml

默认检查样式规则

文件头设置

默认抑制规则

应用大多数检查样式规则的 Intellij 的项目默认值

适用于应用大多数检查样式规则的 Intellij 项目样式约定

Spring Cloud Kubernetes(二)_maven_02

图1.代码样式

转到→→→。在那里单击该部分旁边的图标。在那里,单击值并选择选项。导入文件。​​File​​​​Settings​​​​Editor​​​​Code style​​​​Scheme​​​​Import Scheme​​​​Intellij IDEA code style XML​​​​spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml​

Spring Cloud Kubernetes(二)_eclipse_03

图2.检测配置文件

转到→→→。在那里单击该部分旁边的图标。在那里,单击并导入文件。​​File​​​​Settings​​​​Editor​​​​Inspections​​​​Profile​​​​Import Profile​​​​spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml​

格纹样式

要让Intellij与Checkstyle一起工作,您必须安装插件。建议还安装自动转换 JUnit 断言​​Checkstyle​​​​Assertions2Assertj​

Spring Cloud Kubernetes(二)_eclipse_04

转到→→→。那里点击该部分中的图标。在那里,您必须定义应从何处选择检查样式规则。在上图中,我们从克隆的 Spring Cloud Build 存储库中选取了规则。但是,您可以指向Spring Cloud Build的GitHub存储库(例如:)。我们需要提供以下变量:​​File​​​​Settings​​​​Other settings​​​​Checkstyle​​​​+​​​​Configuration file​​​​checkstyle.xml​​​​raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml​

  • ​checkstyle.header.file​​- 请将其指向Spring Cloud Build的文件,无论是在您的克隆存储库中还是通过URL。spring-cloud-build-tools/src/main/resources/checkstyle-header.txtraw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
  • ​checkstyle.suppressions.file​​- 默认抑制。请将其指向Spring Cloud Build的文件,无论是在您的克隆存储库中还是通过URL。spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xmlraw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
  • ​checkstyle.additional.suppressions.file​​- 此变量对应于本地项目中的隐含。例如,您正在处理。然后指向该文件夹。示例将是:。spring-cloud-contractproject-root/src/checkstyle/checkstyle-suppressions.xmlspring-cloud-contract/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml

请记住设置 theto,因为我们对生产和测试源应用检查样式规则。​​Scan Scope​​​​All sources​

20.6. 重复查找器

Spring Cloud Build 带来了 ,它可以标记 java 类路径上的重复和冲突类和资源。​​basepom:duplicate-finder-maven-plugin​

20.6.1. 重复查找器配置

默认情况下,重复查找器处于启用状态,并将在 Maven 构建的阶段运行,但只有在将项目添加到项目部分时,它才会在您的项目中生效。​​verify​​​​duplicate-finder-maven-plugin​​​​build​​​​pom.xml​

绒球.xml

<build>
<plugins>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

对于其他属性,我们设置了插件文档中列出的默认值。

您可以轻松覆盖它们,但设置以 为前缀的所选属性的值。例如,settoin 为了跳过重复项检查您的构建。​​duplicate-finder-maven-plugin​​​​duplicate-finder-maven-plugin.skip​​​​true​

如果您需要添加您的设置,请确保将它们添加到项目的插件配置部分:​​ignoredClassPatterns​​​​ignoredResourcePatterns​

<build>
<plugins>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
<configuration>
<ignoredClassPatterns>
<ignoredClassPattern>org.joda.time.base.BaseDateTime</ignoredClassPattern>
<ignoredClassPattern>.*module-info</ignoredClassPattern>
</ignoredClassPatterns>
<ignoredResourcePatterns>
<ignoredResourcePattern>changelog.txt</ignoredResourcePattern>
</ignoredResourcePatterns>
</configuration>
</plugin>
</plugins>
</build>