中国建设劳动学会是正规网站吗,旅游公司网站制作,西安定制网站建设,国外的app设计网站目录
一、概述
二、Pod机制
2.1、共享网络
2.2、共享存储
三、Pod资源清单
四、 Pod 的分类
五、Pod阶段
六、Pod 镜像拉取策略
ImagePullBackOff
七、Pod 资源限制
八、容器重启策略 一、概述
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。P…目录
一、概述
二、Pod机制
2.1、共享网络
2.2、共享存储
三、Pod资源清单
四、 Pod 的分类
五、Pod阶段
六、Pod 镜像拉取策略
ImagePullBackOff
七、Pod 资源限制
八、容器重启策略 一、概述
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod 里面是由一个或多个容器组成【一组容器的集合】这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 是 Kubernetes 的最重要概念每一个 Pod 都有一个特殊的被称为”根容器“的Pause容器。Pause 容器对应的镜像属于 Kubernetes 平台的一部分除了Pause 容器每个Pod还包含一个或多个紧密相关的用户业务容器。 Pod有以下一些特性
资源共享
一个 Pod 里的多个容器可以共享存储和网络可以看作一个逻辑的主机。共享namespace,cgroups 或者其他的隔离资源。
一个 Pod 里的多个容器可以共享存储卷这个存储卷会被定义为 Pod 的一部分并且可以挂载到该 Pod 里的所有容器的文件系统上 。
生命周期短暂
Pod 属于生命周期比较短暂的组件比如当 Pod 所在节点发生故障那么该节点上的Pod会被调度到其他节点但需要注意的是被重新调度的 Pod 是一个全新的Pod跟之前的Pod 没有任何关系。
平坦的网络
k8s 集群中的所有 Pod 都在同一个共享网络地址空间中也就是说每个Pod 都可以通过其他 Pod 的 IP 地址来实现访问。 二、Pod机制
Pod 主要有以下两大机制共享网络 和 共享存储。
2.1、共享网络
容器通过 namespace 和 group 进行隔离。通过Pause容器把其它业务容器加入到Pause容器中让所有业务容器在同一个名称空间中可以实现网络共享。在同一个 Pod 内所有容器共享一个 IP 地址和端口空间并且可以通过 localhost 发现对方。
2.2、共享存储
一个 Pod 可以设置一组共享的存储卷。 Pod 中的所有容器都可以访问该共享卷从而允许这些容器共享数据。 卷还允许 Pod 中的持久数据保留下来即使其中的容器需要重新启动。
三、Pod资源清单
下面给出yaml文件定义的nginx Pod 的示例内容
$ kubectl create deployment nginx --imagenginx
deployment.apps/nginx created$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-748c667d99-mp4d6 0/1 ContainerCreating 0 5s// 查看pod的yaml资源清单
$ kubectl get pods nginx-748c667d99-mp4d6 -o yaml
apiVersion: v1 //版本号
kind: Pod //资源类型这里是Pod
metadata: //元数据annotations: //pod注解信息cni.projectcalico.org/containerID: 8190e79f9ce4ebc75058013e14bd247a8a92210b28b613f9f80bcc761975117bcni.projectcalico.org/podIP: 192.168.1.3/32cni.projectcalico.org/podIPs: 192.168.1.3/32creationTimestamp: 2022-12-29T06:27:33ZgenerateName: nginx-748c667d99- //名称前缀labels: //pod标签列表app: nginxpod-template-hash: 748c667d99name: nginx-748c667d99-mp4d6 //pod名称namespace: default //pod所在的命名空间默认为defaultownerReferences:- apiVersion: apps/v1blockOwnerDeletion: truecontroller: truekind: ReplicaSetname: nginx-748c667d99uid: f09e2cff-2983-4af9-98e3-71e0d470eaa2resourceVersion: 2873uid: 28f22749-7343-428e-a20a-d7973e4c5a94
spec: // 资源特征containers: //pod 中的容器列表可以有多个容器- image: nginx //镜像地址默认从docker hub拉取nginx镜像imagePullPolicy: Always //获取镜像的策略默认值为Always每次都尝试重新下载镜像. 有三种取值[Always|Never|IfNotPresent]name: nginx //容器的名称resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts: //挂载到到容器内部的存储卷设置- mountPath: /var/run/secrets/kubernetes.io/serviceaccount //存储卷在容器内部 Mount的绝对路径name: kube-api-access-78n9q //引用的是kube-api-access-78n9这个容器卷在下边有定义这个volumereadOnly: true //只读,默认值为读写dnsPolicy: ClusterFirstenableServiceLinks: truenodeName: node01 //pod所在的节点名称,由调度器scheduler进行调度preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: Always //重启策略schedulerName: default-scheduler //使用默认的调度器通常情况下使用默认的即可securityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations: //污点容忍- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes: //定义volume容器卷列表- name: kube-api-access-78n9qprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespace
status:conditions: //pod的状况- lastProbeTime: nulllastTransitionTime: 2022-12-29T06:27:35Zstatus: Truetype: Initialized- lastProbeTime: nulllastTransitionTime: 2022-12-29T06:27:51Zstatus: Truetype: Ready- lastProbeTime: nulllastTransitionTime: 2022-12-29T06:27:51Zstatus: Truetype: ContainersReady- lastProbeTime: nulllastTransitionTime: 2022-12-29T06:27:35Zstatus: Truetype: PodScheduledcontainerStatuses:- containerID: containerd://1c7e903816a0de4192f3ffe4b3026d59bee259aa75b15a036d48aa3250574ad2image: docker.io/library/nginx:latestimageID: docker.io/library/nginxsha256:0047b729188a15da49380d9506d65959cce6d40291ccfb4e039f5dc7efd33286lastState: {}name: nginxready: truerestartCount: 0started: truestate:running:startedAt: 2022-12-29T06:27:50ZhostIP: 172.30.2.2phase: RunningpodIP: 192.168.1.3podIPs:- ip: 192.168.1.3qosClass: BestEffortstartTime: 2022-12-29T06:27:35Z
四、 Pod 的分类
Pod 有两种类型
1普通 Pod
普通 Pod 一旦被创建就会被放入到 etcd 中存储随后会被 Kubernetes Master 调度到某个具体的 Node 上并进行绑定随后该 Pod 对应的 Node 上的 kubelet 进程实例化成一组相关的 Docker 容器并启动起来。在默认情 况下当 Pod 里某个容器停止时Kubernetes 会自动检测到这个问题并且重新启动这个 Pod 里某所有容器 如果 Pod 所在的Node 宕机则会将这个 Node 上的所有 Pod 重新调度到其它节点上。
2静态 Pod
静态 Pod 是由 kubelet 进行管理的仅存在于特定 Node 上的 Pod它们不能通过API Server进行管理无法与 ReplicationController、Deployment 或 DaemonSet 进行关联并且kubelet 也无法对它们进行健康检查。
五、Pod阶段
Pod 的 status 字段是一个 PodStatus 对象其中包含一个 phase 字段。Pod 的阶段Phase是 Pod 在其生命周期中所处位置的简单宏观概述。
下面是 phase 可能的值 状态 说明 Pending悬决 api server已经创建了该pod但pod中的一个或者多个容器的镜像还没有创建包括镜像下载过程 Running运行中 pod内所有容器已经创建且至少一个容器处于运行状态、正在启动或者正在重启状态 Succeeded成功 pod内所有容器均成功退出且不会再重启 Failed失败 pod内所有容器均已退出但至少一个容器退出失败 Unknown未知 由于某种原因无法获取pod状态例如网络通信不畅 当一个 Pod 被删除时执行一些 kubectl 命令会展示这个 Pod 的状态为 Terminating终止。 这个 Terminating 状态并不是 Pod 阶段之一。 Pod 被赋予一个可以体面终止的期限默认为 30 秒。 你可以使用 --force 参数来强制终止 Pod。 六、Pod 镜像拉取策略
容器的 imagePullPolicy 和镜像的标签会影响 kubelet 尝试拉取下载指定的镜像。
以下列表包含了 imagePullPolicy 可以设置的值以及这些值的效果
IfNotPresent
只有当镜像在本地不存在时才会拉取。
Always
每当 kubelet 启动一个容器时kubelet 会查询容器的镜像仓库 将名称解析为一个镜像摘要。 如果 kubelet 有一个容器镜像并且对应的摘要已在本地缓存kubelet 就会使用其缓存的镜像 否则kubelet 就会使用解析后的摘要拉取镜像并使用该镜像来启动容器。
Never
Kubelet 不会尝试获取镜像。如果镜像已经以某种方式存在本地 kubelet 会尝试启动容器否则会启动失败。 在生产环境中部署容器时你应该避免使用 :latest 标签因为这使得正在运行的镜像的版本难以追踪并且难以正确地回滚。 相反应指定一个有意义的标签如 v1.42.0。 ImagePullBackOff
当 kubelet 使用容器运行时创建 Pod 时容器可能因为 ImagePullBackOff 导致状态为 Waiting。
ImagePullBackOff 状态意味着容器无法启动 因为 Kubernetes 无法拉取容器镜像原因包括无效的镜像名称或从私有仓库拉取而没有 imagePullSecret。 BackOff 部分表示 Kubernetes 将继续尝试拉取镜像并增加回退延迟。
Kubernetes 会增加每次尝试之间的延迟直到达到编译限制即 300 秒5 分钟。
七、Pod 资源限制
每个 Pod 都可以对其能使用的服务器上的计算资源设置限额Kubernetes 中可以设置限额的计算资源有 CPU 与 Memory 两种其中 CPU 的资源单位为 CPU 数量是一个绝对值而非相对值。Memory 配额也是一个绝对值它的单位是内存字节数。 Kubernetes 里一个计算资源进行配额限定需要设定以下两个参数
Requests 该资源最小申请数量系统必须满足要求【表示调度所需的资源】 Limits 该资源最大允许使用的量不能突破当容器试图使用超过这个量的资源时可能会被 Kubernetes Kill 并重启 【表示最大所占用的资源】
spec:containers:- name: mysqlimage: mysqlresources:requests:memory: 64Micpu: 250mlimits:memory: 128Micpu: 500m
上述代码表明 mysql 容器申请最少 0.25 个 CPU 以及 64MiB 内存在运行过程中容器所能使用的资源配额为 0.5 个 CPU 以及 128MiB 内存。
八、容器重启策略
Pod 的 spec 中包含一个 restartPolicy 字段其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。
restartPolicy 适用于 Pod 中的所有容器restartPolicy 仅针对同一节点上 kubelet 的容器重启动作。当 Pod 中的容器退出时kubelet 会按指数回退方式计算重启的延迟10s、20s、40s、...其最长延迟为 5 分钟。 一旦某容器执行了 10 分钟并且没有出现问题kubelet 对该容器的重启回退计时器执行重置操作。
重启策略restartPolicy主要分为以下三种
Always当容器终止退出后总是重启容器默认策略 OnFailure当容器异常退出且退出状态码非0时才重启容器Never当容器终止退出都不重启容器