一个简单的Kubernetes应用部署示例

网友投稿 517 2023-05-15

一个简单的Kubernetes应用部署示例

一个简单的Kubernetes应用部署示例

说明

我们通过一个简单的示例来说明如何在Kubernets中部署一个应用,

一个Spring Boot项目提供数据库的增删改查操作一个Mysql数据库持久化数据

通过Eclipse构建一个Spring Boot项目以下简称demo,其中连接mysql的property文件application-k8s.properties内容如下:

我们通过环境变量来指定数据库的连接参数,其中:

MYSQL_SERVICE_HOST:mysql的hostname或者IP地址MYSQL_SERVICE_PORT:mysql的端口号MYSQL_DATABASE:连接mysql的数据库名MYSQL_ROOT_USER:mysql的root用户名MYSQL_ROOT_PASSWORD:mysql的root用户名密码

将demo打包成jar文件,并且用Dockerfile制作成Docker Image上传到私有Registry。

打包jar文件

Dockerfile如下:

制作Docker镜像

查看Docker镜像

docker images REPOSITORY TAG IMAGE ID CREATED SIZE 10.0.0.10:5000/app/demo v2.0 189f73beb27a About an hour ago 687 MB

将制作好的Docker镜像push到私有Registry

docker push 10.0.0.10:5000/app/demo:v2.0 The push refers to a repository [10.0.0.10:5000/app/demo] 6a6b9dbfc663: Pushed  35c20f26d188: Pushed  c3fe59dd9556: Pushed  6ed1a81ba5b6: Pushed  a3483ce177ce: Pushed  ce6c8756685b: Pushed  30339f20ced0: Pushed  0eb22bfb707d: Pushed  a2ae92ffcd29: Pushed  v2.0: digest: sha256:7296321564a7ace0bf1f2e8099fb7e0e01610efec5e1d1fec0c877b236bc0f5f size: 2212

到此,我们的demo镜像已经准备就绪,下面开始准备mysql镜像。

由于国外的Docker Hub网速比较慢,我们从国内的Docker Hub拉取一个mysql的镜像到本地

docker pull daocloud.io/library/mysql:5.7.4

将mysql镜像打tag,并且push到我们的私有Registry

docker tag daocloud.io/library/mysql:5.7.4 10.0.0.10:5000/library/mysql:5.7.4 docker push 10.0.0.10:5000/library/mysql:5.7.4 The push refers to a repository [10.0.0.10:5000/library/mysql] 5f70bf18a086: Pushed  903c114b758c: Pushed  c8c909bc9ac1: Pushed  6f19f89d53b4: Pushed  6e82deab235b: Pushed  ca60b5cb617c: Pushed  ac906c9ec95d: Pushed  4c816744690c: Pushed  5.7.4: digest: sha256:afe1630e8c9bd318a5e72b2536c2daacb96b8135cc2c6d3465262b5c7b7d1831 size: 3846

到此,我们mysql的镜像也准备就绪,下面开始部署我们的demo应用和mysql

创建mysql的部署yaml文件mysql-deployment.yaml

apiVersion: v1 kind: Service metadata:  name: mysql  labels:  app: mysql spec:  ports:  - port: 3306  selector:  app: mysql  clusterIP: None   --- apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1 kind: Deployment metadata:  name: mysql  labels:  app: mysql spec:  selector:  matchLabels:  app: mysql  template:  metadata:  labels:  app: mysql  spec:  containers:  - image: 10.0.0.10:5000/library/mysql:5.7.4  name: mysql  env:  - name: MYSQL_ROOT_PASSWORD  value: "123456"  - name: MYSQL_DATABASE  value: "demo"  livenessProbe:  tcpSocket:  port: 3306  ports:  - containerPort: 3306  name: mysql ​

通过环境变量初始化了一些参数:

MYSQL_ROOT_PASSWORD为mysql的root密码MYSQL_DATABASE为mysql启动后默认创建的数据库

创建demo应用部署的yaml文件demo-mysql-k8s.yaml

通过环境变量初始化了一些参数,这些参数与application-k8s.properties中的环境变量名对应,其中MYSQL_SERVICE_HOST是mysql部署后的enpoint IP地址。

通过kubectl命令行开始部署

kubectl apply -f mysql-deployment.yaml service/mysql created deployment.apps/mysql created

查看mysql的endpoint IP地址

kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.10.12.1  443/TCP 63d mysql ClusterIP None  3306/TCP 121m ​ kubectl describe service mysql Name: mysql Namespace: default Labels: app=mysql Annotations: kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"mysql"},"name":"mysql","namespace":"default"},"spec":{"c... Selector: app=mysql Type: ClusterIP IP: None Port:  3306/TCP TargetPort: 3306/TCP Endpoints: 172.18.45.2:3306 Session Affinity: None Events:  ​

可以看到mysql的enpoint IP地址是172.18.45.2,端口号是3306。

部署demo应用

kubectl apply -f demo-mysql-k8s.yaml deployment.apps/demo created service/demo created ​ kubectl get pods NAME READY STATUS RESTARTS AGE demo-d4cd5bfdd-8qpfw 1/1 Running 0 3s mysql-6f76465564-j8dq2 1/1 Running 0 60m

查看demo启动的日志

通过日志可以看到我们的demo应用已经连接到mysql数据库,我们的demo应用启动正常。

验证

通过Kubernetes的proxy访问我们的demo的health check

通过restful api向数据库写入测试数据

通过restful api查询刚才写入的数据

可以看到已经查询到刚才写入的测试数据。

通过命令行查看数据库的数据

通过mysql命令行我们可以看到刚才的测试数据已经保存到数据库中。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SQL查询语句的执行顺序解析
下一篇:微软SQL Server 2019 全新发布,内容亮点都在这里了
相关文章