1. k8s 1.24.x集群环境中 master节点需安装 docker环境
2. 在/opt/docker 目录下上传 springboot JAR包 。 编写Dockerfile文件
把springboot包 上传到/opt/docker 下
本人项目 端口 8081
Dockerfile暴露8081端口
vi Dockerfile
FROM java:8 MAINTAINER zq VOLUME /tmp ADD common-0.0.1-SNAPSHOT.jar demo.jar RUN bash -c 'touch /demo.jar' ENTRYPOINT ["java","-jar","/demo.jar"] EXPOSE 8081
上传完成与编写Dockerfile完成效果图:
3.在当前目录下 打包镜像
docker build -t demo:1.0 .
4.自己运行测试:
docker run -d -p 8081:8081 demo:1.0
看是否能运行成功。
5.登录自己的dockerHub
[root@master docker]# docker login
登录dockerhub ,打tag镜像,推送镜像到dockerhub
docker tag 镜像id 用户名/镜像名称:版本号
docker push 用户名/镜像名称:版本号
docker tag 0696d2e82f48 heidaodageshiwo/demo:1.0
docker push heidaodageshiwo/demo:1.0
6.登录自己docekerhub查看是否推送成功镜像:
7.查看当前k8s镜像仓库中并没有 刚才上传的镜像
8.进入dockerhub查看上传镜像:
拉取镜像:docker pull heidaodageshiwo/demo:1.0
k8s 1.24版本使用 crictl pull heidaodageshiwo/demo:1.0 拉取镜像(
把docker换成 crictl )
看到镜像已经在 当前命名空间下:
9.本机器命令:
[root@master docker]# vi Dockerfile [root@master docker]# docker build -t demo:1.0 . Sending build context to Docker daemon 26.78MB Step 1/7 : FROM java:8 8: Pulling from library/java 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for java:8 ---> d23bdf5b1b1b Step 2/7 : MAINTAINER zq ---> Running in 53a67a6f03b9 Removing intermediate container 53a67a6f03b9 ---> 3b18bb3da9e8 Step 3/7 : VOLUME /tmp ---> Running in 342c0bc5f02e Removing intermediate container 342c0bc5f02e ---> a501a838d0a1 Step 4/7 : ADD common-0.0.1-SNAPSHOT.jar demo.jar ---> 718be419cca3 Step 5/7 : RUN bash -c 'touch /demo.jar' ---> Running in ed41bdb91fa4 Removing intermediate container ed41bdb91fa4 ---> 4c87a3541bfb Step 6/7 : ENTRYPOINT ["java","-jar","/demo.jar"] ---> Running in 1712e351f016 Removing intermediate container 1712e351f016 ---> 022cf13c85c9 Step 7/7 : EXPOSE 8081 ---> Running in 331249034e13 Removing intermediate container 331249034e13 ---> 0696d2e82f48 Successfully built 0696d2e82f48 Successfully tagged demo:1.0 [root@master docker]# docker run -d -p 8081:8081 demo:1.0 02f5ea6548252d8ac6d25baed43fa27036f6e8f30446f5882f965391ba909028 [root@master docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 02f5ea654825 demo:1.0 "java -jar /demo.jar" 4 seconds ago Up 2 seconds 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp serene_hopper [root@master docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE demo 1.0 0696d2e82f48 58 seconds ago 697MB java 8 d23bdf5b1b1b 5 years ago 643MB [root@master docker]# docker rm -f 02f5ea654825 02f5ea654825 [root@master docker]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@master docker]# docker iamges docker: 'iamges' is not a docker command. See 'docker --help' [root@master docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE demo 1.0 0696d2e82f48 About a minute ago 697MB java 8 d23bdf5b1b1b 5 years ago 643MB [root@master docker]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: heidaodageshiwo Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@master docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE demo 1.0 0696d2e82f48 2 minutes ago 697MB java 8 d23bdf5b1b1b 5 years ago 643MB [root@master docker]# docker tag 0696d2e82f48 heidaodageshiwo/demo:1.0 [root@master docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE heidaodageshiwo/demo 1.0 0696d2e82f48 4 minutes ago 697MB demo 1.0 0696d2e82f48 4 minutes ago 697MB java 8 d23bdf5b1b1b 5 years ago 643MB [root@master docker]# docker push heidaodageshiwo/demo:1.0 The push refers to repository [docker.io/heidaodageshiwo/demo] 527bd9dadf74: Pushed f5b6bd9d054c: Pushed 35c20f26d188: Mounted from library/java c3fe59dd9556: Mounted from library/java 6ed1a81ba5b6: Mounted from library/java a3483ce177ce: Mounted from library/java ce6c8756685b: Mounted from library/java 30339f20ced0: Mounted from library/java 0eb22bfb707d: Mounted from library/java a2ae92ffcd29: Mounted from library/java 1.0: digest: sha256:006e9d9d6a34d99617d0d8e938fbd883cb42f84dd83c09ca9728fe13c4008fb9 size: 2424 [root@master docker]# crictl iamges No help topic for 'iamges' [root@master docker]# crictl images IMAGE TAG IMAGE ID SIZE docker.io/calico/cni v3.23.2 a87d3f6f1b8fd 111MB docker.io/calico/node v3.23.2 a3447b26d32c7 77.8MB docker.io/library/nginx latest 670dcc86b69df 56.7MB registry.aliyuncs.com/google_containers/coredns v1.8.6 a4ca41631cc7a 13.6MB registry.aliyuncs.com/google_containers/etcd 3.5.3-0 aebe758cef4cd 102MB registry.aliyuncs.com/google_containers/kube-apiserver v1.24.0 529072250ccc6 33.8MB registry.aliyuncs.com/google_containers/kube-controller-manager v1.24.0 88784fb4ac2f6 31MB registry.aliyuncs.com/google_containers/kube-proxy v1.24.0 77b49675beae1 39.5MB registry.aliyuncs.com/google_containers/kube-scheduler v1.24.0 e3ed7dee73e93 15.5MB registry.aliyuncs.com/google_containers/pause 3.7 221177c6082a8 311kB [root@master docker]# crictl pull heidaodageshiwo/demo:1.0 Image is up to date for sha256:0696d2e82f48a36fb155691fe8c3a8bc35c52ce5c3236620e2e7fba13fa16aeb [root@master docker]# crictl images IMAGE TAG IMAGE ID SIZE docker.io/calico/cni v3.23.2 a87d3f6f1b8fd 111MB docker.io/calico/node v3.23.2 a3447b26d32c7 77.8MB docker.io/heidaodageshiwo/demo 1.0 0696d2e82f48a 292MB docker.io/library/nginx latest 670dcc86b69df 56.7MB registry.aliyuncs.com/google_containers/coredns v1.8.6 a4ca41631cc7a 13.6MB registry.aliyuncs.com/google_containers/etcd 3.5.3-0 aebe758cef4cd 102MB registry.aliyuncs.com/google_containers/kube-apiserver v1.24.0 529072250ccc6 33.8MB registry.aliyuncs.com/google_containers/kube-controller-manager v1.24.0 88784fb4ac2f6 31MB registry.aliyuncs.com/google_containers/kube-proxy v1.24.0 77b49675beae1 39.5MB registry.aliyuncs.com/google_containers/kube-scheduler v1.24.0 e3ed7dee73e93 15.5MB registry.aliyuncs.com/google_containers/pause 3.7 221177c6082a8 311kB [root@master docker]# crictl pull java:8 Image is up to date for sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8 [root@master docker]# crictl images IMAGE TAG IMAGE ID SIZE docker.io/calico/cni v3.23.2 a87d3f6f1b8fd 111MB docker.io/calico/node v3.23.2 a3447b26d32c7 77.8MB docker.io/heidaodageshiwo/demo 1.0 0696d2e82f48a 292MB docker.io/library/java 8 d23bdf5b1b1b1 243MB docker.io/library/nginx latest 670dcc86b69df 56.7MB registry.aliyuncs.com/google_containers/coredns v1.8.6 a4ca41631cc7a 13.6MB registry.aliyuncs.com/google_containers/etcd 3.5.3-0 aebe758cef4cd 102MB registry.aliyuncs.com/google_containers/kube-apiserver v1.24.0 529072250ccc6 33.8MB registry.aliyuncs.com/google_containers/kube-controller-manager v1.24.0 88784fb4ac2f6 31MB registry.aliyuncs.com/google_containers/kube-proxy v1.24.0 77b49675beae1 39.5MB registry.aliyuncs.com/google_containers/kube-scheduler v1.24.0 e3ed7dee73e93 15.5MB registry.aliyuncs.com/google_containers/pause 3.7 221177c6082a8 311kB [root@master docker]#
10.空运行测试生成我们的yaml文件
1)命令:
kubectl create deployment deployment名称 --image=我们项目的镜像名称 --dry-run -o yaml > 要生成的yaml文件
注意:--dry-run表示空运行测试,不会真正的运行
-o 表示测试输出
2)执行命令生成我们的yaml模板
命令:kubectl create deployment springboot-k8s --image=docker.io/heidaodageshiwo/demo:1.0 --dry-run -o yaml > deploy.yaml
对上面生成的deploy.yaml文件进行修改,让它使用本地的镜像,因为它默认是去中心仓库拉取镜像的
加入:imagePullPolicy: "IfNotPresent"
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: springboot-k8s
name: springboot-k8s
spec:
replicas: 1
selector:
matchLabels:
app: springboot-k8s
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: springboot-k8s
spec:
containers:
- image: docker.io/heidaodageshiwo/demo:1.0
name: demo
imagePullPolicy: "IfNotPresent"
resources: {}
status: {}
11.运行:
[root@master docker]# kubectl apply -f deploy.yaml
12.查看:
13.看到已经运行成功:
暴露3万端口也可以写service.yml文件方式:
kubectl expose deployment springboot-k8s --port=8081 --type=NodePort
[root@master docker]# kubectl expose deployment springboot-k8s --port=8081 --type=NodePort service/springboot-k8s exposed [root@master docker]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1443/TCP 11d springboot-k8s NodePort 10.109.223.141 8081:30395/TCP 5s [root@master docker]#
14.访问:
我的springboot 访问接口
界面访问:暴露的30395端口
springboot-k8s NodePort 10.109.223.141
15.本机命令:
[root@master docker]# ll 总用量 26152 -rw-r--r-- 1 root root 26775474 7月 29 16:23 common-0.0.1-SNAPSHOT.jar -rw-r--r-- 1 root root 168 7月 29 16:22 Dockerfile [root@master docker]# kubectl create deployment springboot-k8s --image=docker.io/heidaodageshiwo/demo:1.0 --dry-run -o yaml > deploy.yaml W0729 16:46:32.594741 18750 helpers.go:636] --dry-run is deprecated and can be replaced with --dry-run=client. [root@master docker]# ls common-0.0.1-SNAPSHOT.jar deploy.yaml Dockerfile [root@master docker]# kubectl apply -f deploy.yaml deployment.apps/springboot-k8s created [root@master docker]# kubectl get po NAME READY STATUS RESTARTS AGE springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 6s [root@master docker]# kubectl get po NAME READY STATUS RESTARTS AGE springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 10s [root@master docker]# kubectl get po NAME READY STATUS RESTARTS AGE springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 11s [root@master docker]# kubectl get po NAME READY STATUS RESTARTS AGE springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 12s [root@master docker]# kubectl get po NAME READY STATUS RESTARTS AGE springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 13s [root@master docker]# kubectl get po NAME READY STATUS RESTARTS AGE springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 31s [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 35snode2 [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 95s node2 [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 98s node2 [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 99s node2 [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 0/1 ContainerCreating 0 2m15s node2 [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 1/1 Running 0 2m46s 10.244.104.3 node2 [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 1/1 Running 0 2m48s 10.244.104.3 node2 [root@master docker]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES springboot-k8s-645899cbc4-8dqvm 1/1 Running 0 2m49s 10.244.104.3 node2 [root@master docker]# kubectl expose deployment springboot-k8s --port=8081 --type=NodePort service/springboot-k8s exposed [root@master docker]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 11d springboot-k8s NodePort 10.109.223.141 8081:30395/TCP 5s [root@master docker]#
16.看到 本项目被调度到node2 节点:
查看node2节点镜像:可以看到 demo 与java8镜像都已经拉取到了本空间中
17.结束


