使用kind创建一个k8s集群
kind是一个用于创建k8s
集群的工具, 它使用docker
容器作为节点, 可以快速创建一个k8s
集群,
用于测试或者开发.
官方提供了相应的文档Ingress, 在使用该文档的时候出现了一些问题.
本文基于官方文档并作出了一定的修改介绍如何使用kind
创建一个k8s
集群, 并在集群中部署kong-ingress
.最后部署一个测试应用并通过
kong-ingress
访问该应用.
kind是一个用于创建k8s
集群的工具, 它使用docker
容器作为节点, 可以快速创建一个k8s
集群,
用于测试或者开发.
官方提供了相应的文档Ingress, 在使用该文档的时候出现了一些问题.
本文基于官方文档并作出了一定的修改介绍如何使用kind
创建一个k8s
集群, 并在集群中部署kong-ingress
.最后部署一个测试应用并通过
kong-ingress
访问该应用.
这篇文章的内容发生的背景和测试java
的ldap
的failover
有关.
测试failover
需要启动两个ldap
的容器并stop
其中一个.
但是stop
完之后遇到了一个问题当下次启动后分配的端口会变化(这是由于docker
的内部机制导致的).
接下来将会介绍如何解决这个问题.
aliyun-webdav
是一个开源的工具, 可以为阿里云盘提供WebDAV
服务.
rclone
是一个开源的工具, 可以将本地文件同步到各种云存储服务中, 包括但不限于
以下将介绍如何使用aliyun-webdav
搭配rclone
实现将本地文件同步到阿里云盘.
本案例是基于ubuntu
实现的, 方案使用到了docker
因此理论上可以在任何支持docker
的系统中实现.
在使用TestContainers
启动容器时, 可能会存在容器之间依赖的情况.
如果其中一个容器依赖于另外一个容器, 那么需要在启动被依赖的容器时, 指定hostname
.
这样有依赖需求的容器可以直接通过hostname
来访问被依赖的容器.
以便于被依赖的容器能够正确的解析依赖容器的hostname
.
下面将介绍如何在TestContainers
中实现配置的容器hostname
以解决容器之间访问问题.
在Docker
中使用Rclone
时需要将fuse
挂载到宿主机.
这样可以在宿主机上使用Rclone
挂载的文件夹以及可以对fuse
进行操作
在docker registry
配置了认证后, 项目中CICD
中运行的test case
失败, 错误日志如下
Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=hub.fastonetech.com/cce/fastone-auditing:latest, imagePullPolicy=AlwaysPullPolicy(), imageNameSubstitutor=org.testcontainers.utility.ImageNameSubstitutor$LogWrappedImageNameSubstitutor@3b68a50c)
at app//org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1371)
at app//org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:651)
at app//org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:331)
... 153 more
Caused by: org.testcontainers.containers.ContainerFetchException: Failed to pull image: hub.fastonetech.com/cce/fastone-auditing:latest
at app//org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:119)
at app//org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:28)
at app//org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:17)
at app//org.testcontainers.utility.LazyFuture.get(LazyFuture.java:39)
at app//org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1369)
... 155 more
Caused by: com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"message":"unauthorized: unauthorized to access repository: cce/fastone-auditing, action: pull: unauthorized to access repository: cce/fastone-auditing, action: pull"}
at app//org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:247)
at app//org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.lambda$executeAndStream$1(DefaultInvocationBuilder.java:269)
at java.base@17.0.1/java.lang.Thread.run(Thread.java:833)
TestContainers
启动完容器后客户端连接报错
feign.RetryableException: Connection reset executing GET http://localhost:32772/javers/api/v1/snapshots?page=0&size=1&sort=commitMetadata.id%2CDESC
关键cause
如下
Caused by: java.net.SocketException: Connection reset
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at feign.httpclient.ApacheHttpClient.execute(ApacheHttpClient.java:81)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:121)
... 101 more
172.17.0.0/16默认为docker的网段 尽量避免网段跟docker网段冲突 例如设置为173.0.0.0/16
ip route get 172.17.0.13