docker+k8s部署微服务
docker+k8s部署微服务(一)配置微服务项目,用dockerfile直接打包1 所有服务 服务注册中心项目中创建src/main/docker/DockerfileFROM java:8VOLUME /tmpADD micro-aidianmao-eureka-server-0.0.1-SNAPSHOT.jar app.jarENTRYPOINT ["java","-Djava....
·
docker+k8s部署微服务
(一)配置微服务项目,用dockerfile直接打包
1 所有服务 服务注册中心项目中创建src/main/docker/Dockerfile
FROM java:8
VOLUME /tmp
ADD micro-aidianmao-eureka-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#上面第三行ADD 后面必须是pom.xml中的artifactId+version+.jar
2 所有服务pom.xml添加
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<imageName>dingka/${project.artifactId}</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
3 服务注册中心eureka,application.properties
server.port=8761
spring.application.name=dingka-eureka-server
#注册到eurekaip地址(注册中心IP)
eureka.instance.hostname=dingka-eureka-server
#是否注册自己
eureka.client.register-with-eureka=false
#Erueka是为注册中心,不需要检索服务信息;(表示是否从Eureka Server获取注册信息,默认为true。 如果这是一个单点的 Eureka Server,不需要同步其他节点的数据,可以设为false)
eureka.client.fetch-registry=false
#服务实体向eureka注册时,注册名默认是“IP名:应用名:应用端口名
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
#默认情况下,Eureka 使用 hostname 进行服务注册,以及服务信息的显示,那如果我们使用 IP 地址的方式
eureka.instance.prefer-ip-address=true
4 其他服务,配置文件application.properties
server.port=8880
spring.application.name=micro-aidianmao-back-sso-server
eureka.instance.hostname=dingka-eureka-server
#注册中心
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:8761/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
(二)项目上传到服务器,打包成镜像并推送至远程仓库
1 项目打包
mvn package docker:build
2 登录远程仓库,这里是阿里
docker login --username=dingkawang@1925841380829066 registry.cn-hangzhou.aliyuncs.com
3 查询镜像
docker images
4 镜像修改名称(前面是上面查到的名称+版本,后面是要推送的远程仓库的名称+版本)
docker tag dingka/micro-aidianmao-eureka-server:latest registry.cn-hangzhou.aliyuncs.com/dingka/dingka-eureka:latest
5 推送镜像至远程仓库
docker push registry.cn-hangzhou.aliyuncs.com/dingka/dingka-eureka:latest
6 删除原镜像
docker rmi -f dingka/micro-aidianmao-eureka-server:latest
7 拉取远程仓库镜像,此步可以证实是否能成远程仓库拉取镜像,为后面部署项目做准备
docker pull registry.cn-hangzhou.aliyuncs.com/dingka/dingka-eureka:latest
8 如果想删除远程仓库镜像,需要手动去远程仓库删除,然后再删除本地镜像
docker rmi -f registry.cn-hangzhou.aliyuncs.com/dingka/dingka-eureka:latest
(三)生成秘钥自动拉取私服镜像
1 查看当前登录远程仓库信息
cat ~/.docker/config.json
{
"auths": {
"registry.cn-hangzhou.aliyuncs.com": {
"auth": "ZGluZ2thd2FuZ0AxOTI1ODQxMzgwODI5MDY2OkRpbmdrYXdhbmdAMTIz"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.7 (linux)"
}
}
#此时表示已经登录到远程仓库
#该命令会将你的认证信息通过base64编码,生成一个编码之后的字符串。
cat /root/.docker/config.json | base64 -w 0
ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20iOiB7CgkJCSJhdXRoIjogIlpHbHVaMnRoZDJGdVowQXhPVEkxT0RReE16Z3dPREk1TURZMk9rUnBibWRyWVhkaGJtZEFNVEl6IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOC4wOS43IChsaW51eCkiCgl9Cn0=
#创建 registry-key.yaml
apiVersion: v1
kind: Secret
metadata:
#自定义名称,后面会用上
name: myregistrykey
namespace:
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20iOiB7CgkJCSJhdXRoIjogIlpHbHVaMnRoZDJGdVowQXhPVEkxT0RReE16Z3dPREk1TURZMk9rUnBibWRyWVhkaGJtZEFNVEl6IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOC4wOS43IChsaW51eCkiCgl9Cn0=
type: kubernetes.io/dockerconfigjson
#生成secret
kubectl create -f registry-key.yaml
#查看secret
kubectl get secrets
(四)编写微服务对应的deployment.yaml,service.yaml
#创建并编写
vim dingka-eureka-deployment.yaml
#1.16.0版本已经弃用extensions/v1beta1 ,改为apps/v1,版本号
apiVersion: apps/v1
#一种定义
kind: Deployment
#资源对象的定义,元数据
metadata:
#名称
name: dingka-eureka-server-deployment
#容器的详细定义
spec:
#标签匹配
selector:
matchLabels:
app: dingka-eureka-server
#pods的副本数量
replicas: 1
template:
metadata:
labels:
app: dingka-eureka-server
spec:
imagePullSecrets:
#拉取镜像秘钥名称
- name: myregistrykey
containers:
#容器名称
- name: dingka-eureka-server
#镜像地址
image: registry.cn-hangzhou.aliyuncs.com/dingka/dingka-eureka:latest
imagePullPolicy: Always
ports:
#容器监听端口
- containerPort: 8761
vim dingka-eureka-service.yaml
apiVersion: v1
kind: Service
metadata:
name: dingka-eureka-server
spec:
ports:
#容器暴露的端口
- port: 8761
#端口协议 支持tcp和udp,默认为tcp
protocol: TCP
#需要转发到后端Pod的端口号
targetPort: 8761
#指定映射到物理机的端口号,也就是外部可以访问
nodePort: 31761
#当spec.type=NodePort时,同上,除了eureka和zuul,其他服务暂不开放
type: NodePort
selector:
app: dingka-eureka-server
#依次启动
kubectl apply -f dingka-eureka-deployment.yaml
kubectl apply -f dingka-eureka-service.yaml
#查看状态
watch kubectl get pods -o wide
#服务成功的话,显示是running ready 1/1
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dingka-admin-service-deployment-6859d6f4d5-9kqkm 1/1 Running 0 18h 10.100.141.72 bigdata-senior01.home.com <none> <none>
dingka-back-sso-service-deployment-7b557dc5b7-shvzm 1/1 Running 0 92m 10.100.141.73 bigdata-senior01.home.com <none> <none>
dingka-eureka-server-deployment-f8677665-knxmb 1/1 Running 0 19h 10.100.141.70 bigdata-senior01.home.com <none> <none>
dingka-front-sso-service-deployment-5f65c78f94-rbldb 1/1 Running 0 19h 10.100.141.71 bigdata-senior01.home.com <none> <none>
dingka-user-service-deployment-57f67cb478-8ffnh 1/1 Running 0 19h 10.100.141.69 bigdata-senior01.home.com <none> <none>
dingka-zuul-deployment-757f95c69f-jbz9n 1/1 Running 0 19h 10.100.141.68 bigdata-senior01.home.com <none> <none>
#查看eureka
访问任意节点ip:8761,同时也可以查看其余微服务启动结果,通过zuul网关对外开放端口进行访问接口
#如果只有两台服务器,一主一从,有时候部署项目会提示没有可用节点,这时候可以将master设置成node使用
kubectl taint node localhost.localdomain node-role.kubernetes.io/master-
#禁止启动
kubectl taint node localhost.localdomain node-role.kubernetes.io/master="":NoSchedule
更多推荐
已为社区贡献2条内容
所有评论(0)