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 / Running 7d21h
hello-5cd4456b66-sb5px / Running 7d21h
[root@k8s-master k8s-objs]#
Kubernetes中pod创建流程的更多相关文章
- k8s功能、各组件介绍以及pod创建流程
一.什么是Kubernetes Kubernetes(k跟s中间隔了8个字母又称k8s) 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术Borg 的开源版本,主要功能包括: 基 ...
- k8s 基础 pod创建流程
Pod是Kubernetes中最基本的部署调度单元,可以包含container,逻辑上表示某种应用的一个实例.例如一个web站点应用由前端.后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我 ...
- Kubernetes中 Pod 是怎样被驱逐的?
前言 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 IO).可压缩资源不可能导致 Pod 被驱 ...
- Kubernetes中Pod的健康检查
本文介绍 Pod 中容器健康检查相关的内容.配置方法以及实验测试,实验环境为 Kubernetes 1.11,搭建方法参考kubeadm安装kubernetes V1.11.1 集群 0. 什么是 C ...
- Kubernetes中Pod健康检查
目录 1.何为健康检查 2.探针分类 2.1.LivenessProbe探针(存活性探测) 2.2.ReadinessProbe探针(就绪型探测) 3.探针实现方法 3.1.Container Exe ...
- 关于 Kubernetes 中的 Volume 与 GlusterFS 分布式存储
容器中持久化的文件生命周期是短暂的,如果容器中程序崩溃宕机,kubelet 就会重新启动,容器中的文件将会丢失,所以对于有状态的应用容器中持久化存储是至关重要的一个环节:另外很多时候一个 Pod 中可 ...
- Kubernetes中资源清单与Pod的生命周期(二)
一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...
- (译)Kubernetes中的多容器Pod和Pod内容器间通信
原文:https://www.mirantis.com/blog/multi-container-pods-and-container-communication-in-kubernetes/Pave ...
- 傲视Kubernetes(三):Kubernetes中的Pod
从本文开始,将正式开始Kubernetes的核心内容学习.首先要了解的是Pod,总共大约分为六篇左右,本篇是第一篇,相信学完之后,我们会对Pod有一个整体的理解. 本文内容: 1.什么是Pod 2.P ...
随机推荐
- VBScript Scripting Techniques: File Open Dialog http://www.robvanderwoude.com/vbstech_ui_fileopen.php
I accept cookies This website uses cookies to ensure you get the best experience on our website More ...
- 廖雪峰Java6 IO编程-2input和output-5操作zip
1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInput ...
- optparse模块解析命令行参数的说明及优化
一.关于解析命令行参数的方法 关于“解析命令行参数”的方法我们一般都会用到sys.argv跟optparse模块.关于sys.argv,网上有一篇非常优秀的博客已经介绍的很详细了,大家可以去这里参考: ...
- (转)区分LTE,EPS,EPC和SAE
LTE:Long Term Evolution长期演进,是无线接口部分向4G演进的工作项目. 3GPP:The 3Rd Generation Partnership Project,第三代合作伙伴计划 ...
- [SQL]注释
-- =============================================-- Author : hetao-- Create date: 2017/7/4 ...
- 移动端动态font-size
/** * Created by shimin on 2017/8/18. *///计算dpr!function(win, lib) { var timer, doc = win.document, ...
- QueryString to Dictionary<string, string>
public class ModelConvertHelper<T> where T : new() {// 此处一定要加上new() public static IList<T&g ...
- 数组.html
<script > var arr1 = [1, 2, 3, 4, 5, 6 ]; 赋值 var arr2 =Array(1,2,3,4,5,6); var arr3 = new Arra ...
- 怎样找到微信小程序功能呢?
怎样找到微信小程序功能呢? 17年1月9号这个功能刚推出时,非常火,但我在微信中迟迟找不到微信小程序功能,微信明明更新到了最新版也没有:后来经过以下步骤才找到这个功能! 1.微信版本不能过低,这个一般 ...
- vs2015 引用lib库和dll
1.首先右键项目->属性 2.在项目中添加lib文件夹,把lib库放在文件夹下面,然后在图中的库目录引用当前路径的lib文件夹 3.在项目的路径下添加include中添加头文件,然后在常规中添加 ...