K8S系列-Kubernetes基本概念及Pod、Deployment、Service的使用

一、Kubernetes 的基本概念和术语

一、资源对象

​ Kubernetes 的基本概念和术语大多是围绕资源对象 Resource Object 来说的,而资源对象在总体上可分为以下两类:

1、某种资源的对象

​ 例如节点 Node) Pod 服务 (Service) 、存储卷 (Volume)。

2、与资源对象相关的事物与动作

​ 例 如标签 Label 、注解 (Annotation 、命名空Namespace 、部署 (Deployment) 资源对象一般包括几个通用属性:版本 、类 Kind 、名称、标签、注解,如下:

​ 1)、在版本信息里包括了 此对象所属的资源组, 些资源对象的属性会随着版本的升级而变化,在定义资源对象时要特别注意这一点

​ 2)、 类别属性用于定义资源对象的类型。

​ 3)、资源对象的名称 Name 标签、注解这三个属性属于资源对象的元数据(metadata)资源对象的名称要唯一,资源对象的标签是很重要的数据,也是 Kubernetes 的一大设计特性,比如通过签来表明资源对象 的特征 、类别,以及通 过标签筛选不同的资源对象并实现对象之间的关联 控制或协作功能

​ 4)、注解可被理解为一种特殊的标签,不过更多地是与程序挂钩,通常用于实现资源对象属性的自定义扩展

​ 我们可以采用 YAML JSON 格式声明(定义或创建) Kubernetes 资源对象,个资源对象都有自己的特定结构定义(可 以理解为数据库中 一个特定的表),并且统一保存在 etcd 这种非关系型数据库中,以实现最快的读写速度 此外,所有资源对象都可以通Kubernetes 提供的 kubectl 具(或者 PI 编程调用)执行增 删、改、查等操作。

​ 例如我们一个Pod的yaml定义文件:

apiVersion: v1  
kind: Pod  
metadata:  
  name: nginx-pod  
  labels:  
    app: nginx  
spec:  
  containers:  
  - name: nginx  
    image: nginx:1.21.6  # 使用特定的Nginx版本,你可以根据需要更改它  
    ports:  
    - containerPort: 80

​ 1、apiVersion 指定了Kubernetes API的版本。
​ 2、kind 指定了要创建的资源类型,这里是Pod。
​ 3、metadata 包含了Pod的元数据,如名称和标签。
​ 4、spec 描述了Pod的规格。
​ 5、containers 列出了Pod中要运行的容器。name 指定了容器的名称。image 指定了要使用的容器镜像。ports 列出了容器要监听的端口。

二、资源类型

​ 下面我们看下k8s的一些常用的资源类型,主要用于管理和部署容器化应用程序:

1、核心资源类型:

​ 1)、Pod:Kubernetes中运行容器以及调度的最小单位。同一个Pod可以同时运行多个容器,这些容器共享网络、存储等资源,并可以通过localhost进行通信。
​ 2)、Node:集群中的一个物理节点,也就是宿主机,可以运行Pod。
​ 3)、Namespace:用于将集群划分为多个虚拟集群,避免资源冲突。

2、工作负载型资源:

​ 1)、Deployment:用于定义应用程序的部署信息,如副本数、升级策略等。它支持应用的扩缩容、滚动更新等操作。
​ 2)、ReplicaSet:ReplicaSet是Deployment的底层实现,确保指定数量的Pod副本在运行。
​ 3)、StatefulSet:用于管理有状态的应用程序,如数据库。它提供了稳定的持久化存储、有序部署、有序扩展和有序删除等特性。
​ 4)、DaemonSet:确保集群中的每个节点都运行一个Pod的副本。常用于运行集群级别的守护进程,如存储守护进程、日志收集器等。
​ 5)、Job 和 CronJob:Job用于运行一次性任务,而CronJob则用于运行周期性任务。

3、服务发现及负载均衡型资源:

​ 1)、Service:为Pod提供稳定的访问接口,用于服务发现和服务访问。Service的类型包括ClusterIP、NodePort和LoadBalancer。
​ 2)、Ingress:允许从集群外部访问集群内部的HTTP和HTTPS服务。它充当了集群内部和外部之间的网关,并提供了一些高级功能,如SSL/TLS终止、负载均衡和路径匹配等。

4、配置与存储型资源:

