1、背景

在生产环境中,利用devops环境部署一个java应用时,服务需要做到多副本部署,保证可用性,服务stop前需要做一些优雅下线,从注册中心中下线,服务心跳检查等,基于这些需求,需要编写一个满足这些需求的YAML文件,进行部署;

2、基本概念

2.1 pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod(就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的 “逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。
示例 它由一个运行镜像 nginx:1.14.2 的容器组成。

apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80

2.2 deployment

一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。
你负责描述 Deployment 中的 目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。
deployment官方文档

3、生产环境部署deployment

为什么需要探针,k8s无法知道应用是否还活着,只要进程还在运行,k8s则认为容器是健康的。

3.1 从注册中心下线

以Nacos为例,添加反注册接口

package com.yf.pricing.infra.conf;import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;@ConditionalOnClass(NacosAutoServiceRegistration.class)
@RestController
@RequestMapping(value = "actuator")
@RequiredArgsConstructor
@Slf4j
public class NacosStopEndpoint {private static final String SERVER_NAME="localhost";private final NacosAutoServiceRegistration nacosAutoServiceRegistration;@RequestMapping(value = "/deregister/service",method = RequestMethod.DELETE)public ResponseEntity<Boolean> stopNacosService(HttpServletRequest request){if (!SERVER_NAME.equalsIgnoreCase(request.getServerName())){return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(false);}log.info("ready to stop service ......");nacosAutoServiceRegistration.stop();log.info("service instance are deregister form nacos");return ResponseEntity.ok(true);}
}

3.2 构建docker镜像

打包自己的服务,在devops环境下需要通过git 拉取代码,然后打包,然后构建服务对应的镜像,推送到远程的Docker 私有仓库;
Dockerfile

FROM java:1.8
ADD pricing-admin.jar /data/service/pricing-admin.jar
RUN mkdir /data/logs
ENTRYPOINT java  -Dserver.port=8080 -DLOGS_FOLDER=${APP_LOG} -verbose:gc -Xloggc:${APP_LOG}/gc_start_at_`date '+%Y%m%d%H%M%S'`.log  -XX:ErrorFile=${APP_LOG}/java_error.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${APP_LOG} ${JAVA_OPTS}  -server -jar /data/service/pricing-admin.jar --server.tomcat.accesslog.directory=${APP_LOG}
docker build -t pricing-admin:1.0.0 .

3.3 服务yaml编写

这里以spring boot 项目为例,支持服务优雅下线,支持心跳检查,支持多服务多副本

apiVersion: apps/v1
kind: Deployment
metadata:name: pricing-adminlabels:app: pricing-adminnamespace: order
spec:replicas: 3selector:matchLabels:app: pricing-admintemplate:metadata:labels:app: pricing-adminspec:containers:- name: pricing-adminimage: pricing-admin:1.0.7imagePullPolicy: IfNotPresentlifecycle:preStop:exec:command: ["/bin/sh","-c","curl -X DELETE  ''http://localhost:8080/pricing/actuator/deregister/service'';\ sleep 30"]livenessProbe:httpGet:port: 8080path: /pricing/actuator/health## 容器启动后要等待多少秒后才启动存活和就绪探测器, 默认是 0 秒,最小值是 0。按照生产的情况配置40initialDelaySeconds: 40## 执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。periodSeconds: 5## 探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。timeoutSeconds: 2## 探测器在失败后,被视为成功的最小连续成功数。默认值是1,存活和启动探测的这个值必须是 1。最小值是 1successThreshold: 1## 当探测失败时,Kubernetes 的重试次数。 对存活探测而言,放弃就意味着重新启动容器,默认值是 3。最小值是 1failureThreshold: 3env:- name: TZvalue: Asia/Shanghai- name: APP_LOGvalue: /data/logs- name: JAVA_OPTSvalue: -Xmx512M -Xms512M -Xmn256M -XX:+UseParNewGC  -XX:+UseConcMarkSweepGCports:- containerPort: 8080volumeMounts:- name: vol-localtimemountPath: /etc/localtimereadOnly: truevolumes:- name: vol-localtimehostPath:path: /etc/localtime

3.4 部分k8s命令

## 查看pod 运行在那些Node上
kubectl get pod -n order -o wide
## 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。
kubectl describe pods pricing-admin-7dd69c7bc9-4wskj -n order

3.5 参考资料

官方文档

k8s-生产级别构建DeployMent相关推荐

  1. 在阿里云上部署生产级别Kubernetes集群

    阿里云是国内非常受欢迎的基础云平台,随着Kubernetes的普及,越来越多的企业开始筹划在阿里云上部署自己的Kubernetes集群. 本文将结合实战中总结的经验,分析和归纳一套在阿里云上部署生产级 ...

  2. 当SRS遇到K8s:如何构建海量推流源站?

    Photo by Oscar Ivan Esquivel Arteaga on Unsplash 本文来自流媒体直播集群SRS的官方wiki(https://github.com/ossrs/srs/ ...

  3. AWS EKS 创建k8s生产环境实例

    #AWS EKS 创建k8s生产环境实例 在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具创建e ...

  4. 搭建自己的以图搜图系统(二):深入优化搭建生产级别的图搜系统

    概述 本文是"搭建自己的以图搜图系统"系列的第二篇,在第一篇内容中我们了解了如何利用"机器学习框架 Towhee ¹"和"向量数据库 Milvus ² ...

  5. K8s系列之:Deployment应用实战和Deployment相关命令整理

    K8s系列之:Deployment应用实战和Deployment相关命令整理 一.Pod和Controller关系 二.Deployment应用场景 三.创建deployment的yaml文件 四.根 ...

  6. 使用Kubespray部署k8s生产集群

    夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远. 夫学须静也,才须学也,非学无以广才,非志无以成学.淫慢则不能励精,险躁则不能冶性. 年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐, ...

  7. 查看webpack版本_webpack小结-生产环境构建优化

    刚刚对我们前端项目做了一顿分析优化操作,因为接手时每次构建要花两分钟左右的时间,实在忍受不了,只能动手了.通过这次优化,重新温习了下 webpack 的一些知识.接下来会关于 webpack 展开写几 ...

  8. [k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成

    另一个结合harbor自动构建镜像的思路: 即code+baseimage一体的方案 - 程序员将代码提交到代码仓库gitlab - 钩子触发jenkins master启动一次构建 - jenkin ...

  9. k8s控制器——Replicaset和Deployment

    我们在定义pod资源时,可以直接创建一个kind:Pod类型的自主式pod,但是这存在一个问题,假如pod被删除了,那这个pod就不能自我恢复,就会彻底被删除,线上这种情况非常危险,所以今天就给大家讲 ...

最新文章

  1. 基于Netty+Zookeeper实现Dubbo
  2. 【easy】206. Reverse Linked List 链表反转
  3. 142-练习8和9 for循环的嵌套调用和随机数的生成
  4. 如果从椭圆的一个焦点发出光线,再经过椭圆的反射,会发生什么?
  5. 业务赋能利器之外卖特征档案
  6. Docker学习总结(17)——学会使用Dockerfile
  7. hbase中为何不能向表中插入数据_生产环境使用HBase,你必须知道的最佳实践 | 百万人学AI...
  8. hbase的region分区
  9. python结巴分词_“结巴”分词:做最好的Python分词组件
  10. 解决虚拟机IP地址无法获取和网络无法连接
  11. C# 从零开始写 SharpDx 应用 画三角
  12. 银行数字化转型导师坚鹏:农商行数字化转型案例研究
  13. 计算机网络技术赚钱,计算机网络技术-.ppt
  14. 几种主流的mosfet驱动电路分析
  15. excel 合并多个工作表,保留列宽等格式
  16. python金融分析小知识(19)——NLP初探之LDA话题建模
  17. BAT-医疗知识图谱相关产品分析介绍
  18. STM32MP157高性能微处理器产品介绍
  19. 什么是模糊神经网络结构,模糊神经网络应用实例
  20. 世界顶级杀毒软件排行(Toptennews)

热门文章

  1. 电脑卡顿反应慢怎么办?这几招教给你!
  2. 普通人存多少钱才能不焦虑?
  3. 构思编辑器教你如何不用代码排版出好看的微信公众号文章
  4. 12306python源码抢票(亲测可用)
  5. pdf在线翻译_24个PDF在线小工具,免费在线翻译PDF文档。
  6. Starvis星光全彩摄像机技术
  7. EndNote 高校_EndNote引文格式修改全攻略(一)——中英文混排问题
  8. 开发之准备:为目标设备创建映像
  9. 前端自学之HTML(02)
  10. 微信小程序使用swiper制作轮播图留白的解决方法