1 前言

经过《Maven一键部署Springboot到Docker仓库,为自动化做准备》,SpringbootDocker镜像已经准备好,也能在Docker上成功运行了,是时候放上Kubernetes跑一跑了。这非常简单,一个yaml文件即可。

2 一键部署Springboot

2.1 准备yaml文件

当准备好镜像文件后,要部署到Kubernetes就非常容易了,只需要一个yaml格式的文件即可,这个文件能描述你所需要的组件,如DeploymentServiceIngress等。定义如下:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: pkslow-springboot-deployment
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: springboot
  9. replicas: 2
  10. template:
  11. metadata:
  12. labels:
  13. app: springboot
  14. spec:
  15. containers:
  16. - name: springboot
  17. image: pkslow/springboot-mongo:0.0.6
  18. ports:
  19. - containerPort: 8080
  20. ---
  21. apiVersion: v1
  22. kind: Service
  23. metadata:
  24. labels:
  25. app: springboot
  26. name: pkslow-springboot-service
  27. spec:
  28. ports:
  29. - port: 8080
  30. name: springboot-service
  31. protocol: TCP
  32. targetPort: 8080
  33. nodePort: 30080
  34. selector:
  35. app: springboot
  36. type: NodePort

Kind:类型,有DeploymentServicePodIngress等,非常丰富;

metadata:用于定义一些组件信息,如名字、标签等;

labels:标签功能,非常有用,用于选择关联;但label不提供唯一性,可以使用组合来选择;

nodePort:对于需要给外部暴露的服务,有三种方式:NodePortsLoadBalancerIngress,这里使用NodePorts;需要注意的是,默认它的端口范围是[3000-32767],需要其它范围则需要修改相关参数。

2.2 通过kubectl命令部署

yaml文件准备好之后,就可以通过以下命令部署:

  1. $ kubectl create -f pksow-springboot.yaml
  2. deployment.apps/pkslow-springboot-deployment created
  3. service/pkslow-springboot-service created

看控制台日志则表明成功创建了DeploymentService。查看Dashboard如下:

访问Web服务:http://localhost:30080/user

通过命令行检查一下:

  1. $ kubectl get deployment
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. pkslow-springboot-deployment 2/2 2 2 8m2s
  4. $ kubectl get service
  5. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  6. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
  7. pkslow-springboot-service NodePort 10.102.218.119 <none> 8080:30080/TCP 8m7s
  8. $ kubectl get pod
  9. NAME READY STATUS RESTARTS AGE
  10. pkslow-springboot-deployment-68dffc6795-874tp 1/1 Running 0 8m15s
  11. pkslow-springboot-deployment-68dffc6795-89xww 1/1 Running 0 8m15s

至此,我们已经成功把Springboot发布到Kubernetes了。

2.3 试试杀死一个pod?

Kubernetes最小管理元素并不是容器,而是Pod

我们试着删掉一个Pod,看看会发生什么?

  1. $ kubectl delete pod pkslow-springboot-deployment-68dffc6795-89xww
  2. pod "pkslow-springboot-deployment-68dffc6795-89xww" deleted
  3. $ kubectl get pod
  4. NAME READY STATUS RESTARTS AGE
  5. pkslow-springboot-deployment-68dffc6795-874tp 1/1 Running 0 13m
  6. pkslow-springboot-deployment-68dffc6795-gpw67 1/1 Running 0 46s

可以发现,删除了其它一个Pod后,会自动为我们新生成一个Pod,这样能提高整个服务的高可用。

2.4 试试杀死一个容器?

我们再来探索一下如果杀死一个容器实例,会有什么反应。

  1. $ docker ps
  2. $ docker rm -f 57869688a226
  3. 57869688a226
  4. $ docker ps

经实验,杀死一个容器后,也会自动为我们重新生成一个容器实例。而Pod并不会变化,也不会重新生成。

2.5 快速扩容Pod

用户请求突增,服务要撑不住了,这时需要增加Pod的个数。只需要修改yaml配置文件的replicas,将它更新为replicas: 4。然后执行以下命令:

  1. $ kubectl apply -f pksow-springboot.yaml

查看Dashboard,在原有两个Pod的基础上,增加了两个。

3 一键部署Nginx

如果大家没有Springboot的镜像,可以使用官方的Nginx镜像,yaml文件如下:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: nginx
  9. replicas: 3
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx
  14. spec:
  15. containers:
  16. - name: nginx
  17. image: nginx:1.19.0
  18. ports:
  19. - containerPort: 80
  20. ---
  21. apiVersion: v1
  22. kind: Service
  23. metadata:
  24. labels:
  25. app: nginx
  26. name: nginx-service
  27. spec:
  28. ports:
  29. - port: 80
  30. name: nginx-service1
  31. protocol: TCP
  32. targetPort: 80
  33. nodePort: 30000
  34. - port: 81
  35. name: nginx-service2
  36. protocol: TCP
  37. targetPort: 80
  38. nodePort: 30001
  39. selector:
  40. app: nginx
  41. type: NodePort