​ 1)、ConfigMap:用于存储应用程序配置信息的资源。ConfigMap可以将配置信息从应用程序代码中解耦出来,方便管理和更新。
​ 2)、Secret:用于存储敏感信息的资源,如密码、密钥等。Secret提供了比ConfigMap更强的安全性,可以确保敏感信息在存储和传输过程中的安全性。
​ 3)、Volume 和 CSI:Volume是Kubernetes中的存储卷,用于为Pod提供持久化存储。CSI(容器存储接口)是一种标准,用于扩展Kubernetes以支持各种第三方存储系统。

5)、集群型资源:

​ 包括Role、ClusterRole、RoleBinding、ClusterRoleBinding等,用于控制对集群资源的访问权限。

6)、元数据型资源:

如HPA(Horizontal Pod Autoscaler)用于自动扩展Pod的数量,PodTemplate用于定义Pod的模板等。

三、K8S集群

集群 (C luster) 表示一个由 Master Node 组成的 Kubernetes 集群。

在这里插入图片描述

1、Master

​ Master 指的是集群的控制节点 在每个 Kubemetes 集群中都需要有一个或 组被称为Master 的节点,来负责整个集群的管理和控制 Master 通常占据一个独立的服务器(在高可用部署中建议至少使用 台服务器),是整个集群的“大脑”,如果它发生宕机或者不可用,那么对集群内容器应用的管理都将无法实施。

​ Maste 上运行着以下关键进程

	1)、Kubemetes API Server(kube-apiserver) :提供 HTTP RESTful API 接口的主要服务,Kubernetes 里对所有资源进行增、删 查等操作的唯 入口,也是集群控制的入口进程

​ 2)、Kubernetes Controller Manager ( kube-controller-manager): Kubernetes 里所有 资源对象的自动化控制中心 ,可以将其理解为资源对象的“大总管”。

​ 3)、Kubemetes Scheduler kube-scheduler) :负责资源调度 Pod 调度 的进程,相当千公交公司的调度室另外,在 Master 上通常还需要部署 etcd 服务。

2、Node

​ Kubemetes 集群中除 Mater 外的其他服务器被称为 Node, Node 在较早的版本中也被称为 Minion Master 一样, Node 可以是一台物理主机,也可以是一台虚拟机 Node,Kubemetes 集群中的工作负载节点,每个 Node 都会被 Master 分配 些工作负载 (Docker容器),当某个 Node 右机时,其上的工作负载会被 Master 自动转移到其他 Node ,Pod都是被调度到Node上面,不会调度到Master上面。在每Node 上都运行着以下关键进程

​ 1)、 kubelet: 负责 Po 对应容器的创建 启停等任务,同时与 Master 密切协作,实现集群管理的基本功能。

​ 2)、 kube-proxy: 实现 Kubemetes Service 的通信与负载均衡机制的服务。

​ 3)、容器运行时(如 Docker) :负责本机的容器创建和管理

​ Node 以在运行期间动态增加到 Kubernetes 集群中,前提是在这个 Node 上已正确安装、配置和启动了上述关键进程 在默认情况下, kubelet 会向 Master 注册自己,这也是Kubernetes 推荐的 Node 管理方式 。一旦 Node 被纳入集群管理范畴, kubelet 进程就会定

时向 Master 汇报自身的情报,例如操作系统、主机 CPU 和内存使用情况,以及当前有哪Pod 在运行等,这样 Master 就可以获知每个 Node 的资源使用情况,并实现高效均衡的资源调度策略 而某个 Node 在超过指定时间不上报信息时,会被 Master 判定为“失联”,Node 的状态就被标记为不可用 (Not Ready), Master 随后会触发”工作负载大转移”。

kubectl get nodes :查看当前集群中有多少个 Node

[root@k8s-master feverasa]# kubectl get nodes
NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   352d   v1.18.0
k8s-node1    Ready    <none>   352d   v1.18.0
k8s-node2    Ready    <none>   352d   v1.18.0
[root@k8s-master feverasa]# 

kubectl describe node <node_name>:看某个 Node 的详细信息

[root@k8s-master feverasa]# kubectl get nodes
NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   352d   v1.18.0
k8s-node1    Ready    <none>   352d   v1.18.0
k8s-node2    Ready    <none>   352d   v1.18.0
[root@k8s-master feverasa]# kubectl describe node k8s-node1
Name:               k8s-node1
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=k8s-node1
                    kubernetes.io/os=linux
Annotations:        flannel.alpha.coreos.com/backend-data: {
   "VNI":1,"VtepMAC":"1e:3d:b5:c4:3f:a4"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 192.168.127.129
                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sat, 15 Jul 2023 16:17:25 +0800
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  k8s-node1
  AcquireTime:     <unset>
  RenewTime:       Mon, 01 Jul 2024 20:35:26 +0800
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Mon, 01 Jul 2024 20:32:30 +0800   Mon, 01 Jul 2024 20:32:30 +0800   FlannelIsUp                  Flannel is running on this node
  Ready                True    Mon, 01 Jul 2024 20:32:26 +0800   Mon, 01 Jul 2024 20:32:26 +0800   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  192.168.127.129
  Hostname:    k8s-node1
Capacity:
  cpu:                8
  ephemeral-storage:  10230Mi
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             2342332Ki
  pods:               110
Allocatable:
  cpu:                8
  ephemeral-storage:  9654239217
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             2239932Ki
  pods:               110
System Info:
  Machine ID:                 e29555c44cc4411b8734a1e6d1e82282
  System UUID:                3BD84D56-4D40-DB60-D894-1E985B5769F9
  Boot ID:                    b8a3e705-0a55-40c3-a182-ff7523937f2d
  Kernel Version:             3.10.0-1062.el7.x86_64
  OS Image:                   CentOS Linux 7 (Core)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://18.6.1
  Kubelet Version:            v1.18.0
  Kube-Proxy Version:         v1.18.0
PodCIDR:                      10.244.1.0/24
PodCIDRs:                     10.244.1.0/24
Non-terminated Pods:          (7 in total)
  Namespace                   Name                                       CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                       ------------  ----------  ---------------  -------------  ---
  default                     spring-test-deployment-69769b84f6-2zrct    0 (0%)        0 (0%)      0 (0%)           0 (0%)         28h
  kube-system                 kube-proxy-hlz5s                           0 (0%)        0 (0%)      0 (0%)           0 (0%)         352d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                300m (3%)   0 (0%)
  memory             190Mi (8%)  340Mi (15%)
  ephemeral-storage  0 (0%)      0 (0%)
  hugepages-1Gi      0 (0%)      0 (0%)
  hugepages-2Mi      0 (0%)      0 (0%)
Events:
  Type     Reason                   Age                From                   Message
  ----     ------                   ----               ----                   -------
  Warning  EvictionThresholdMet     29h (x4 over 29h)  kubelet, k8s-node1     Attempting to reclaim ephemeral-storage
  Normal   Starting                 3m7s               kube-proxy, k8s-node1  Starting kube-proxy.
[root@k8s-master feverasa]# 

​ 以上命令的运行结果中会展示目标 Node 的如下关键信息:

​ 1)、Node 的基本信息:名称、标签 创建时间等

​ 2)、 Node 当前的运行状态 Node 启动后会做一系列自检工作,比如磁盘空间是否不(DiskPressure ) 、 内存是否不足 (MemoryPressure 网络是否正常NetworkUnavailable PID 资源是否充足 (PIDPressure 在一切正常时才设置Node Ready 状态 (Ready=True 表示 Node 处于健康状态, Master 就可以在其上调度新的任务了( 启动 Pod)。

​ 3)、Node 的主机地址与主机名。

​ 4)、Node 上的资源数量 描述 Node 可用的系统资源,包括 CPU 内存数量 最大可调度 Pod 数量等。

​ 5)、 Node 可分配的资 量:描述 Node 用于分配的资源量。

​ 6)、主机系统信息:包括主机 ID 、系统 UUID Linux Kernel 版本号、操作系统类型与版本 Docker 版本号 belet kube-proxy 的版本号等,当前运行的 Pod 列表概要信息。巳分配的资源使用 要信息,例如资源申请的最小 最大允许使用量占系统总量的百分比

​ 7)、 Node 相关的 Event 信息。

四、应用类Pod

1、基本介绍

​ Pod是Kubernetes中可以创建和管理的最小单元,也是资源对象模型中由用户创建或部署的最小资源对象模型。

​ Pod是Kubernetes上运行容器化应用的资源对象,其他资源对象(如控制器、服务等)都是用来支撑或扩展Pod对象功能的,例如Service、Deployment这些。每个Pod就像一个独立的逻辑机器,拥有集群内部唯一的IP地址、主机名、进程等。

