k8s-pod的启动

作者:Code Rhythm日期:2025/10/13

k8s-pod的启动

  • 一、命令行启动nginx的pod
    • 创建deployment
    • 访问节点中的nginx
    • 查看部署控制器和副本控制器
    • 模拟高可用,将k8s-3关机
    • 手动触发重建
    • 删除rs会重新启新的rs
    • 删除deploy,所管理的rs也会被删除
  • 二、yaml文件启pod
    • kubectl apply 启动pod
    • kubectl apply 使用部署控制器启动pod
  • 三、pod的启动流程
  • 四、pod的终止过程

官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/

pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元

一、命令行启动nginx的pod

kubectl get查看pod和namespace(ns)
-n 指定命名空间

1[root@k8s-1 ~]# kubectl get pod
2No resources found in default namespace.
3[root@k8s-1 ~]# kubectl get ns
4NAME                   STATUS   AGE
5default                Active   20h
6kube-node-lease        Active   20h
7kube-public            Active   20h
8kube-system            Active   20h
9kubernetes-dashboard   Active   18h
10[root@k8s-1 ~]# kubectl get pod -n kube-system
11NAME                                       READY   STATUS    RESTARTS      AGE
12calico-kube-controllers-64cc74d646-b7l5l   1/1     Running   0             129m
13calico-node-4v7n5                          1/1     Running   1 (15h ago)   19h
14calico-node-jr9sg                          1/1     Running   1 (15h ago)   19h
15calico-node-tpsnh                          1/1     Running   1 (15h ago)   19h
16coredns-6d8c4cb4d-6dtcb                    1/1     Running   0             129m
17coredns-6d8c4cb4d-jjdrf                    1/1     Running   0             129m
18etcd-k8s-1                                 1/1     Running   1 (15h ago)   20h
19kube-apiserver-k8s-1                       1/1     Running   1 (15h ago)   20h
20kube-controller-manager-k8s-1              1/1     Running   1 (15h ago)   20h
21kube-proxy-4vvtv                           1/1     Running   1 (15h ago)   19h
22kube-proxy-7r4kf                           1/1     Running   1 (15h ago)   19h
23kube-proxy-vpc62                           1/1     Running   1 (15h ago)   19h
24kube-scheduler-k8s-1                       1/1     Running   1 (15h ago)   20h
25

创建deployment

  • kubectl create deployment:创建 Deployment 资源
  • k8s-nginx:Deployment 的名称
  • --image=nginx:指定使用 nginx 镜像
  • -r 3 或 --replicas=3:指定创建 3 个副本

执行成功后会创建 3 个运行 nginx 的 Pod,并由这个 deployment 进行管理。如果某个 Pod 出现故障,deployment 会自动创建新的 pod 来维持 3 个副本的状态

1[root@k8s-1 ~]# kubectl create deployment k8s-nginx --image=nginx -r 3
2deployment.apps/k8s-nginx created
3[root@k8s-1 ~]# kubectl get pod
4NAME                         READY   STATUS              RESTARTS   AGE
5k8s-nginx-6d779d947c-cgc2b   0/1     ContainerCreating   0          14s
6k8s-nginx-6d779d947c-nkdpm   0/1     ContainerCreating   0          14s
7k8s-nginx-6d779d947c-qhz5w   0/1     ContainerCreating   0          14s
8
9# 过一会查看
10[root@k8s-1 ~]# kubectl get pod
11NAME                         READY   STATUS    RESTARTS   AGE
12k8s-nginx-6d779d947c-cgc2b   1/1     Running   0          3m30s
13k8s-nginx-6d779d947c-nkdpm   1/1     Running   0          3m30s
14k8s-nginx-6d779d947c-qhz5w   1/1     Running   0          3m30s
15
16# 查看更详细的信息 -o wide
17[root@k8s-1 ~]# kubectl get pod -o wide
18NAME                         READY   STATUS    RESTARTS   AGE     IP               NODE    NOMINATED NODE   READINESS GATES
19k8s-nginx-6d779d947c-cgc2b   1/1     Running   0          3m46s   10.224.13.68     k8s-3   <none>           <none>
20k8s-nginx-6d779d947c-nkdpm   1/1     Running   0          3m46s   10.224.13.69     k8s-3   <none>           <none>
21k8s-nginx-6d779d947c-qhz5w   1/1     Running   0          3m46s   10.224.200.200   k8s-2   <none>           <none>
22
23[root@k8s-2 ~]# docker images|grep nginx
24nginx                                                latest     41f689c20910   4 weeks ago   192MB
25

访问节点中的nginx

1[root@k8s-1 ~]# curl 10.224.13.68
2<!DOCTYPE html>
3<html>
4<head>
5<title>Welcome to nginx!</title>
6<style>
7html { color-scheme: light dark; }
8body { width: 35em; margin: 0 auto;
9font-family: Tahoma, Verdana, Arial, sans-serif; }
10</style>
11</head>
12<body>
13<h1>Welcome to nginx!</h1>
14<p>If you see this page, the nginx web server is successfully installed and
15working. Further configuration is required.</p>
16
17<p>For online documentation and support please refer to
18<a href="http://nginx.org/">nginx.org</a>.<br/>
19Commercial support is available at
20<a href="http://nginx.com/">nginx.com</a>.</p>
21
22<p><em>Thank you for using nginx.</em></p>
23</body>
24</html>
25

查看部署控制器和副本控制器

1[root@k8s-1 ~]# kubectl get deploy
2NAME        READY   UP-TO-DATE   AVAILABLE   AGE
3k8s-nginx   3/3     3            3           8m15s
4[root@k8s-1 ~]# kubectl get rs
5NAME                   DESIRED   CURRENT   READY   AGE
6k8s-nginx-6d779d947c   3         3         3       8m36s
7

模拟高可用,将k8s-3关机

[root@k8s-3 ~]# init 0

等一会再次查看,Kubernetes 需要一定时间来检测到节点故障并更新 Pod 状态

1[root@k8s-1 ~]# kubectl get node
2NAME    STATUS     ROLES                  AGE   VERSION
3k8s-1   Ready      control-plane,master   21h   v1.23.17
4k8s-2   Ready      worker                 20h   v1.23.17
5k8s-3   NotReady   worker                 20h   v1.23.17
6
7# 等待约5分钟,Kubernetes 已经完成了故障转移:当 k8s-3 节点不可用时,原运行在该节点上的 Pod 被标记为 Terminating,同时控制器自动在可用的 k8s-2 节点上新建了 Pod,确保应用持续可用
8[root@k8s-1 ~]# kubectl get pod -o wide
9NAME                         READY   STATUS        RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
10k8s-nginx-6d779d947c-2r6gh   1/1     Running       0          33m   10.224.200.201   k8s-2   <none>           <none>
11k8s-nginx-6d779d947c-cgc2b   1/1     Terminating   0          50m   10.224.13.68     k8s-3   <none>           <none>
12k8s-nginx-6d779d947c-mv5qz   1/1     Running       0          33m   10.224.200.202   k8s-2   <none>           <none>
13k8s-nginx-6d779d947c-nkdpm   1/1     Terminating   0          50m   10.224.13.69     k8s-3   <none>           <none>
14k8s-nginx-6d779d947c-qhz5w   1/1     Running       0          50m   10.224.200.200   k8s-2   <none>           <none>
15
16[root@k8s-1 ~]# kubectl get pod -o wide
17NAME                         READY   STATUS    RESTARTS   AGE    IP               NODE    NOMINATED NODE   READINESS GATES
18k8s-nginx-6d779d947c-2r6gh   1/1     Running   0          143m   10.224.200.201   k8s-2   <none>           <none>
19k8s-nginx-6d779d947c-mv5qz   1/1     Running   0          143m   10.224.200.202   k8s-2   <none>           <none>
20k8s-nginx-6d779d947c-qhz5w   1/1     Running   0          160m   10.224.200.200   k8s-2   <none>           <none>
21

k8s-3 开机并恢复正常后,会被纳入调度范围,新创建的 Pod(包括滚动更新、扩缩容时产生的)可能会被分配到该节点,但已有 Pod 不会自动迁移

手动触发重建

1[root@k8s-1 ~]# kubectl rollout restart deployment k8s-nginx
2deployment.apps/k8s-nginx restarted
3[root@k8s-1 ~]# kubectl get pod -o wide
4NAME                         READY   STATUS              RESTARTS   AGE    IP               NODE    NOMINATED NODE   READINESS GATES
5k8s-nginx-5fffdc7cd7-p8h2p   0/1     ContainerCreating   0          2s     <none>           k8s-3   <none>           <none>
6k8s-nginx-6d779d947c-2r6gh   1/1     Running             0          147m   10.224.200.201   k8s-2   <none>           <none>
7k8s-nginx-6d779d947c-mv5qz   1/1     Running             0          147m   10.224.200.202   k8s-2   <none>           <none>
8k8s-nginx-6d779d947c-qhz5w   1/1     Running             0          164m   10.224.200.200   k8s-2   <none>           <none>
9[root@k8s-1 ~]# kubectl get pod -o wide
10NAME                         READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
11k8s-nginx-5fffdc7cd7-2c7fr   1/1     Running   0          24s   10.224.13.71     k8s-3   <none>           <none>
12k8s-nginx-5fffdc7cd7-ckqhs   1/1     Running   0          35s   10.224.200.203   k8s-2   <none>           <none>
13k8s-nginx-5fffdc7cd7-p8h2p   1/1     Running   0          43s   10.224.13.70     k8s-3   <none>           <none>
14
15# 在创建一个就会分配
16[root@k8s-1 ~]# kubectl create deployment k8s-nginx-2 --image=nginx -r 3
17deployment.apps/k8s-nginx-2 created
18[root@k8s-1 ~]# kubectl get pod -o wide
19NAME                           READY   STATUS              RESTARTS      AGE    IP               NODE    NOMINATED NODE   READINESS GATES
20k8s-nginx-2-6449bd5588-f8x6k   0/1     ContainerCreating   0             4s     <none>           k8s-3   <none>           <none>
21k8s-nginx-2-6449bd5588-fzrqn   0/1     ContainerCreating   0             4s     <none>           k8s-3   <none>           <none>
22k8s-nginx-2-6449bd5588-jk22m   0/1     ContainerCreating   0             4s     <none>           k8s-2   <none>           <none>
23k8s-nginx-5fffdc7cd7-ckqhs     1/1     Running             1 (21h ago)   21h    10.224.200.205   k8s-2   <none>           <none>
24k8s-nginx-5fffdc7cd7-jdggz     1/1     Running             0             138m   10.224.200.209   k8s-2   <none>           <none>
25k8s-nginx-5fffdc7cd7-vjpj4     1/1     Running             0             138m   10.224.200.210   k8s-2   <none>           <none>
26[root@k8s-1 ~]# kubectl get pod -o wide
27NAME                           READY   STATUS    RESTARTS      AGE    IP               NODE    NOMINATED NODE   READINESS GATES
28k8s-nginx-2-6449bd5588-f8x6k   1/1     Running   0             20s    10.224.13.72     k8s-3   <none>           <none>
29k8s-nginx-2-6449bd5588-fzrqn   1/1     Running   0             20s    10.224.13.73     k8s-3   <none>           <none>
30k8s-nginx-2-6449bd5588-jk22m   1/1     Running   0             20s    10.224.200.211   k8s-2   <none>           <none>
31k8s-nginx-5fffdc7cd7-ckqhs     1/1     Running   1 (21h ago)   21h    10.224.200.205   k8s-2   <none>           <none>
32k8s-nginx-5fffdc7cd7-jdggz     1/1     Running   0             138m   10.224.200.209   k8s-2   <none>           <none>
33k8s-nginx-5fffdc7cd7-vjpj4     1/1     Running   0             138m   10.224.200.210   k8s-2   <none>           <none>
34

删除rs会重新启新的rs

1[root@k8s-1 ~]# kubectl get rs
2NAME                     DESIRED   CURRENT   READY   AGE
3k8s-nginx-2-6449bd5588   3         3         3       4m8s
4k8s-nginx-5fffdc7cd7     3         3         3       21h
5k8s-nginx-6d779d947c     0         0         0       23h
6[root@k8s-1 ~]# kubectl delete rs k8s-nginx-2-6449bd5588
7replicaset.apps "k8s-nginx-2-6449bd5588" deleted
8
9[root@k8s-1 ~]# kubectl get rs
10NAME                     DESIRED   CURRENT   READY   AGE
11k8s-nginx-2-6449bd5588   3         3         0       4s
12k8s-nginx-5fffdc7cd7     3         3         3       21h
13k8s-nginx-6d779d947c     0         0         0       23h
14[root@k8s-1 ~]# kubectl get pod -o wide
15NAME                           READY   STATUS    RESTARTS      AGE    IP               NODE    NOMINATED NODE   READINESS GATES
16k8s-nginx-2-6449bd5588-ddqpn   1/1     Running   0             27s    10.224.13.74     k8s-3   <none>           <none>
17k8s-nginx-2-6449bd5588-knhcb   1/1     Running   0             27s    10.224.200.213   k8s-2   <none>           <none>
18k8s-nginx-2-6449bd5588-rx6b5   1/1     Running   0             27s    10.224.200.212   k8s-2   <none>           <none>
19k8s-nginx-5fffdc7cd7-ckqhs     1/1     Running   1 (21h ago)   21h    10.224.200.205   k8s-2   <none>           <none>
20k8s-nginx-5fffdc7cd7-jdggz     1/1     Running   0             144m   10.224.200.209   k8s-2   <none>           <none>
21k8s-nginx-5fffdc7cd7-vjpj4     1/1     Running   0             144m   10.224.200.210   k8s-2   <none>           <none>
22

删除deploy,所管理的rs也会被删除

1[root@k8s-1 ~]# kubectl get deploy
2NAME          READY   UP-TO-DATE   AVAILABLE   AGE
3k8s-nginx     3/3     3            3           23h
4k8s-nginx-2   3/3     3            3           8m12s
5[root@k8s-1 ~]# kubectl delete deploy k8s-nginx-2 
6deployment.apps "k8s-nginx-2" deleted
7[root@k8s-1 ~]# kubectl get deploy
8NAME        READY   UP-TO-DATE   AVAILABLE   AGE
9k8s-nginx   3/3     3            3           24h
10[root@k8s-1 ~]# kubectl get rs
11NAME                   DESIRED   CURRENT   READY   AGE
12k8s-nginx-5fffdc7cd7   3         3         3       21h
13k8s-nginx-6d779d947c   0         0         0       24h
14[root@k8s-1 ~]# kubectl get pod -o wide
15NAME                         READY   STATUS    RESTARTS      AGE    IP               NODE    NOMINATED NODE   READINESS GATES
16k8s-nginx-5fffdc7cd7-ckqhs   1/1     Running   1 (21h ago)   21h    10.224.200.205   k8s-2   <none>           <none>
17k8s-nginx-5fffdc7cd7-jdggz   1/1     Running   0             147m   10.224.200.209   k8s-2   <none>           <none>
18k8s-nginx-5fffdc7cd7-vjpj4   1/1     Running   0             147m   10.224.200.210   k8s-2   <none>           <none>
19
20[root@k8s-1 ~]# kubectl delete deploy k8s-nginx
21deployment.apps "k8s-nginx" deleted
22[root@k8s-1 ~]# kubectl get pod -o wide
23No resources found in default namespace.
24

二、yaml文件启pod

kubectl apply 启动pod

1[root@k8s-1 pod]# vim pod1.yaml
2apiVersion: v1	# 指定了使用的 Kubernetes API 版本,v1 是核心 API 组的稳定版本
3kind: Pod 	# k8s里对象的类型,Pod 是 Kubernetes 中最小的部署单元
4metadata:		# 元数据--》描述数据的数据,对pod进行描述
5  name: nginx		# 容器的名字
6spec:	# 定义对象的详细信息
7  containers:
8  - name: nginx
9    image: nginx:latest
10    ports:
11    - containerPort: 80
12

执行

1[root@k8s-1 pod]# kubectl apply -f pod1.yaml 
2pod/nginx created
3[root@k8s-1 pod]# kubectl get pod -o wide
4NAME    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
5nginx   1/1     Running   0          18s   10.224.13.75   k8s-3   <none>           <none>
6
7# 停了后,会重新启个新的
8[root@k8s-3 ~]# docker ps 
9CONTAINER ID   IMAGE                                               COMMAND                  CREATED         STATUS         PORTS     NAMES
10bb425d874e5e   nginx                                               "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes             k8s_nginx_nginx_default_8cfe649e-66c0-4f39-8bab-c05ed496fd6f_0
11[root@k8s-3 ~]# docker stop bb425d874e5e
12bb425d874e5e
13
14[root@k8s-1 pod]# kubectl get pod -o wide
15NAME    READY   STATUS    RESTARTS     AGE     IP             NODE    NOMINATED NODE   READINESS GATES
16nginx   1/1     Running   1 (7s ago)   4m25s   10.224.13.75   k8s-3   <none>           <none>
17[root@k8s-3 ~]# docker ps 
18CONTAINER ID   IMAGE                                               COMMAND                  CREATED          STATUS          PORTS     NAMES
193bdd8fbfa24e   nginx                                               "/docker-entrypoint.…"   16 seconds ago   Up 15 seconds             k8s_nginx_nginx_default_8cfe649e-66c0-4f39-8bab-c05ed496fd6f_1
20

kubectl apply 使用部署控制器启动pod

1[root@k8s-1 pod]# vim nginx-deployment.yaml 
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5  name: nginx-deployment
6  labels:			# 标签
7    app: nginx		# 具体的标签
8    company: sc
9spec:
10  replicas: 3		# 3个pod,创建一个副本控制器
11  selector:			# 选择器
12    matchLabels:	# 匹配标签
13      app: nginx
14  template:			# 模版
15    metadata:
16      labels:
17        app: nginx
18    spec:
19      containers:
20      - name: nginx
21        image: nginx:latest
22        ports:
23        - containerPort: 80
24
1[root@k8s-1 pod]# kubectl apply -f nginx-deployment.yaml 
2deployment.apps/nginx-deployment created
3[root@k8s-1 pod]# kubectl get deploy
4NAME               READY   UP-TO-DATE   AVAILABLE   AGE
5nginx-deployment   3/3     3            3           26s
6[root@k8s-1 pod]# kubectl get rs
7NAME                         DESIRED   CURRENT   READY   AGE
8nginx-deployment-8d545c96d   3         3         3       39s
9[root@k8s-1 pod]# kubectl get pod
10NAME                               READY   STATUS    RESTARTS        AGE
11nginx                              1/1     Running   1 (3h19m ago)   3h23m
12nginx-deployment-8d545c96d-hp5bx   1/1     Running   0               46s
13nginx-deployment-8d545c96d-n7zr5   1/1     Running   0               46s
14nginx-deployment-8d545c96d-wp4nt   1/1     Running   0               46s
15

查看deploy和pod的详细信息
kubectl describe

1[root@k8s-1 pod]# kubectl describe deploy nginx-deployment
2Name:                   nginx-deployment
3Namespace:              default
4CreationTimestamp:      Wed, 17 Sep 2025 15:19:10 +0800
5Labels:                 app=nginx
6                        company=sc
7Annotations:            deployment.kubernetes.io/revision: 1
8Selector:               app=nginx
9Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
10StrategyType:           RollingUpdate
11MinReadySeconds:        0
12RollingUpdateStrategy:  25% max unavailable, 25% max surge
13Pod Template:
14  Labels:  app=nginx
15  Containers:
16   nginx:
17    Image:        nginx:latest
18    Port:         80/TCP
19    Host Port:    0/TCP
20    Environment:  <none>
21    Mounts:       <none>
22  Volumes:        <none>
23Conditions:
24  Type           Status  Reason
25  ----           ------  ------
26  Available      True    MinimumReplicasAvailable
27  Progressing    True    NewReplicaSetAvailable
28OldReplicaSets:  <none>
29NewReplicaSet:   nginx-deployment-8d545c96d (3/3 replicas created)
30Events:
31  Type    Reason             Age    From                   Message
32  ----    ------             ----   ----                   -------
33  Normal  ScalingReplicaSet  3m57s  deployment-controller  Scaled up replica set nginx-deployment-8d545c96d to 3
34  
35  
36[root@k8s-1 pod]# kubectl describe pod nginx-deployment-8d545c96d-hp5bx
37Name:         nginx-deployment-8d545c96d-hp5bx
38Namespace:    default
39Priority:     0
40Node:         k8s-3/192.168.168.147
41Start Time:   Wed, 17 Sep 2025 15:19:10 +0800
42Labels:       app=nginx
43              pod-template-hash=8d545c96d
44Annotations:  cni.projectcalico.org/containerID: 00fd62401a9cd47dbc71253c77f1c996876780511ab33a7dc03e990c01bc1447
45              cni.projectcalico.org/podIP: 10.224.13.77/32
46              cni.projectcalico.org/podIPs: 10.224.13.77/32
47Status:       Running
48IP:           10.224.13.77
49IPs:
50  IP:           10.224.13.77
51Controlled By:  ReplicaSet/nginx-deployment-8d545c96d
52Containers:
53  nginx:
54    Container ID:   docker://7a92106df639169d7c24e7cac16067b21d8fc77460254a3ad4898fc1b5c313d2
55    Image:          nginx:latest
56    Image ID:       docker-pullable://nginx@sha256:d5f28ef21aabddd098f3dbc21fe5b7a7d7a184720bc07da0b6c9b9820e97f25e
57    Port:           80/TCP
58    Host Port:      0/TCP
59    State:          Running
60      Started:      Wed, 17 Sep 2025 15:19:26 +0800
61    Ready:          True
62    Restart Count:  0
63    Environment:    <none>
64    Mounts:
65      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-6lbfs (ro)
66Conditions:
67  Type              Status
68  Initialized       True 
69  Ready             True 
70  ContainersReady   True 
71  PodScheduled      True 
72Volumes:
73  kube-api-access-6lbfs:
74    Type:                    Projected (a volume that contains injected data from multiple sources)
75    TokenExpirationSeconds:  3607
76    ConfigMapName:           kube-root-ca.crt
77    ConfigMapOptional:       <nil>
78    DownwardAPI:             true
79QoS Class:                   BestEffort
80Node-Selectors:              <none>
81Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
82                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
83Events:
84  Type    Reason     Age    From               Message
85  ----    ------     ----   ----               -------
86  Normal  Scheduled  4m31s  default-scheduler  Successfully assigned default/nginx-deployment-8d545c96d-hp5bx to k8s-3
87  Normal  Pulling    4m29s  kubelet            Pulling image "nginx:latest"
88  Normal  Pulled     4m16s  kubelet            Successfully pulled image "nginx:latest" in 7.307172632s (13.013712244s including waiting)
89  Normal  Created    4m16s  kubelet            Created container nginx
90  Normal  Started    4m15s  kubelet            Started container nginx
91

进入容器内部

[root@k8s-1 pod]# kubectl exec -it nginx-deployment-8d545c96d-hp5bx – bash
root@nginx-deployment-8d545c96d-hp5bx:/#

  • kubectl exec:在运行的 Pod 中执行命令
  • -it:两个参数的组合,-i 保持标准输入打开,-t 分配一个伪终端,这两个参数一起使用可以创建交互式会话
  • nginx-deployment-8d545c96d-hp5bx:目标 Pod 的名称
  • --:用于分隔 kubectl 命令和要在 Pod 内执行的命令
  • bash:要在 Pod 内部执行的命令,即启动 bash 终端

