Kubernetes 集群部署SpringBoot项目流程

制作镜像,将项目上传到阿里云仓库上

https://www.yuque.com/docs/share/69500bda-8be1-4a8b-9794-6c27fb66eef7?# 《docker 将镜像上传到阿里云镜像仓库,再拉取到本地》

deployment部署镜像创建出pod

kubectl create deployment [deployment名字]–image=[镜像地址] --dry-run -o yaml >[yaml文件名].yaml

[root@zjj101 k8s]# kubectl create  deployment javademo1 --image=registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101:1.0 --dry-run -o yaml >javademo1.yaml
W0228 16:41:04.046934   11821 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@zjj101 k8s]#

–dry-run -o yaml >javademo1.yaml 的意思是在当前目录下导出一个yaml 文件,为了方便使用

查看创建的文件

[root@zjj101 k8s]#  cat javademo1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: javademo1
  name: javademo1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: javademo1
  strategy: {
    
    }
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: javademo1
    spec:
      containers:
      - image: registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101:1.0
        name: zjj101
        resources: {
    
    }
status: {
    
    }
[root@zjj101 k8s]#

执行yaml文件

kubectl apply -f [yaml文件名].yaml

[root@zjj101 k8s]# kubectl apply -f javademo1.yaml
deployment.apps/javademo1 created

查看pod

kubectl get pods

发现已经有了. 需要耐心等待,一般需要等十几分钟 status才能变成running

[root@zjj101 k8s]# kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
javademo1-69f7678847-qf5gf   1/1     Running   0          6m59s

你可以用 kubectl describe pod [pod名字] 看一下是否报错

[root@zjj101 k8s]#  kubectl describe pod javademo1-69f7678847-qf5gf
Name:           javademo1-69f7678847-qf5gf
Namespace:      default
Priority:       0
Node:           zjj103/172.16.10.103
Start Time:     Sun, 28 Feb 2021 17:22:23 +0800
Labels:         app=javademo1
                pod-template-hash=69f7678847
Annotations:    <none>
Status:         Pending
IP:
IPs:            <none>
Controlled By:  ReplicaSet/javademo1-69f7678847
Containers:
  zjj101:
    Container ID:
    Image:          registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101:                                                                               1.0
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-z                                                                               plfm (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-zplfm:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-zplfm
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  5m20s  default-scheduler  Successfully assigned def                                                                               ault/javademo1-69f7678847-qf5gf to zjj103
  Normal  Pulling    5m19s  kubelet, zjj103    Pulling image "registry.c                                                                               n-beijing.aliyuncs.com/zjjmkmkksjm/zjj101:1.0"

接着查看,发现已经好了 .

[root@zjj101 k8s]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE     IP             NODE     NOMINATED NODE   READINESS GATES
javademo1-69f7678847-qf5gf   1/1     Running   0          9m52s   10.244.3.141   zjj103   <none>           <none>

上面的ip 10.244.3.141 是 kubernetes 集群内部使用的,外网浏览器是访问不到的, 就需要对外暴露端口.

添加三个副本做一个扩容

kubectl scale deployment [deployment名字] --replicas=3

[root@zjj101 k8s]# kubectl  scale deployment javademo1 --replicas=3
deployment.apps/javademo1 scaled

k8s会在node节点扩容

发现已经扩容了.

[root@zjj101 k8s]# kubectl  get deployment javademo1
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
javademo1   3/3     3            3           14m
[root@zjj101 k8s]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE     IP             NODE     NOMINATED NODE   READINESS GATES
javademo1-69f7678847-68z2w   1/1     Running   0          3m12s   10.244.3.143   zjj103   <none>           <none>
javademo1-69f7678847-nsnbc   1/1     Running   0          3m12s   10.244.3.142   zjj103   <none>           <none>
javademo1-69f7678847-qf5gf   1/1     Running   0          17m     10.244.3.141   zjj103   <none>           <none>

Service 对外暴露应用

Service 对外暴露端口的时候其实也做了一个负载均衡的效果

kubectl expose deployment [deployment 名字]–port=[对外提供端口] --target-port=[内部本身端口] --type=NodePort

说明:

– port 是对外提供的端口
–target-port 是内部本身的端口,
–type=NodePort方式暴露

注意端口不要乱写,要和你项目端口对上才行,不然就访问不了.比如说你原来项目端口就是8080,那么这个就得写8080端口,不然的话,就会访问不到

[root@zjj101 k8s]# kubectl  expose deployment javademo1 --port=8080  --target-port=8080 --type=NodePort
service/javademo1 exposed

查看对外暴露的端口

kubectl get svc

[root@zjj101 k8s]# kubectl  get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
javademo1    NodePort    10.105.149.218   <none>        8080:31420/TCP   5s
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          46h
[root@zjj101 k8s]#

访问就能访问到了

查看到javademo1对外是31420端口,那么你就可以用集群中任何机器的31420端口都能访问到

访问过程中会给你平均分摊到这个pod的多个副本里面

image-20210228175354234

查看docker日志

kubectl get pod -o wide javademo1

[root@zjj101 k8s]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
javademo1-69f7678847-68z2w   1/1     Running   0          23m   10.244.3.143   zjj103   <none>           <none>
javademo1-69f7678847-nsnbc   1/1     Running   0          23m   10.244.3.142   zjj103   <none>           <none>
javademo1-69f7678847-qf5gf   1/1     Running   0          37m   10.244.3.141   zjj103   <none>           <none>

发现节点都在zjj103机器上

在zjj103机器上用docker ps -a ,发现这个机器上部署了三台docker机器

[root@zjj103 ~]# docker ps -a
CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS                        PORTS               NAMES
ea2786f7e715        3e63062a76cc                                          "java -Djava.securit…"   16 minutes ago      Up 15 minutes                                     k8s_zjj101_javademo1-69f7678847-68z2w_default_eec5b2d6-93d0-4cbd-9002-269c989b4010_0
e191795d4c3b        3e63062a76cc                                          "java -Djava.securit…"   16 minutes ago      Up 15 minutes                                     k8s_zjj101_javademo1-69f7678847-nsnbc_default_a3370b98-6db4-4693-9350-832e2490175b_0
7cd16dd0c99a        registry.cn-beijing.aliyuncs.com/zjjmkmkksjm/zjj101   "java -Djava.securit…"   23 minutes ago      Up 23 minutes                                     k8s_zjj101_javademo1-69f7678847-qf5gf_default_4fb122ba-ae81-4153-8f5e-a22012e58a30_0

用 docker logs ea2786f7e715 和 docker logs 7cd16dd0c99a 和 docker logs e191795d4c3b 就能查看到tomcat的运行日志

猜你喜欢

转载自blog.csdn.net/qq_41489540/article/details/114252763