SpringBoot session超时的问题
最近在做SpringBoot的项目,用到了session,发现放置好session后,过一会就失效了,用下面发语句获取session失效时间,发现是60s
|
1 2 3 |
request.getSession().getMaxInactiveInterval(); 去网上查找,发现大多解决问题的办法是 在启动类中main方法的下面加入以下方法来手动设置session失效时间 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
@Bean public EmbeddedServletContainerCustomizer containerCustomizer(){ return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer Container) { container.setSessionTimeout(1800);//单位为S } }; } 但是社会在发展,时代在进步,SpringBoot2.0以后已经不支持这种方式了 ps:可以在pom文件中查看你的SpringBooot版本。 |
|
1 2 3 4 5 6 7 8 |
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> SpringBoot2.0以后的版本只需要在application.properties中加入以下配置就好 |
|
1 2 3 4 |
server.servlet.session.timeout = PT5H 这里重点解释一下 PT5H 意思是设置session失效的时间是5小时 通过查看setTimeouot的方法,这里要求传入Duration的实例 |
|
1 2 3 4 5 6 7 8 9 10 11 |
public void setTimeout(Duration timeout) { this.timeout = timeout; } Duration是在Java8中新增的,主要用来计算日期差值 Duration是被final声明的,并且是线程安全的 Duration转换字符串方式,默认为正,负以-开头,紧接着P,以下字母不区分大小写 D :天 T:天和小时之间的分隔符 H :小时 M:分钟 S:秒 每个单位都必须是数字,且时分秒顺序不能乱 比如P2dt3m5s P3d pt3h |
最后总结一下Duration最实用的一个功能其实是 between 方法,因为有很多时候我们需要计算两个日期之间的天数或者小时数,用这个就可以很方便的进行操作。 BugHome版权所有丨转载请注明出处:https://minei.me/archives/342.html from:http://www.cnblogs.com/ergexy/p/9684933.html
View Detailsjava.lang.OutOfMemoryError及解决方案
主要有3种比较常见的OutOfMemory Error: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: GC overhead limit exceeded 1. java.lang.OutOfMemoryError: Java heap space Java heap space,Java应用程序创建的对象存放在这片区域,垃圾回收(Garbage Collection)也发生在这块区域。通常一些比较“重型”的操作可能会导致该异常,比如:需要创建大量的对象,层次比较深的递归操作等。 解决方案有两种,一是优化应用,找到消耗大量内存的地方,然后优化代码或者算法。这种方式比较推荐,但是难度比较大,尤其是在产品环境中出现这种问题,开发人员不能很好的重现问题。第二种方案是提升Java heap size,这种方式虽然感觉有点治标不治本,但是可行性非常高,操作简单。 对于一般的应用,采用如下方式即可(数字根据自己的需要调整):
|
1 2 3 4 |
1 -Xms<size> - Set initial Java heap size 2 -Xmx<size> - Set maximum Java heap size 3 4 java -Xms512m -Xmx1024m JavaApp |
如果是在tomcat中,出现的这种问题,解决办法是在{tomcat_dir}/bin/catalina.bat中找到如下几行:
|
1 2 3 4 5 |
1 set MAINCLASS=org.apache.catalina.startup.Bootstrap 2 set ACTION=start 3 set SECURITY_POLICY_FILE= 4 set DEBUG_OPTS= 5 set JPDA= |
在后面加上一行(数字根据自己的需要调整):
|
1 |
1 set CATALINA_OPTS=-Xms512m -Xmx512m |
2. java.lang.OutOfMemoryError: PermGen space Perm Gen Size(Permanent Generation Size),用来存储被加载的类的定义(class definition)和元数据(metadata),比如:Class Object和Method Object等。这是内存中的一块永久保存区域,JVM的垃圾回收不会触及这块区域。通常在加载一个非常大的项目的时候才会出现该异常。 对于一般的应用,采用如下方式即可(数字根据自己的需要调整):
|
1 2 3 4 |
1 -XX:PermSize<size> - Set initial PermGen Size. 2 -XX:MaxPermSize<size> - Set the maximum PermGen Size. 3 4 java -XX:PermSize=64m -XX:MaxPermSize=128m JavaApp |
如果是在tomcat中出现这个问题,解决办法是在{tomcat_dir}/bin/catalina.bat中添加如下一行:
|
1 |
1 set CATALINA_OPTS=-server -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m |
3. java.lang.OutOfMemoryError: GC overhead limit exceeded 这个错误会出现在这个场景中:GC占用了多余98%(默认值)的CPU时间却只回收了少于2%(默认值)的堆空间。目的是为了让应用终止,给开发者机会去诊断问题。一般是应用程序在有限的内存上创建了大量的临时对象或者弱引用对象,从而导致该异常。虽然加大内存可以暂时解决这个问题,但是还是强烈建议去优化代码,后者更加有效。 首先,你可以关闭JVM这个默认的策略:
|
1 |
1 java -XX:-UseGCOverheadLimit JavaApp |
其次,你也可以尝试去加大Heap Size:
|
1 |
1 java -Xmx512m JavaApp |
注意:在修改Tomcat的catalina.bat(*.sh)中的内容时,网上有很多都是说直接修改JAVA_OPTS,按照Apache官方的说法是: Note: Do not use JAVA_OPTS to specify memory limits. You do not need much memory for a small process that is used to stop Tomcat. Those settings belong […]
View Detailsjava.lang.OutOfMemoryError: Java heap space 解决方案
这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个. 1.可以在windows 更改系统环境变量加上JAVA_OPTS=-Xms64m -Xmx512m 2,如果用的tomcat,在windows下,可以在E:\Program Files\apache-tomcat-6.0.29\bin\catalina.bat 中加上: set JAVA_OPTS=-Xms512m -Xmx512m 位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适. 但后来发现貌似不管用,还是不断的跳出这个错误信息,后来到Myeclipse的Tomcat 6.x里的JDK设置参数就好了,参数如下: -Xms128M -Xmx512M -XX:PermSize=128m -XX:MaxPermSize=128m 3.如果是linux系统 Linux 在{tomcat_home}/bin/catalina.sh的前面,加 set JAVA_OPTS='-Xms512 -Xmx512′ java.lang.OutOfMemoryError: Java heap space 使用Java程序从数据库中查询大量的数据时出现异常: java.lang.OutOfMemoryError: Java heap space 在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。 JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。 例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar 如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了。GC占用了更多的时间,而应用分配到的执行时间较少。 Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。 Heap size的 -Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。 from:https://blog.csdn.net/scholar_man/article/details/50903454
View Details甜蜜素
甜蜜素,其化学名称为环己基氨基磺酸钠,是食品生产中常用的添加剂 [1] 。甜蜜素是一种常用甜味剂,其甜度是蔗糖的30~40倍。消费者如果经常食用甜蜜素含量超标的饮料或其他食品,就会因摄入过量对人体的肝脏和神经系统造成危害,特别是对代谢排毒的能力较弱的老人、孕妇、小孩危害更明显。 制法 是由氨基磺酸与环己胺(C6H11NH2)及氢氧化钠反应而成。 from:https://baike.baidu.com/item/甜蜜素/3769164
View Details安赛蜜
安赛蜜是一种食品添加剂,是化学品,类似于糖精,易溶于水,增加食品甜味的,没有营养,口感好,无热量,具有在人体内不代谢、不吸收(是中老年人、肥胖病人、糖尿病患者理想的甜味剂),对热和酸稳定性好等特点,是当前世界上第四代合成甜味剂。它和其它甜味剂混合使用能产生很强的协同效应,一般浓度下可增加甜度30%~50%。 安赛蜜具有强烈甜味,甜度约为蔗糖的130倍,呈味性质与糖精相似。高浓度时有苦味。 安赛蜜为人工合成甜味剂, 经常食用合成甜味剂超标的食品会对人体的肝脏和神经系统造成危害, 特别是对老人、孕妇、小孩危害更为严重。如果短时间内大量食用,会引起血小板减少导致急性大出血。 from:https://baike.baidu.com/item/%E5%AE%89%E8%B5%9B%E8%9C%9C/4311894
View DetailsMYSQL com.mysql.jdbc.PacketTooBigException错误
问题描述 保存数据到MySQL时遇到以下错误: Error updating database. Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (10113 > 1024). You can change this value on the server by setting the max_allowed_packet’。 原因是MySQL的max_allowed_packet设置过小引起的,默认设置的是1M,操作数据大于1M会受max_allowed_packet参数限制;改为了10M后问题解决。 使用SQL: show VARIABLES like '%max_allowed_packet%'; 查看max_allowed_packet大小。 解决方案 1. 在my.cnf中(windows下my.ini)修改 max_allowed_packet大小为10M;Max_allowed_packet = 10M。 2. 保存并退出。 3. 重启MySQL服务即可。 ——————— 作者:犁叔 来源:CSDN 原文:https://blog.csdn.net/u012739535/article/details/76132973 版权声明:本文为博主原创文章,转载请附上博文链接!
View DetailsSpringboot项目上传文件大小限制问题
最近项目中用到了文件图片上传操作, 前端 使用<input type="file" class="ignore" accept="image/jpeg,image/png,image/gif"> (base64字节) 后台使用String字符串进行接收(base64字节) properties配置文件中进行文件上传大小配置 spring.http.multipart.max-file-size=20Mb //上传文件的大小限定;只有上传采用文件格式进行接收时起作用,针对上面的base64格式图片(后台是String进行接收)不起作用; spring.http.multipart.max-request-size=60Mb //上传请求数据的大小限定;限定请求的总数据大小 但是发现当上传文件大小大于1.5M时就会报错:
|
1 2 3 |
2018-06-08 11:03:19.006 ERROR 3784 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector] with root cause java.lang.IllegalStateException: The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector |
经过分析发现是springboot中的内置tomcat服务器限定了Httppost的最大size 通过在properties中添加如下配置,修改该内置服务器的对HttpPost数据的大小; 成功解决该问题; server.maxHttpHeaderSize=102400000 //设定HttpHeader请求头大小 server.maxHttpPostSize =102400000 //设定Httppost数据大小 from:https://www.cnblogs.com/AnXinliang/p/9154659.html
View Details2018 JavaScript 现状调查报告火热出炉!
StateOfJS 刚刚发布了 2018年的 JavaScript 现状调查报告,今年他们调查了超过 20000 名 JavaScript 开发者,以确定他们正在使用什么,他们对什么感到满意以及他们想要学习什么。 1、JavaScript 现状 —— “方言” 随着 JavaScript 的成熟,开发者基于 JavaScript 创建了许多其他语言,或者叫“方言”,如 ES6、TypeScript、Flow、Reason、Elm、ClojureScript 、CoffeeScript 等等。曾几何时,CoffeeScript 是该方向的唯一支持者,但如今它已被 ES6 、TypeScript、Flow 等取代。 StateOfJS 表示有充分的理由认为这是整个 JavaScript 的未来。因为随着像 Web Assembly 这样的项目的出现,直接使用 JavaScript 编写代码可能很快就会变得古怪。 2018年的两位大赢家是 ES6 和 TypeScript 。另外 Reason 也值得关注,它背后有 Facebook 的支持,并且拥有非常高的满意度和兴趣值。 2、JavaScript 现状 —— 前端框架 结果基本上和其他榜单类似,React 和 Vue 唱主角,Angular 有垮台的趋势。 StateOfJS 表示,两年前有 27% 的受访者表示从未听说过 Vue ,但如今这一比例已降至 1.3% !虽然 React 仍然拥有更大的市场份额,但 Vue 的迅速崛起也没有停止的迹象。 Angular 本身拥有庞大的用户群,但也很难看到它重新登上前端框架的冠亚宝座。 3、JavaScript 现状 —— 数据层 毫无疑问,Redux 是使用最广泛的工具,82% 的满意率也证明了它的成熟程度。不过 GraphQL 也并非没有冲击的可能,其用户在两年内从 5% 上升到了 20% 。 4、JavaScript 现状 —— 后端框架(服务端) JavaScript 在后端(服务端)领域近年来似乎没有取得任何重大突破,虽然每年都有无数的框架出现,但很少有能够获得很大的成功并挑战 Express 的地位的。 即便是拥有 Express 继任者称号的 Koa ,其满意度也相对较低,使用量也有大幅下滑。 该领域有一个有趣的参与者 —— Next.js,最近引起了很多人的兴趣。虽然它与功能齐全的 Node 后端不太可比,但它专注于解决 React 应用的服务器端渲染问题,使其成为一个非常实用的工具。 5、JavaScript 现状 —— 测试 […]
View DetailsSpringboot学习之--将springboot注册为windows系统服务
最近做了一个项目,部署到客户的服务器上,运行状况也良好。就是客户的服务器经常会重启。然后客户也不是it人员,重启后重新启动服务,就得使用命令: jar -jar xxxx.jar 这对于不懂技术的人来说是个很复杂的事,于是决定打算修改修改,就有了下文。 一、编写bat文件启动jar 1、新建一个名为fmstart.bat,打开编辑,写入以下内容 cd E:/springboot java -jar fmstart-0.0.1-dev.jar exit 2、然后保存。ok,下次启动时,可以直接点击fmstart.bat启动了。至此愉快的玩耍了几天。 你以为这样就完了,过了几天,客户觉得点击bat启动也太麻烦了,我想一开机就启动。于是又得改。 二、windows启动菜单添加快捷方式启动 1、win+R打开运行窗口,输入shell:startup; 2、将fmstart.bat,新建一个快捷方式,然后将快捷方式拷贝到启动项文件中。 重启电脑,看到了熟悉的界面,启动成功。 又过了几天,客户看到我们的cmd界面也不爽了,说能否不让它出现,我容易误把它关掉。 于是又得改改改。。。。。 三、使用winsw将springboot打包的jar注册系统本地服务 【注】:本人只在Windows Server和win7测试,可以成功;win10会报错。等待作者更新新版本。 1、先从github上下载winsw,下载地址https://github.com/kohsuke/winsw 我下载的是2.1.2版本,小伙伴们可下载最新的版本。 2、下载WinSW.NET4.exe,这个是支持.netframework4.0的版本,如果没有.net4.0,请先安装.net4.0,下载后改名成你想启动的服务名字。比如:fmstart.exe 3、新建一个fmstart.xml文件,编写配置内容 <service> <id>fmstart</id> <name>fmstart</name> <description>This is fmstart service.</description> <!-- java环境变量 --> <env name="JAVA_HOME" value="%JAVA_HOME%"/> <executable>java</executable> <arguments>-jar "E:\springboot\fmstart-0.0.1-dev.jar"</arguments> <!-- 开机启动 --> <startmode>Automatic</startmode> <!-- 日志配置 --> <logpath>%BASE%\log</logpath> <logmode>rotate</logmode> </service> 4、保存fmstart.xml文件,将fmstart.xml和fmstart.exe放到要启动的jar的同级目录下。 例如:E:\springboot\ 5、打开cmd,进入到E:\springboot;输入fmstart.exe install安装服务。 安装后,输入fmstart.exe start启动服务; 相关命令如下: 除了install命令外,还有其它命令: uninstall:删除服务 start:启动服务 stop:停止服务 restart:重启服务 status:输出当前服务的状态 6、安装成功后,win+R打开运行,输入services.msc,查看是否有一个叫fmstart的服务。运行状态是否为正在运行。 如果安装成功后,服务状态为正在运行,即可测试你的接口来了。 到此结束了,客户每次启动服务器就会自己运行该服务,也不会有cmd小窗了。 ——————— 作者:mirfang 来源:CSDN 原文:https://blog.csdn.net/u012489412/article/details/81034375 版权声明:本文为博主原创文章,转载请附上博文链接!
View DetailsCentos7 下Kubernetes集群安装部署
操作环境 网络拓扑图 、 操作环境: k8s-master: OS:
|
1 2 |
[root@k8s-master ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) |
etcd:
|
1 2 3 4 5 |
[root@k8s-master ~]# etcd --version etcd Version: 3.2.9 Git SHA: f1d7dd8 Go Version: go1.8.3 Go OS/Arch: linux/amd64 |
Kubernetes:
|
1 2 3 |
[root@k8s-master ~]# kubectl version Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} |
k8s-node1&k8s-node2: OS:
|
1 2 |
[root@k8s-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) |
etcd:
|
1 2 3 4 5 |
[root@k8s-node1 ~]# etcd --version etcd Version: 3.2.9 Git SHA: f1d7dd8 Go Version: go1.8.3 Go OS/Arch: linux/amd64 |
docker:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@k8s-node1 ~]# docker version Client: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-68.gitec8512b.el7.centos.x86_64 Go version: go1.8.3 Git commit: ec8512b/1.12.6 Built: Mon Dec 11 16:08:42 2017 OS/Arch: linux/amd64 Server: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-68.gitec8512b.el7.centos.x86_64 Go version: go1.8.3 Git commit: ec8512b/1.12.6 Built: Mon Dec 11 16:08:42 2017 OS/Arch: linux/amd64 |
Kubernetes:
|
1 2 |
[root@k8s-node1 ~]# kubectl version Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} |
安装部署 安装前准备 在安装部署集群前,先将三台服务器的时间通过NTP进行同步,否则,在后面的运行中可能会提示错误
|
1 |
[root@k8s-node1 ~]# ntpdate -u cn.pool.ntp.org |
在node节点上安装redhat-ca.crt
|
1 |
[root@k8s-node1 ~]# yum install *rhsm* -y |
etcd集群配置 master节点配置 1.安装kubernetes etcd
|
1 |
[root@k8s-master ~]# yum -y install kubernetes-master etcd |
2.配置etcd选项 ETCD_DATA_DIR/ETCD_LISTEN_PEER_URLS/ETCD_LISTEN_CLIENT_URLS/ETCD_MAX_SNAPSHOTS/ETCD_NAME/ETCD_INITIAL_ADVERTISE_PEERURLS/ETCD_ADVERTISE_CLIENT_URLS/ETCD_INITIAL_CLUSTER
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
[root@k8s-master ~]# vi /etc/etcd/etcd.conf #[Member] #ETCD_CORS="" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" ETCD_LISTEN_PEER_URLS="http://10.10.200.224:2380" ETCD_LISTEN_CLIENT_URLS="http://10.10.200.224:2379,http://127.0.0.1:2379" ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" ETCD_NAME="etcd1" #ETCD_SNAPSHOT_COUNT="100000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" #ETCD_QUOTA_BACKEND_BYTES="0" # #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.200.224:2380" ETCD_ADVERTISE_CLIENT_URLS="http://10.10.200.224:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_DISCOVERY_SRV="" ETCD_INITIAL_CLUSTER="etcd1=http://10.10.200.224:2380,etcd2=http://10.10.200.229:2380,etcd3=http://10.10.200.230:2380" #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #ETCD_INITIAL_CLUSTER_STATE="new" #ETCD_STRICT_RECONFIG_CHECK="true" #ETCD_ENABLE_V2="true" # #[Proxy] #ETCD_PROXY="off" #ETCD_PROXY_FAILURE_WAIT="5000" #ETCD_PROXY_REFRESH_INTERVAL="30000" #ETCD_PROXY_DIAL_TIMEOUT="1000" #ETCD_PROXY_WRITE_TIMEOUT="5000" #ETCD_PROXY_READ_TIMEOUT="0" # #[Security] #ETCD_CERT_FILE="" #ETCD_KEY_FILE="" #ETCD_CLIENT_CERT_AUTH="false" #ETCD_TRUSTED_CA_FILE="" #ETCD_AUTO_TLS="false" #ETCD_PEER_CERT_FILE="" #ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH="false" #ETCD_PEER_TRUSTED_CA_FILE="" #ETCD_PEER_AUTO_TLS="false" # #[Logging] #ETCD_DEBUG="false" #ETCD_LOG_PACKAGE_LEVELS="" #ETCD_LOG_OUTPUT="default" # #[Unsafe] #ETCD_FORCE_NEW_CLUSTER="false" # #[Version] #ETCD_VERSION="false" #ETCD_AUTO_COMPACTION_RETENTION="0" # #[Profiling] #ETCD_ENABLE_PPROF="false" #ETCD_METRICS="basic" # #[Auth] #ETCD_AUTH_TOKEN="simple" |
nodes节点配置 1.安装部署kubernetes-node/etcd/flannel/docker
|
1 |
[root@k8s-node1 ~]# yum -y install kubernetes-node etcd flannel docker |
2.分别配置etcd,node1与node2的配置方法相同,以node1配置文件为例说明
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
[root@k8s-node1 ~]# vi /etc/etcd/etcd.conf #[Member] #ETCD_CORS="" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" ETCD_LISTEN_PEER_URLS="http://10.10.200.229:2380" ETCD_LISTEN_CLIENT_URLS="http://10.10.200.229:2379,http://127.0.0.1:2379" #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" ETCD_NAME="etcd2" #ETCD_SNAPSHOT_COUNT="100000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" #ETCD_QUOTA_BACKEND_BYTES="0" # #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.200.229:2380" ETCD_ADVERTISE_CLIENT_URLS="http://10.10.200.229:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_DISCOVERY_SRV="" #ETCD_INITIAL_CLUSTER="default=http://localhost:2380" #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" "/etc/etcd/etcd.conf" 66L, 1696C #[Member] #ETCD_CORS="" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" ETCD_LISTEN_PEER_URLS="http://10.10.200.229:2380" ETCD_LISTEN_CLIENT_URLS="http://10.10.200.229:2379,http://127.0.0.1:2379" #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" ETCD_NAME="etcd2" #ETCD_SNAPSHOT_COUNT="100000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" #ETCD_QUOTA_BACKEND_BYTES="0" # #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.200.229:2380" ETCD_ADVERTISE_CLIENT_URLS="http://10.10.200.229:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" #ETCD_DISCOVERY_SRV="" #ETCD_INITIAL_CLUSTER="default=http://localhost:2380" #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #ETCD_INITIAL_CLUSTER_STATE="new" #ETCD_STRICT_RECONFIG_CHECK="true" #ETCD_ENABLE_V2="true" ETCD_INITIAL_CLUSTER="etcd1=http://10.10.200.224:2380,etcd2=http://10.10.200.229:2380,etcd3=http://10.10.200.230:2380" # #[Proxy] #ETCD_PROXY="off" #ETCD_PROXY_FAILURE_WAIT="5000" #ETCD_PROXY_REFRESH_INTERVAL="30000" #ETCD_PROXY_DIAL_TIMEOUT="1000" #ETCD_PROXY_WRITE_TIMEOUT="5000" #ETCD_PROXY_READ_TIMEOUT="0" # #[Security] #ETCD_CERT_FILE="" #ETCD_KEY_FILE="" #ETCD_CLIENT_CERT_AUTH="false" #ETCD_TRUSTED_CA_FILE="" #ETCD_AUTO_TLS="false" #ETCD_PEER_CERT_FILE="" #ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH="false" #ETCD_PEER_TRUSTED_CA_FILE="" #ETCD_PEER_AUTO_TLS="false" # #[Logging] #ETCD_DEBUG="false" #ETCD_LOG_PACKAGE_LEVELS="" #ETCD_LOG_OUTPUT="default" # #[Unsafe] #ETCD_FORCE_NEW_CLUSTER="false" # #[Version] #ETCD_VERSION="false" #ETCD_AUTO_COMPACTION_RETENTION="0" # #[Profiling] #ETCD_ENABLE_PPROF="false" #ETCD_METRICS="basic" # #[Auth] #ETCD_AUTH_TOKEN="simple" |
启动etcd cluster 分别在3台服务器启动etcd
|
1 2 3 4 5 6 7 8 |
[root@k8s-master ~]# systemctl start etcd.service [root@k8s-master ~]# systemctl status etcd.service ?etcd.service - Etcd Server Loaded: loaded (/usr/lib/systemd/system/etcd.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2018-01-03 09:21:36 CST; 1h 41min ago Main PID: 11426 (etcd) CGroup: /system.slice/etcd.service 忖11426 /usr/bin/etcd --name=etcd1 --data-dir=/var/lib/etcd/default.etcd --listen-client-urls=http://10.10.200.224:2379,http://127.0.0.1:2379 |
查看etcd集群状态
|
1 2 3 4 5 |
[root@k8s-master ~]# etcdctl cluster-health member 359947fae86629a7 is healthy: got healthy result from http://10.10.200.224:2379 member 4be7ddbd3bb99ca0 is healthy: got healthy result from http://10.10.200.229:2379 member 84951a697d1bf6a0 is healthy: got healthy result from http://10.10.200.230:2379 cluster is healthy |
Kubernetes集群配置 master节点配置 1.apiserver配置文件修改,注意KUBE_ADMISSION_CONTROL选项的参数配置
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[root@k8s-master ~]# vi /etc/kubernetes/apiserver ### # kubernetes system config # # The following values are used to configure the kube-apiserver # # The address on the local server to listen to. #KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1" KUBE_API_ADDRESS="--address=0.0.0.0" # The port on the local server to listen on. KUBE_API_PORT="--port=8080" # Port minions listen on KUBELET_PORT="--kubelet-port=10250" # Comma separated list of nodes in the etcd cluster KUBE_ETCD_SERVERS="--etcd-servers=http://10.10.200.224:2379,http://10.10.200.229:2379,http://10.10.200.230:2379" # Address range to use for services KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" # default admission control policies #KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota" # Add your own! KUBE_API_ARGS="" |
2.启动服务
|
1 2 3 4 5 6 |
[root@k8s-master ~]# systemctl start kube-apiserver [root@k8s-master ~]# systemctl start kube-controller-manager [root@k8s-master ~]# systemctl start kube-scheduler [root@k8s-master ~]# systemctl enable kube-apiserver [root@k8s-master ~]# systemctl enable kube-controller-manager [root@k8s-master ~]# systemctl enable kube-scheduler |
nodes节点配置 1.配置config配置,node1&node2配置相同,以node1为例说明
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@k8s-node1 ~]# vi /etc/kubernetes/config ### # kubernetes system config # # The following values are used to configure various aspects of all # kubernetes services, including # # kube-apiserver.service # kube-controller-manager.service # kube-scheduler.service # kubelet.service # kube-proxy.service # logging to stderr means we get it in the systemd journal KUBE_LOGTOSTDERR="--logtostderr=true" # journal message level, 0 is debug KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged docker containers KUBE_ALLOW_PRIV="--allow-privileged=false" # How the controller-manager, scheduler, and proxy find the apiserver KUBE_MASTER="--master=http://10.10.200.224:8080" |
2.配置kubelet
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@k8s-node1 ~]# vi /etc/kubernetes/kubelet ### # kubernetes kubelet (minion) config # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces) KUBELET_ADDRESS="--address=127.0.0.1" # The port for the info server to serve on # KUBELET_PORT="--port=10250" # You may leave this blank to use the actual hostname KUBELET_HOSTNAME="--hostname-override=10.10.200.229" # location of the api-server KUBELET_API_SERVER="--api-servers=http://10.10.200.224:8080" # pod infrastructure container KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" # Add your own! KUBELET_ARGS="" |
网络配置 这里使用flannel进行网络配置,已经在2个节点上安装,下面进行配置。 在节点上进行配置flannel
|
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@k8s-node1 ~]# vi /etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://10.10.200.224:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/atomic.io/network" # Any additional options that you want to pass #FLANNEL_OPTIONS="" |
查看集群状态
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@k8s-master ~]# kubectl get nodes NAME STATUS AGE 10.10.200.229 Ready 1h 10.10.200.230 Ready 1h [root@k8s-master ~]# etcdctl member list 359947fae86629a7: name=etcd1 peerURLs=http://10.10.200.224:2380 clientURLs=http://10.10.200.224:2379 isLeader=true 4be7ddbd3bb99ca0: name=etcd2 peerURLs=http://10.10.200.229:2380 clientURLs=http://10.10.200.229:2379 isLeader=false 84951a697d1bf6a0: name=etcd3 peerURLs=http://10.10.200.230:2380 clientURLs=http://10.10.200.230:2379 isLeader=false [root@k8s-master ~]# etcdctl cluster-health member 359947fae86629a7 is healthy: got healthy result from http://10.10.200.224:2379 member 4be7ddbd3bb99ca0 is healthy: got healthy result from http://10.10.200.229:2379 member 84951a697d1bf6a0 is healthy: got healthy result from http://10.10.200.230:2379 cluster is healthy |
测试使用 在测试使用前,现在2个节点上手动下载pod images,以及测试使用的nginx images
|
1 2 3 |
[root@k8s-node1 ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest [root@k8s-node1 ~]# docker pull nginx |
运行nginx
|
1 2 |
[root@k8s-master ~]# kubectl run my-nginx --image=nginx --replicas=2 --port=80 deployment "my-nginx" created |
查看pods
|
1 2 3 4 |
[root@k8s-master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE my-nginx-379829228-55s8n 1/1 Running 0 39s my-nginx-379829228-th5t1 1/1 Running 0 39s |
可以在node节点上查看到对应的containers […]
View Details