Docker镜像制作以及上传
- 创建java 项目, 并打jar包
- 编写Dockerfile 文件制作docker 镜像
FROM ascdc/jdk8
VOLUME /log ./log
ADD ./target/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
- 构建镜像(注意后面这个点)
docker build -f Dockerfile -t test-demo:v1 .
- 将镜像上传至阿里云镜像库
1.重命名镜像:
docker tag ${镜像id} registry.cn-beijing.aliyuncs.com/test-dev/test-demo:v1
2.登录阿里云镜像库:
sudo docker login --username=${userName} registry.cn-beijing.aliyuncs.com
3.上传镜像:
docker push registry.cn-beijing.aliyuncs.com/test-dev/test-demo:v1
因为拉取私有仓库需要密钥,所以我们先给k8s创建私库的secret,名字为:test-aliyun-registry
kubectl create secret docker-registry test-aliyun-registry -n default --docker-server=registry.cn-beijing.aliyuncs.com --docker-username=${userName} --docker-password=${password}
编写deployment文件,部署两个pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-demo
spec:
replicas: 2
selector:
matchLabels:
app: test-demo
template:
metadata:
labels:
app: test-demo
spec:
serviceAccountName: default
imagePullSecrets:
- name: test-aliyun-registry
containers:
- name: test-demo
image: registry.cn-beijing.aliyuncs.com/test-dev/test-demo:v1
imagePullPolicy: Always
ports:
- containerPort: 8077
volumeMounts:
- name: test-demo-data
mountPath: /logs
volumes:
- name: test-demo-data
hostPath:
path: /opt/data/test-demo
编写service文件,使用service暴露端口
apiVersion: v1
kind: Service
metadata:
name: test-demo-service
spec:
type: NodePort
ports:
- protocol: TCP
port: 13306
targetPort: 8077
nodePort: 30001
selector:
app: test-demo
此时我们的服务就部署完毕了, 但是因为我们用的minikube 是基于docker的,此时并不能访问到我们服务,要想在宿主机上访问我们的系统,需要使用minikube 想service 的nodeport 端口映射到本地, 执行完成后会输出url, 命令如下:
minikube service test-demo-service
使用ingress 做转发对外提供服务
此时我们发现使用service 的nodeport功能暴露端口,会随着服务的增多,要暴露的端口越来越多,不利于管理,故我们需要一个利于统一管理的服务,统一对外提供服务转发,故本示例使用k8s官方推荐的ingress,注意:ingress是基于ngnix,可参考nginx 配置,映射到你对应的service 的name 和port就可以了
1. minikue 开启ingress:
minikube addons enable ingress
2. 对外开放ingress 端口
minikube tunnel
3. 部署ingres:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
spec:
rules:
- host: test.info
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: test-demo-service
port:
number: 13306
总结:
这样一个简单的k8s 部署java 的流程就完成了,当然k8s 生态还有很多非常有用的插件,如kong 等,后续接着尝试。