​ Pod 可以由一个或多个容器组合而成。Kubernete 为每个 Pod 分配了唯一 IP 地址,称之为 Pod IP, 一个 Pod 里的多个容器共享 Pod IP 地址 Kubernetes 要求底层网络支待集群内任意两个 Po 之间的 TCP/IP,一个 Pod 里的容器与另外主机上的 Pod 容器能够直接通信。Pod IP 加上容器端口 (containerPort 组成了一个新的概念Endpoint, 表此 Pod 里的 一个服务进程的对外通信地址。

2、pod的简单使用

apiVersion: v1  # 必选,API版本号  
kind: Pod       # 必选,资源对象名称  
metadata:  
  name: spring-test-pod  # 必选,Pod的名称  
  namespace: default  # 可选,Pod所属的命名空间,默认为default  
  labels:        # 可选,自定义的Pod标签  
    app: spring-test-pod-label
spec:  
  containers:   # 必选,Pod中容器列表  
    - name: spring-test-container  # 必选,容器名称  
      image: spring_docker_test:0.0.6   # 必选,容器镜像,这里以nginx为例,版本为1.21  
      imagePullPolicy: IfNotPresent  # 可选,镜像拉取策略,IfNotPresent表示本地不存在时拉取  
      command: [ "java","-jar","app.jar" ]    #启动命令
      ports:      # 可选,容器需要暴露的端口列表
        - name: http  # 端口名称  
          containerPort: 8087  # 容器需要监听的端口号,一般是你容器里面启动对应应用的端口
      env:        # 可选,容器运行前需要设置的环境变量列表  
        - name: application_name  # 环境变量名称  
          value: "spring-test-application"  # 环境变量的值  
      volumeMounts:  # 可选,容器内部存储卷挂载配置  
        - name: application-volume  # 引用Pod定义的共享存储卷名称,一般与下面的spec.containers.volumes对应
          mountPath: /wls/data  # 存储卷在容器内Mount的绝对路径  
  .volumes:      # 可选,Pod上定义的共享存储卷列表  
    - name: application-volume  # 共享存储卷名称  
      hostPath:
        path: /home/logs
        type: DirectoryOrCreate  # 目录如果不存就创建

​ 我们对应spring_docker_test镜像定义Dockerfile如下:

FROM openjdk:8-jdk-alpine
MAINTAINER feverasa_test.com
RUN mkdir -p /wls/appsystems
COPY SpringBootBasicDemo-0.0.1-SNAPSHOT.jar /wls/appsystems/
WORKDIR /wls/appsystems/
RUN mv SpringBootBasicDemo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

​ 我们通过kubectl apply -f my_spring_pod.yaml根据yaml文件创建对应资源,然后查看对应pods具体信息。

[root@k8s-master k8s]# kubectl apply -f my_spring_pod.yaml 
pod/spring-test-pod created
[root@k8s-master k8s]# kubectl get pods
NAME              READY   STATUS    RESTARTS   AGE
spring-test-pod   1/1     Running   0          5s
[root@k8s-master k8s]# kubectl describe pod spring-test-pod
Name:         spring-test-pod
Namespace:    default
Priority:     0
Node:         k8s-node1/192.168.127.129
Start Time:   Mon, 01 Jul 2024 21:28:49 +0800
Labels:       app=spring-test-pod-label
Annotations:  Status:  Running
IP:           10.244.1.161
IPs:
  IP:  10.244.1.161
Containers:
  spring-test-container:
    Container ID:  docker://18f534c5feecd1ce283696a2e1c359efb58c6d07eb57d12e23b7474207a7066d
    Image:         spring_docker_test:0.0.6
    Image ID:      docker://sha256:f744de4249b9e60da5f3c04164e28f4da2ba03969854471b95c9d4fc9427b047
    Port:          8087/TCP
    Host Port:     0/TCP
    Command:
      java
      -jar
      app.jar
    State:          Running
      Started:      Mon, 01 Jul 2024 21:28:50 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      application_name:  spring-test-application
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-vzgvh (ro)
      /wls/data from application-volume (rw)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  application-volume:
    Type:          HostPath (bare host directory volume)
    Path:          /home/logs
    HostPathType:  DirectoryOrCreate
  default-token-vzgvh:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-vzgvh
    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  17s   default-scheduler   Successfully assigned default/spring-test-pod to k8s-node1
  Normal  Pulled     16s   kubelet, k8s-node1  Container image "spring_docker_test:0.0.6" already present on machine
  Normal  Created    16s   kubelet, k8s-node1  Created container spring-test-container
  Normal  Started    16s   kubelet, k8s-node1  Started container spring-test-container
[root@k8s-master k8s]# 

​ 在这里我们可以看到当前Pod使用的镜像、当前Pod的IP,启动命令、设置的环境变量Environment、Events等具体信息。

我们再通过kubectl exec -it spring-test-pod sh进入pod

[root@k8s-master k8s]# kubectl exec -it spring-test-pod sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
/wls/appsystems # pwd
/wls/appsystems
/wls/appsystems # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:05 java -jar app.jar
   38 root      0:00 sh
   45 root      0:00 ps -ef
/wls/appsystems # ifconfig
eth0      Link encap:Ethernet  HWaddr 26:C9:BF:77:E8:99  
          inet addr:10.244.1.162  Bcast:10.244.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:446 (446.0 B)  TX bytes:42 (42.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/wls/appsystems # df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/mapper/centos-home
                        496.7M    335.2M    161.5M  67% /wls/data
/dev/mapper/centos-root
tmpfs                     1.1G         0      1.1G   0% /sys/firmware
/wls/appsystems # 

​ 这里我们看到当前pod的独立的ip,还有我们挂载的wls/data目录,我们修改下,再退出去pod对应的宿主机(k8s-node1/192.168.127.129)看下(需要注意的是,pod是会调度到Node上面去的,我们当前是在master节点上面,是看不到的),

[root@k8s-node1 feverasa]# cd /home/logs/
[root@k8s-node1 logs]# ls
docker_file.txt
[root@k8s-node1 logs]# cat docker_file.txt 
Hello My In Pod Inner!!!
[root@k8s-node1 logs]# 

3、Pod的生命周期和重启策略

Pod 整个生命周期中被系统定义为各种状态:

1)、挂起(Pending)

​ 这个状态表明 Pod 已经被 Kubernetes 系统接受,但尚未被调度到任何节点上。这可能是因为资源不足、调度策略限制或镜像正在下载中。

2)、运行中(Running)