执行部署命令:

  1. $ kubectl apply -f nginx-deployment-scale.yaml
  2. deployment.apps/nginx-deployment created
  3. service/nginx-service created

查看Dashboard如下:

访问服务:http://localhost:30000/http://localhost:30001 。因为我们设置了两个。

4 总结

本文以两个实例带大家感性地认识了Kubernetes,这对后面深入理解概念是有很大帮助的。原理和细节方面,后续再展开谈吧。


欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

欢迎大家关注、转发、点赞。

用Kubernetes部署Springboot或Nginx,也就一个文件的事的更多相关文章

  1. 利用Dockerfile部署SpringBoot项目

    利用Dockerfile部署SpringBoot项目 1.创建一个SpringBooot项目并且打成jar包 2.在Linux中创建一个文件夹,来做docker测试 [root@izwz90lvzs7 ...

  2. SpringBoot + Vue + nginx项目部署(零基础带你部署)

    一.环境.工具 jdk1.8 maven spring-boot idea VSVode vue 百度网盘(vue+springboot+nginx源码): 链接:https://pan.baidu. ...

  3. Kubernetes 部署 Nginx Ingress Controller 之 nginxinc/kubernetes-ingress

    更新:这里用的是 nginxinc/kubernetes-ingress ,还有个 kubernetes/ingress-nginx ,它们的区别见 Differences Between nginx ...

  4. nginx反向代理部署springboot项目报404无法加载静态资源

    问题:nginx反向代理部署springboot项目报404无法加载静态资源(css,js,jpg,png...) springboot默认启动端口为8080,如果需要通过域名(不加端口号)直接访问s ...

  5. K8S学习笔记之Kubernetes 部署策略详解

    0x00 概述 在Kubernetes中有几种不同的方式发布应用,所以为了让应用在升级期间依然平稳提供服务,选择一个正确的发布策略就非常重要了. 选择正确的部署策略是要依赖于我们的业务需求的,下面我们 ...

  6. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  7. Kubernetes 部署 1.9.7 高可用版

    转载于https://codegreen.cn/2018/08/30/kubernetes-cluster-1.9.7/ 前言 在部署之前,首先感谢 手动搭建高可用的kubernetes 集群 博文的 ...

  8. Kubernetes 部署失败的 10 个最普遍原因

    [原文].后面我们可能还会看到一个 OOMKilled 错误. 我们的应用正在挂掉?为什么? 首先我们查看应用日志.假定你发送应用日志到 stdout(事实上你也应该这么做),你可以使用 kubect ...

  9. kubernetes部署高可用Harbor

    前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...

随机推荐

  1. npm run dev启动项目,electron提示throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again')

    npm run dev 项目,提示 throw new Error('Electron failed to install correctly, please delete node_modules/ ...

  2. 温故知新-java虚拟机

    文章目录 java虚拟机是什么? jvm的体系结构 第一个类加载子系统 类的生命周期 加载器分类 类加载机制 第二个运行时数据区(内存结构) GC算法和收集器 如何判断对象可以被回收? 如何判断一个常 ...

  3. mui消息弹出确认框

    var btnArray = ['以后再说', '前往添加']; mui.confirm('你需要即时添加员工才可正常使用', '添加员工', btnArray, function(e) { if ( ...

  4. MySQL数据库离线包安装与注册

    本文主要介绍了MySQL数据库的离线安装和将MySQL服务注册为Windows应用服务的主要步骤. 1.下在安装程序包 MySQL Community Server 5.6.15 官方下载地址http ...

  5. 宝塔面板如何有效的清除SSL证书以及缓存

    一:关闭SSL 我们先关闭SSL证书,这个大家都会的吧.如图: 二:证书夹 网站配置的证书夹,我们删除掉,如图: 三:寻找SSL证书路径 网站配置里有一路径我们看下:如下 ssl_certificat ...

  6. centos7上安装memcached以及PHP安装memcached扩展(一)

    安装memecached 第一步:安装libevent # tar zvxf libevent-2.1.8-stable.tar.gz # cd libevent-2.1.8-stable # ./c ...

  7. 开发小白可以一年涨薪10w?这份java文档功不可没,学透你也可以

    靠这份文档,跳槽涨薪10K 金九银十的时候我分享了一份面试文档给我的兄弟,没想到这哥们2个月之内斩获数个BAT的offer, 最后选择了一个他最想要去的公司,既然有这么好的效果,我就打算把这份文档分享 ...

  8. python数据预处理

    缺失值处理 import pandas as pda import numpy as npy import matplotlib.pylab as pyl # data=pda.read_excel( ...

  9. [转] CISC与RISC

    点击阅读原文      这里就不去管细节,简单来谈一下,ARM和X86之间为什么不太具有可比性的问题.要搞清楚这个问题首先要明白什么是架构,之前也有很多人提到了架构不同,但架构是什么意思?它是一个比较 ...

  10. FastReport分组与聚合

    本来看上去都觉得简单顺便训练下,是想对Customer表中的Company字段以第1个开头的字母分组,结果自己因喜欢将那些东西都集中在一起进行训练,在那个Master-Slave上做例子,并且没用另外 ...