安装环境
- 操作系统:centos7
- docker:1.13.1
- k8s: 1.5.2(单节点)
- 如果没有安装docker和k8s的参照我前一篇博客安装安装k8s踩的一些坑
部署安装步骤
1、先在docker里面安装redis、pgsql、zookeeper、
1.1 docker search imageName //搜索镜像 选择合适版本然后
1.2 docker pull imageName //拉下镜像
1.3 docker images //查看自己的镜像仓库是否有
1.4 docker运行zookeeper、redis、pgsql安装:
docker run -d docker.io/redis --name myredis -p 6379:6379 redis --requirepass "123456"
docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d docker.io/borgius/pgsql
docker run --privileged=true -d --name zookeeper1 --publish 2181:2181 -d docker.io/zookeeper
2、将自己的服务打成镜像、(此处有2个服务、server、web服务)
2.1 创建Dockerfile文件、文件内容如下、(此处为了方便,很多地方简写:如果是部署在
生产环境上,需要修改下日志目录,以及启动方式) server dockerfile文件内容
FROM java:8
VOLUME /tmp
COPY resources/* resources/
ADD service-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
2.2 执行docker build -t 镜像名字 . 命令进行构建镜像、成功后使用docker images
查看自己的镜像是否生成(注意镜像名字后面有个空格和一个点. 表示当前目录下)、
如果镜像没有生成需要重新执行构建,排查问题
2.3 创建web docker镜像:同上 Dockerfile 文件内容如下:
FROM java:8
VOLUME /tmp
COPY resources/* resources/
ADD web-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
3、将server项目,和web项目部署到k8s里面、使用环境变量连接外面数据源
3.1 执行命令 kubectl get node 查看节点是否正常(单节点如下:)
NAME STATUS AGE
127.0.0.1 Ready 6d
3.2 创建server、web项目的yaml文件、文件内容如下:
注意: 对于文件开头apiVersion版本:内容与k8s版本相关:
1.6版本之前 apiVsersion:extensions/v1beta1
1.6版本到1.9版本之间:apps/v1beta1
1.9版本之后:apps/v1
具体详情可参考:
k8s的apiversion版本
server.yaml 文件内容:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: server
labels:
app: server
spec:
replicas: 1
selector:
matchLabels:
app: server
template:
metadata:
labels:
app: server
spec:
containers:
- name: server
image: server //镜像名字
imagePullPolicy: Never //表示从本地docker镜像中获取镜像
ports:
- containerPort: 8087 //端口
env: //配置的环境变量
- name: ZOOKEEPER_HOST //zookeeper ip地址
value: '10.62.155.12'
- name: ZOOKEEPER_PORT //zookeeper 端口
value: '2181'
- name: REDIS_HOST //redis
value: '10.62.155.12'
- name: REDIS_PASSWORD //密码
value: "123456"
- name: PGSQL_SERVICE_HOST
value: '10.62.55.12'
- name: PGSQL_SERVICE_PORT
value: "5432"
- name: PGSQL_PASSWORD
value: "123456"
- name: PGSQL_USERNAME
value: "postgres"
server-svc.yaml文件内容如下:
apiVersion: v1
kind: Service
metadata:
name: yty-server
namespace: default
labels:
app: server
spec:
type: NodePort
ports:
- port: 8087
nodePort: 30001 //映射到外部机器端口、默认范围:30000-65535 可修改
selector:
app: server
web.yaml文件内容:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web
labels:
app: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: web
imagePullPolicy: Never
ports:
- containerPort: 80
env:
- name: ZOOKEEPER_HOST
value: '10.62.155.12'
- name: ZOOKEEPER_PORT
value: '2181'
web-svc.yaml 文件内容如下:
apiVersion: v1
kind: Service
metadata:
name: web
namespace: default
labels:
app: web
spec:
type: NodePort
ports:
- port: 80
nodePort: 30003
selector:
app: web
3.3、创建k8s pod服务
1、 执行命令:kubectl create server.yaml
kubectl create server-svc.yaml
kubectl create web.yaml
kubectl create web-svc.yaml
如果文件单独分开放:比如server.yaml 文件和server-svc文件单独放在一起,
可使用kubectl apply -f . 命令创建,注意后面有个. 表示当前目录下:
当更新yaml文件内容时,也可以用kubectl apply -f .来更新Pod
2、 执行完创建命令后:执行kubectl get pods 查看pod情况
NAME READY STATUS RESTARTS AGE
server-1069855030-kshsf 1/1 Running 0 2d
web-3657954026-vf309 1/1 Running 0 2d
查看 pod项目日志情况: kubectl logs -f server-1069855030-kshsf(pod名字)
3、如上:如果status 状态为running 则启动正常。 然后在浏览器输入id+映射端口 +
项目即可访问
4、一些相关k8s命令
kubectl logs -f server-1069855030-kshsf(pod名字)
kubectl delete pod podName //删除pod 删除Pod的时候还必须删除
// deployment 否则还会自动创建
kubectl get deployment //查看 deployment 情况
kubectl delete deployment deploymentName//删除 deployment
kubectl describe pod server-1069855030-kshsf 查看pod情况
kubectl delete pod web-3657954026-j6tpq -n default --force --grace-period=0 //如果无法删除pod,
可使用此强制删除命令; 慎用
5 备注
对于使用环境变量中的ip地址:必须在k8s集群机器地址和外部机器地址在同一个局域网中可访问。
如果使用域名方式,必须搭建k8s集群dns解析才能使用