K8S知识总结

一、K8S概念

 1. k8s一个用于容器集群的自动化部署、扩容以及运维的开源平台。通过Kubernetes,可以快速有效地响应用户需求;快速而有预期地部署你的应用;极速地扩展你的应用;无缝对接新应用功能;节省资源,优化硬件资源的使用。为容器编排管理提供了完整的开源方案。

 2. K8S解决的问题  

  • 服务器环境
  • 服务器资源管理
  • 服务容灾恢复
  • 硬件资源利用
  • 服务资源创建
  • 可视化管理
  • 服务资源监控
  • 资源整合管理

3. K8S特性

    自动部署应用容器、自我修复、水平扩展(增加实例)、服务发现,负载均衡、滚动更新、版本回退、密钥和配置管理、存储编排、批处理,提供一次性任务,定时任务,满足批量数据处理和分析的场景

二、K8S架构

K8S知识总结_第1张图片

1. 组件结构

    1.1 master节点

  • etcd:配置存储中心,存储api-server的数据
  • API-server:RESTfulAPI模式,通过kubectl与客户端交互,与K8S集群、K8S内部进行通信、鉴权、数据校验、数据交互、资源配置、安全机制
  • controller-manager:它是整个集群的大脑,内部有很多控制器组成,通过api-server监控整个集群的状态,故障检测,自动扩展
  • scheduler:接收调度pod到合适的运算节点,pod的节点选择,资源的调度

   1.2 node 节点

  •  kubelet: 管理本机的容器,定时从API-server中获取节点上的pod的期望运行状态(副本数量、网络、存储如何配置),并将节点pod的状态给api-server,并且及时清理容器,自动修复pod功能
  • proxy:service接收到请求后,通过proxy转发到pod上、建立了pod网络与集群网络的关系

三、pod

1. pod来源

     1.1 自主式pod:利用yaml文件生成,删除后不会重建:kubectl create -f  text.yaml  、kubectl delete -f  text.yaml 

     1.2.控制器生成的pod: 通过控制器创建的pod,pod删除后会再自动创建

 pod控制器是管理pod的中间层,使用了pod控制器后,在控制器的yaml文件中设置想要运行的pod,如果pod出现问题,控制器后根据指定策略重启或者重建pod

常见的控制器类型:

1. 企业常用

Deployment(无状态服务:pod无顺序要求,无node要求,随意伸缩和扩展):通过控制ReplicaSet资源来控制pod,并支持滚动升级、版本回退等,绑定节点,选择节点部署pod等,挂载文件,控制资源大小

StatefulSet(有状态服务:pod有顺序,考虑在那个节点运行,每个pod都是独立,保持pod启动顺序,持久存储):

    1.稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现     2.稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现      3.有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现       4.有序收缩,有序删除(即从N-1到0) 

    DaemonSet:守护进程(每个node都运行着同一个pod)

2. 其他的控制器:

   1.3 pod内部的知识

    1. Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信

    2. Pod可以指定一组共享存储。Volumes Pod中,Pod中的所有容器都可以访问共享卷,从而使这些容器可以共享数据

 pause容器:
 1)每个Pod中都有一个pause容器,pause容器做为Pod的网络接入点
 2)属于同一个Pod的所有容器共享网络的namespace
 3)一个Pod里的容器与另外主机上的Pod容器能够直接通信(lo) 4)属于同一个Pod的所有容器共享Volume挂载卷

 2. pod生命周期

      Pod 的生命周期 | Kubernetes

     pod在其生命周期中只会被调度一次, 一旦 Pod 被调度(分派)到某个节点,Pod 会一直在该节点运行,直到 Pod 停止或者 被终止

     2.1 pod生命周期

           Pod 会被创建、赋予一个唯一的 ID(UID), 并被调度到节点,并在终止(根据重启策略)或删除之前一直运行在该节点,如果该节点死掉,该节点的pod在超时期限后被删除。

          pod重启后,或者重新部署后,它的UID不同。

pod生命周期中的值 具体原因
Pending(悬决) Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间,
Running(运行中) Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
Succeeded(成功) Pod 中的所有容器都已成功终止,并且不会再重启。
Failed(失败) Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。
Unknown(未知) 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

    2.2 容器状态

      Kubernetes 会跟踪 Pod 中每个容器的状态,就像它跟踪 Pod 总体上的阶段一样

      kubectl describe pod : 其输出中包含 Pod 中每个容器的状态,里面有一个字段status会显示当前容器的状态

你可能感兴趣的:(小程序,运维,html5)