三、pod的启动流程

在这里插入图片描述

  1. 管理员使用kubectl(命令行或在yaml文件)给api server发起请求,执行相关操作
  2. api server接受请求,将数据存入到ETCD数据库
  3. 通过watch机制,api server通知Controller Manager控制器管理器,去创建相关的rs副本控制器,副本控制器根据yaml文件里的内容去创建多少个副本的pod,pod使用什么镜像等信息,然后会返回给api server,再写到ETCD数据库
  4. 通过watch机制,通知Scheduler调度器生成相关的调度信息,根据过滤、评分选择好最优的节点服务器去启动pod,再把这些调度信息返回给api server ,写到ETCD数据库
  5. 通过watch机制,api server会通知被选中执行启动pod的节点服务器上的kubelet去启动pod,kubelet就会调用容器运行时接口(CRI),拉取镜像(如果需要),创建并启动容器
  6. kube-proxy配置pod的网络信息,返回告诉api server,写到ETCD数据库里
  7. kubelet启动pod完成后,再返回信息给api server,api server写到ETCD数据库里

四、pod的终止过程

  1. 用户向api server发送删除pod对象的命令
  2. api servcer中的pod对象信息会随着时间的推移而更新,在宽限期内(默认30s),pod被视为dead
  3. 将pod标记为terminating状态
  4. kubelet在监控到pod对象转为terminating状态的同时启动pod关闭过程
  5. 端点控制器监控到pod对象的关闭行为时将其从所有匹配到此端点的service资源的端点列表中移除
  6. 如果当前pod对象定义了preStop钩子处理器,则在其标记为terminating后即会以同步的方式启动执行
  7. pod对象中的容器进程收到停止信号
  8. 宽限期结束后,若pod中还存在仍在运行的进程,那么pod对象会收到立即终止的信号
  9. kubelet请求api server将此pod资源的宽限期设置为0从而完成删除操作,此时pod对于用户已不可见

钩子函数

钩子函数能够感知自身生命周期中的事件,并在容器的特定阶段执行运行用户指定的程序代码

kubernetes在主容器的启动之后和停止之前提供了两个钩子函数:

  • post start:容器创建之后执行,如果失败了会重启容器
  • pre stop :容器终止之前执行,执行完成之后容器将成功终止,在其完成之前会阻塞删除容器的操作

钩子处理器支持使用下面三种方式定义动作:

  • Exec命令:在容器内执行一次命令
  • TCPSocket:在当前容器尝试访问指定的socke
  • HTTPGet:在当前容器中向某url发起http请求

k8s-pod的启动》 是转载文章,点击查看原文


相关推荐


敏捷开发流程-精简版
暖阳_2025/10/12

敏捷开发流程 - 精简版(实战版) 版本: v1.0 更新日期: 2025-10-11 适用场景: 中小型团队快速迭代开发 🎯 流程全景图 📋 5大阶段详解 阶段1:需求收集 → 业务需求文档 负责人: 项目经理 输入: 用户原始需求(口头/邮件/会议记录) 核心工作: 收集用户需求 整理为层级结构(一级-二级-三级) 组织需求评审会①(内部简单评审) 产出物: ✅ 业务需求文档(层级结构) 评审点:需求评审会① 参与人:项目经理、产品经理 目的:快速确认需求方向和范围 输


门诊场景评测深度分析报告:医生-病人-测量代理交互对诊断影响机制研究(上)
Allen_Lyb2025/10/10

引言 医疗人工智能(AI)的发展正从静态问答系统向动态交互式决策助手演进,大型语言模型(LLM)在医学领域测评中展现出显著进步,如美国医学执照考试正确率从 2021 年 9 月的 38.1% 提升至 2023 年 11 月的 90.2%,超越人类专家平均水平(87%)[1][2]。然而,临床决策的复杂、顺序性本质与多模态数据收集需求,使得依赖静态问答的传统评估方法难以准确描绘 AI 系统的真实临床能力——研究表明,动态决策环境下诊断准确率可降至静态问答的 1/10 以下[3][4]。与此同时,


Android Studio 新功能 Journey Test:借助 AI 实现基于自然语言的 UI 测试用例编写
fundroid2025/10/9

在 Android 应用开发中,大家经常使用单元测试框架进行 UI 测试。随着技术演进,Android Studio 推出的 Journey Test 功能,依托 Gemini AI,为 UI 测试带来了全新的范式转变。 核心能力:自然语言与 AI 驱动的测试 Journey Test 最大的亮点在于结合了自然语言和 Gemini AI 的能力。开发者无需再埋头于复杂的代码编写,只需用日常的自然语言描述测试步骤,比如 “在邮箱输入框中输入 [email protected]”“验证是否显示‘邮箱为


【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
凉凉心.2025/10/7

1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册 2. 什么是服务注册与发现 Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心,而系统中的其他微服务使用Eureka的客户端连接到Eureka


Java分布式缓存的负载均衡与扩展性:构建高可用系统的隐形支柱
墨夶2025/10/6

Java与分布式缓存的“生死博弈” 在某个电商平台的双十一大促凌晨,当流量洪峰冲破百万QPS时,Java工程师们发现:那些精心设计的Redis集群、Ehcache本地缓存、以及看似简单的负载均衡策略,正在以肉眼可见的速度瓦解。这个残酷的现实揭示了一个真相:Java在分布式缓存中的角色,远不止是调用API那么简单。它需要像外科医生一样精准控制资源分配,像建筑大师一样设计可扩展的架构。 一、Java分布式缓存的“三体法则”:负载均衡的本质 1.1 负载均衡:分布式系统的“心脏起搏器” /


Python高校社团选择报名系统 微信小程序设计与实现
qq_31666783672025/10/4

目录 已开发项目效果实现截图技术路线核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 已开发项目效果实现截图 同行可拿货,招校园代理 本系统还支持springboot/laravel/express/nodejs/thinkphp/flask/django/ssm/springcloud 微服务分布式等框架 技术路线 开发语言:Python 框架:flask/django 开发软件:PyCharm/vscode 数据库


[创业之路-655]:人类可以直接使用的自然资源
文火冰糖的硅基工坊2025/10/3

人类可以直接使用的自然资源,是指那些无需复杂加工或仅需简单处理即可被利用的自然物质与能量。这些资源是人类生存和发展的基础,广泛应用于生活、生产、能源、交通等领域。 下面从资源类型、使用方式、分布特点与可持续性四个维度,系统梳理人类可以直接使用的自然资源。 一、按资源性质分类:六大类可直接使用的自然资源 类别是否可再生可直接使用的形式使用场景1. 水资源可再生河流、湖泊、雨水、地下水饮用、灌溉、洗涤、发电2. 太阳能可再生阳光(热能与光能)取暖、晾晒、太阳能灶、光伏发电(初级转换)3. 风


DeepSeek Java 单例模式详解
稚辉君.清华大学马士兵P9Java2025/10/2

Java 单例模式详解 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。## 单例模式的实现方式### 1. 饿汉式(Eager Initialization)javapublic class EagerSingleton { // 类加载时就创建实例 private static final EagerSingleton instance = new EagerSingleton(); // 私有构造函数,防止外部实例化 private EagerSingleton


maven install依赖后 另一个项目 maven reload找不到包
zzxxlty2025/10/2

如果是build报错,找不到包,则在idea设置-maven-runner里,选择delegate IDE build actions to Maven, 让maven接管build


(七——下)复习(分布式链路追踪/Rabiit MQ使用/Api Gateway)
山猪打不过家猪10/2/2025

【代码】(七——下)复习(分布式链路追踪/Rabiit MQ使用/Api Gateway)

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0