docker安装_Spring Boot微服务,Docker和Kubernetes研讨会–第3部分

docker安装

docker安装

在之前的文章中,我们为使用Docker和Spring Boot的订单管理系统构建了一些微服务(订单服务,产品服务,客户服务)。 我们使用Netflix库来管理,发现和平衡微服务。

管理这些微服务及其多个容器可能会有些棘手; 特别是在可伸缩性,可观察性,安全性,监视和管理资源方面。 因此,我们将使用Kubernetes进行容器编排。 单击此处以了解有关Kubernetes的更多信息。

为了开始使用,我们可以在笔记本电脑中使用本地Kube集群,也可以使用AWS / Azure / GCP之类的云提供商。

本地Kube集群:我们可以使用MinikubeDocker for Desktop设置本地kube集群。 请按照它们各自的文档将它们安装在笔记本电脑/计算机上。 在本教程中,我们将在Mac上使用Docker for Desktop,因此,如果使用的是Docker,请按照文档进行设置。

使用Amazon Elastic Kubernetes服务(EKS) :您还可以在EKS上设置集群以部署应用程序,因为您将需要在AWS上使用一个帐户( https://aws.amazon.com/ )。登录到AWS后,转到EKS并创建一个集群。 阅读文档以设置集群。

Kubectl:KubeCtl是一个命令行界面,用于针对Kubernetes集群运行命令。 如果您正在使用Docker for Desktop,则已经包含并配置了Docker以连接到本地Kubernetes服务器,否则请使用文档在笔记本电脑上设置KubeCtl。

为了让kubectl找到并访问Kubernetes集群,它需要一个kubeconfig文件。 默认情况下,kubectl配置位于:

~/.kube /config .

通过获取集群状态,检查kubectl是否已正确配置:

kubectl cluster-info

要在EKS中管理集群,请使用文档来设置kubeconfig。

在Kube集群中部署应用程序:

现在,我们已经成功创建了一个kube集群,并配置了kubectl来管理和部署到该集群中,我们准备将应用程序部署到该集群中。

之前的博客中,我们创建了3个在Docker容器中运行的微服务。 我们可以使用任何这些微服务的映像来部署到kube集群中。 如果我们使用本地kube集群(用于桌面的Docker或MiniKube),则可以使用本地docker映像部署到集群。(要使本地映像正常工作,我们需要在部署定义中将一个名为“ imagePullPolicy”的属性设置为“ Never”。)

对于EKS,我们需要将映像保存在注册表中,我们现在可以使用docker hub public repo,因此我们不必担心通过注册表进行身份验证。 如果必须使用ECR(Amazon Elastic Container Registry),则需要为运行集群中节点的实例授予ECR拉权限,为简单起见,我们暂时不介绍该部分。

建立本地形象

为了在本地kube集群中部署应用程序,我们将在笔记本电脑中创建其docker映像。

因此,如果您拥有先前博客中使用的任何服务的源代码,我们将使用它们。–转到productService的根文件夹,然后运行docker build命令:

docker build -t productservice .

这将创建带有标签“ productservice”的本地图像。 通过运行该图像来测试该图像是否工作正常。

docker run -p 8001:8001 productservice:latest

此服务需要访问本地Postgres数据库服务器,因此无法启动。 为简单起见,让我们快速更改应用程序并使用内存数据库(H2)。对build.gradle进行以下更改:(用H2替换postgres depenendcy)

 dependencies {

    implementation( 'org.springframework.boot:spring-boot-starter-data-jpa' )

    implementation( 'org.springframework.boot:spring-boot-starter-web' )

    implementation( 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' )

    runtime( "com.h2database:h2:1.3.176" )

    compileOnly 'org.projectlombok:lombok:1.18.4'

    testImplementation( 'org.springframework.boot:spring-boot-starter-test' )
 }

并替换spring数据源以在application.properties中使用H2:

 spring.datasource.url=jdbc:h2:mem:testdb
 spring.datasource.driverClassName=org.h2.Driver
 spring.datasource.username=sa
 spring.datasource.password=
 spring.h2.console.enabled= false

完成这两项更改后,该应用程序将可以很好地启动和运行。 这次重建图像(确保您清除了旧标签)并运行它。 使用以前的博客来测试端点。 (创建和获取产品@ / products)

创建deployment.yaml要将映像部署到kube,我们需要一个部署定义(如果只想安装Pod,则需要一个Pod定义)。

 apiVersion: apps /v1
 kind: Deployment
 metadata:

  name: product-service-deployment
 spec:

  selector:

    matchLabels:

      app: product-service

  replicas: 1

  template:

    metadata:

      labels:

        app: product-service

    spec:

      containers:

      - name: product-app

        image: productservice:latest

        imagePullPolicy: Never

        ports:

        - containerPort: 8001

确保使用在“名称”中创建的本地图像的标签。

将以上文件另存为product-service-deployment.yaml,并从保存文件的位置运行以下命令。

kubectl apply -f product-service-deployment.yaml

这将在运行容器内的应用程序的集群中创建一个Pod。 现在,此应用程序正在kube集群中的pod内运行,并已分配了IP地址,该IP地址只能从集群内部访问。 我们可以使用此IP地址从群集内部访问此容器,但是由于容器是易变的(可以按比例缩放,按比例缩小,重新创建和销毁),因此我们需要一个接口或服务来通过“服务名称”进行访问重新创建广告连播时,该设置不会更改。 该“服务”还将充当负载平衡器,用于将请求分发到Pod。

创建一个Kubernetes服务:现在,我们将在Kubernetes中创建一个可用于访问Pod的服务。 在此处阅读有关Kubernetes服务的更多信息。 对于此博客,我们将创建“ ClusterIP”类型的服务,该服务可从群集访问。在名称为product-service.yaml的同一根文件夹中创建一个文件,其内容如下:

 apiVersion: v1
 kind: Service
 metadata:

  name: product-service
 spec:

  selector:

    app: product-service

  ports:

  - port: 8001

    targetPort: 8001

要创建此服务,请运行以下命令:

kubectl apply -f product-service.yaml

运行kubectl get services命令以查看服务是否成功创建:

kubectl get svc

您应该在其中看到带有分配的ClusterIP的服务“ product-service”。

从笔记本电脑访问该服务。要从我们的笔记本电脑访问此服务,我们将使用称为“ kube端口转发”的命令,运行以下命令:

kubectl port-forward svc /product-service 8001:8001

现在,我们可以使用http:// localhost:8001 / products访问该服务。

您可以通过创建一些产品并检索它们来测试产品服务,如上一个博客所述。

因此,现在我们的应用程序在本地kube集群中运行。在下一系列博客中,我们将使用外部数据库将更多的应用程序部署到集群中,并具有功能齐全的微服务应用程序。 我们还将学习内部服务如何相互通信,以及如何使用Ingress Controller将内部服务暴露给外界。

翻译自: https://www.javacodegeeks.com/2019/11/spring-boot-microservices-docker-and-kubernetes-workshop-part3.html

docker安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值