​ Pod 已被调度到某个节点上,并且所有容器都已被 kubelet 创建。如果至少有一个容器正在运行,则 Pod 处于 Running 状态。

3)、成功(Succeeded)

​ Pod 中的所有容器都已经成功终止,并且不会被重启。这通常发生在 Job 类型的 Pod 中,当所有任务执行完毕后,Pod 会进入此状态。

4)、失败(Failed)

​ Pod 中的所有容器都已经终止,但至少有一个容器以非零状态码退出。这表示至少有一个容器执行失败。

5)、未知(Unknown)

​ 由于某种原因,Kubernetes 无法获取到 Pod 的状态信息,这通常是由于与 Pod 所在的节点通信失败导致的。

Pod 的生命周期还涉及到一些关键事件和过程,如初始化容器的运行(如果定义了的话)、主容器的启动、存活性探测(Liveness Probe)和就绪性探测(Readiness Probe)的执行、容器的停止等。

4、Pod 健康检查和服务可用性检查

​ Kubemetes Pod 的健康状态可以通过 三类探针来检查存活探针(LivenessProbe)、就绪探针(ReadinessProbe)、启动探针(StartupProbe), 其中最主要的探针为 LivenessProbe、ReadinessProbe这两类探针,kubelet 会定期执行这两类探针来诊断容器的健康状况,并在容器不健康的情况下采取相应的措施,以保证应用程序的可用性和稳定性。

1)、启动探针(StartupProbe)

​ 用于判断容器内的应用程序是否已经启动。如果配置了启动探针,它会先禁止其他的探测(存活探针和就绪探针),直到启动探针成功为止。这主要适用于容器启动时间较长的场景,可以避免在容器还在初始化阶段就进行其他类型的探测。

apiVersion: v1  # 必选,API版本号  
kind: Pod       # 必选,资源对象名称  
metadata:  
  name: spring-test-pod  # 必选,Pod的名称  
  namespace: default  # 可选,Pod所属的命名空间,默认为default  
  labels:        # 可选,自定义的Pod标签  
    app: spring-test-pod-label
spec:  
  containers:   # 必选,Pod中容器列表  
    - name: spring-test-container  # 必选,容器名称  
      image: spring_docker_test:0.0.6   # 必选,容器镜像,这里以nginx为例,版本为1.21  
      imagePullPolicy: IfNotPresent  # 可选,镜像拉取策略,IfNotPresent表示本地不存在时拉取  
      command: [ "java","-jar","app.jar" ]    #启动命令
      ports:      # 可选,容器需要暴露的端口列表
        - name: http  # 端口名称  
          containerPort: 8087  # 容器需要监听的端口号,一般是你容器里面启动对应应用的端口
      startupProbe:
        tcpSocket
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值