麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
637
2023-05-15
一个简单的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
可以看到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小时内删除侵权内容。