百度网盘链接:https://pan.baidu.com/s/1ZL07VO3ysXpyr5qMpMEHiw提取码: aa86
(1)创建一个springBoot项目,使用idea或者sts都可以创建一个简单的springBoot项目,我这里使用sts创建项目
(2)点击【file】,点击【new】,点击【project】,点击【spring boot】,点击 【spring starter project】
(3)创建一个SpringBoot demo项目
(4)pom文件增加 spring-boot-starter-web包和org.apache.maven.plugins包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 要使生成的jar可运行,需要加入此插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
(6) 再application.propertis中配置端口号和项目地址
server.servlet.context-path=/
server.port=9999
(7)在项目创建一个Demo.class文件
package com.thunisoft.camera.k8s;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/")
public class Demo {
@RequestMapping("/str")
public String str() {
return "this is k8s demo";
}
}
(8)运行一下,在浏览器上访问一下
(9)项目打成jar包,选中项目【右键】、【Run as】、【4、maven clean】;
选中项目【右键】、【Run as】、【6、maven install】;
(10)在windows本地测试使用.bat文件,在centOS上运行文件时.sh文件,dockerfile是用于创建镜像的,yaml文件是执行镜像文件的。
在windows上运行Runjar.bat访问浏览器.
G:
CD G:/apk/demo
java -jar k8s-demo-0.0.1.jar
(11) 在centOS上创建一个demo文件夹.将jar包放到demo文件夹中,
创建一个demo.sh文件,编辑demo.sh文件,将下方内容复制到demo.sh文件中,红色文字代表项目jar包,启动方式./demo.sh
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
JAVA_OPT="-Xmx4000m"
##执行的应用
APP_NAME=k8s-demo-0.0.1.jar
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh exchange.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep java |grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid}"
else
nohup java ${JAVA_OPT} -jar ${APP_NAME} &
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
echo "${APP_NAME} has stopped successfully"
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
sleep 5
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
(12) 设置文件权限,并运行文件,在浏览器上访问,记住我们设置的项目端口号.访问的是虚拟机IP
chmod +x demo.sh
然后运行文件
./demo.sh start
(13)关闭项目
[root@master demo]# ./demo.sh stop
k8s-demo-0.0.1.jar has stopped successfully
(14)修改Dockerfile,先创建一个Dockerfile文件,放到虚拟机demo文件夹内
#基础镜像jdk
FROM java:8
#指定维护者信息
MAINTAINER wangpeng
#挂载的路径
VOLUME /tmp
#将jar打入镜像之中
ADDk8s-demo-0.0.1.jar demo.jar
#容器向外暴露的端口 此端口没用
#EXPOSE 8999
#入口命令,执行jar
ENTRYPOINT ["java","-jar","/demo.jar"]
(15) 通过docker命令创建镜像.docker build 创建的意思 -t (tag)的意思 打成镜像名称 wangpeng/demo, 版本号 v0.0.1 后面的. 代表当前目录上.
docker build -t wangpeng/demo:v0.0.1 .
(16)通过docker命令查看镜像
docker iamges
成功生成一个wangpeng/demo:v0.0.1版本的镜像
(17) 编写yaml文件,创建一个demo.yaml文件.注意yml文件格式,层级结构
apiVersion: v1
kind: ReplicationController
metadata:
name: k8s-demo
spec:
replicas: 1
selector:
app: k8s-demo
template:
metadata:
labels:
app: k8s-demo
spec:
containers:
- name: cipher
#选择镜像文件名称
image: wangpeng/demo:v0.0.1
#默认在本机找镜像
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: k8s-demo
spec:
#使用NodePort端口
type: NodePort
ports:
#原来项目设置的端口
- port: 9999
targetPort: 9999
#设置访问端口为30100 ,可以自己设置
nodePort: 30100
selector:
app: k8s-demo
(18)通过docker命令运行yaml文件
kubectl create -f demo.yaml
访问项目时,无法找到
并且项目的demo,pode状态为Pending时,执行以下内容
kubectl taint nodes --all node-role.kubernetes.io/master-
(19) 是否允许master节点上部署pod
允许master节点部署pod
kubectl taint nodes --all node-role.kubernetes.io/master-
如果不允许调度
kubectl taint nodes master1 node-role.kubernetes.io/master=:NoSchedule
污点可选参数
NoSchedule: 一定不能被调度
PreferNoSchedule: 尽量不要调度
NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
忽略错误就可以
(20)访问项目
完毕