Kubernetes中pod創建流程


轉自:https://blog.csdn.net/yan234280533/article/details/72567261

 Pod是Kubernetes中最基本的部署調度單元,可以包含container,邏輯上表示某種應用的一個實例。例如一個web站點應用由前端、后端及數據庫構建而成,這三個組件將運行在各自的容器中,那么我們可以創建包含三個container的pod。本文將對Kubernetes的基本處理流程做一個簡單的分析。

  Pod的創建(單獨創建,或者通過deployment創建和管理多個pod)流程如下圖所示(圖片來源於網絡):

 

 

 

具體的創建步驟包括:

1、客戶端提交創建請求,可以通過API Server的Restful API,也可以使用kubectl命令行工具。支持的數據類型包括JSON和YAML。

2、API Server處理用戶請求,存儲Pod數據到etcd。

3、調度器通過API Server查看未綁定的Pod。嘗試為Pod分配主機。

4、過濾主機 (調度預選):調度器用一組規則過濾掉不符合要求的主機。比如Pod指定了所需要的資源量,那么可用資源比Pod需要的資源量少的主機會被過濾掉。

5、主機打分(調度優選):對第一步篩選出的符合要求的主機進行打分,在主機打分階段,調度器會考慮一些整體優化策略,比如把容一個Replication Controller的副本分布到不同的主機上,使用最低負載的主機等。

6、選擇主機:選擇打分最高的主機,進行binding操作,結果存儲到etcd中。

7、kubelet根據調度結果執行Pod創建操作: 綁定成功后,scheduler會調用APIServer的API在etcd中創建一個boundpod對象,描述在一個工作節點上綁定運行的所有pod信息。運行在每個工作節點上的kubelet也會定期與etcd同步boundpod信息,一旦發現應該在該工作節點上運行的boundpod對象沒有更新,則調用Docker API創建並啟動pod內的容器。

另一張更為簡潔(來自於網絡):

 

通過 yaml創建簡單pod

[root@k8s-master k8s-objs]# cat pod-solo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: simple-sample-pod
  labels:
    purpose: pod-test
spec:
  containers:
    - name: test-container
      image: tomcat:8
      #command: ["/bin/bash","-c","echo hihihi"] ##加上此句會報錯,不知為何,kubectl explain pod.spec.containers.command #查看yaml該項,說The docker image's ENTRYPOINT is used if this is not provided
      env:
        - name: DEMO_GREETING
          value: "hellothefirstk8spod"
  restartPolicy: Never

[root@k8s
-master k8s-objs]# [root@k8s-master k8s-objs]# kubectl create -f pod-solo.yaml pod/simple-sample-pod created [root@k8s-master k8s-objs]# kubectl get pods
NAME                     READY   STATUS      RESTARTS   AGE
hello-5cd4456b66-gstq6   1/1     Running     1          7d21h
hello-5cd4456b66-sb5px   1/1     Running     1          7d21h
simple-sample-pod          1/1     Running   0          15s [root@k8s
-master k8s-objs]# kubectl logs simple-sample-pod 11-Apr-2019 11:12:32.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.39
11-Apr-2019 11:12:33.018 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Mar 14 2019 11:24:26 UTC
11-Apr-2019 11:12:33.018 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.39.0
11-Apr-2019 11:12:33.018 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux

[root@k8s-master k8s-objs]# kubectl describe pod simple-sample-pod
Name:               simple-sample-pod
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               k8s-node1/192.168.111.131
Start Time:         Thu, 11 Apr 2019 19:12:15 +0800
Labels:             purpose=pod-test
Annotations:        <none>
Status:             Running
IP:                 10.244.1.68
Containers:
  test-container:
    Container ID:   docker://fd1c4cdad785bd1ec39372c45d44dbc1fe4c4cb2b1dbbfb8d2ecbf004b13d474
    Image:          tomcat:8
    Image ID:       docker-pullable://tomcat@sha256:3e3d18321127bb9114f4226f95802d3899aeec4c36df84d0359e5da300e9bc72
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Thu, 11 Apr 2019 19:12:27 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      DEMO_GREETING:  hellothefirstk8spod
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-92rjn (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-92rjn:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-92rjn
    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  2m53s  default-scheduler   Successfully assigned default/simple-sample-pod to k8s-node1
  Normal  Pulled     2m42s  kubelet, k8s-node1  Container image "tomcat:8" already present on machine
  Normal  Created    2m42s  kubelet, k8s-node1  Created container test-container
  Normal  Started    2m41s  kubelet, k8s-node1  Started container test-container
[root@k8s-master k8s-objs]#

 刪除:

[root@k8s-master k8s-objs]# ls
pod-solo.yaml
[root@k8s-master k8s-objs]# kubectl get pod
NAME                       READY   STATUS    RESTARTS   AGE
hello-2-5bf86f6c95-rpvxb   1/1     Running   0          106m
hello-5cd4456b66-gstq6     1/1     Running   1          8d
hello-5cd4456b66-sb5px     1/1     Running   1          8d
simple-sample-pod          1/1     Running   0          4m30s
[root@k8s-master k8s-objs]#
[root@k8s
-master k8s-objs]# kubectl delete -f pod-solo.yaml pod "simple-sample-pod" deleted [root@k8s-master k8s-objs]# kubectl get pods NAME READY STATUS RESTARTS AGE hello-5cd4456b66-gstq6 1/1 Running 1 7d21h hello-5cd4456b66-sb5px 1/1 Running 1 7d21h [root@k8s-master k8s-objs]#

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM