Kubernetes组件,Pod控制器类型

root
233
文章
0
评论
2020年6月27日17:20:30 评论 2336字阅读7分47秒

Kubernetes组件说明

K8s调用流程:

  1. 用户通过“Kubectl”进行操作,列如部署新的应用
  2. API server请求,并将其存储到Etcd
  3. watcher和controller检测资源状态的变化,并进行操作
  4. RelicaSet watcher/controller检测到新的app,创建新的pod达到期望的实例数
  5. Scheduler将新的pod分配到kubelet调用docker,docker去registry下载镜像
  6. kubelet检测到pods,并通过容器运行时部署他们
  7. kubeporxy管理pod网络,包括服务发现,负载均衡

Master控制节点:

APIserver:唯一接受客户请求的接口,判断请求是否符合逻辑,如果请求合理,就会把请求保存到Etcd当中,APIserver通知controller,执行相应的变动

kube-controller-manager:维持副本期望数目,不断对比etcd当中的客户期望值和node节点中实现的状态

kube-scheduler:负载介绍任务,选择合适节点分配任务,评估个node节点资源,选择最合适的,从APIserver中获取到任务,开始调度node任务,把执行的结果保存到etcd当中

ETCD:键值对数据库,存储k8s重要信息(持久化)

 

Node节点:

Kubelet:直接跟容器引擎交互实现容器的生命周期管理,通过APIserver不断检测资源变动,如果变动,首先会去调用docker,有docker去registry下载镜像,去当前节点上启动容器,把容器放到pod里,最小单元就是pod

Kube-proxy:负责写入规则至IPTABLES,IPVS,实现服务映射访问

container Runtime:

Addons附加组件:

以上两个还不能运行起来K8S,还需要附加组件

  • DNS
  • CNI:容器网络接口的实现(calico....flannel,canel)网络解决方案
  • web UI (Dashboard)
  • container resource monitoring
  • cluster-level logging

 

重要插件:

CREDNS:可以为集群中的SVC创建一个域名IP的对应关系解析

DASHBOARD:给K8s集群提供一个B/S结构访问体系

ingress controller:官网只能实现四层代理,INGRESS可以提供七层的代理

PROMETHEUS:提供K8s集群的监控能力 

ELK:提供K8s集群日志统一分析介入平台

Pod网络

六种命名空间:PID,NET,mount,IPC,USER,UTS

docker网络类型:closed,bridge(桥接),joined(联盟式),host

在一个Pod里的容器网络类型就是joined类型的,共享,UTS,Network,IPC

一个Pod空间里还有一个容器,叫做infra容器,其它容器加入pod中相当于共用的infra容器的网络,docker容器可以使用存储卷,对于pod而言,一个pod里的所有容器可以使用infra的存储卷,可用可不用,用就挂载

Pod控制器类型:

ReplicationController && ReplicaSet && Deployment:

用来确认容器应用的副本数据始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来代替;而如果异常多出来的容器会自动回收。

在新版本的kubernetes中建议使用ReplicaSet代替ReplicationController

ReplicaSet跟ReplicationController没有本质上的不同

ReplicaSet支持集合式的selector

虽然RelicaSet可以独立使用,但一般还是建议使用Deployment来自动管理RelicaSet,RelicaSet管理Pod,这样就无需担心跟其他机制的不兼容问题,如ReplicaSet不支持rolling-update但是Deployment支持)

要是使用回滚功能就会先把老旧RS下的Pod,启动到i新的RS中,把老旧的RS停用

HPA:

HPA仅用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CPU利用率扩所容,在vlalpha版本中,支持根据内容和用户自定义的metric扩缩容,说白了就是水平自动扩展pod数量

StatefullSet:

StatefulSet 是为了解决状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),应用场景包括:

  1. 稳定的持久化存储,即Pod重新调度后还能访问到相同的持久化数据,基于PVC来实现
  2. 稳定的网络标识,即Pod重新调度后其PodName和HostName不变,基于Headless Servic(即没有Cluster IP的Service)来实现
  3. 有序部署,有序扩展
  4. 有序收缩,有序删除

DaemonSet

确保全部(或者一些)node上运行一个Pod的副本。当node加入集群时,也会为他们新增加一个Pod。当有Node从集群移除时,这些pod也会被回收。删除DaemonSet将会删除它创建的所有Pod

使用DaemonSet的一些典型用法:

  • 运行集群存储daemon,列如每个node上运行glusterd,ceph。
  • 在每个node上运行日志收集daemon,列如fluentd,logstash
  • 在每个node上运行监控daemon,列如Prometheus pod exporter

Job

job负责批量处理任务,即仅执行一次的任务,它保证批量处理任务的一个或多个pod成功结束

Cron job 管理基于时间的job,即:

  • 在给定时间点只运行一次
  • 周期性地在给定时间点运行

 

 

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年6月27日17:20:30
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
k8s-Service Account Kubernetes

k8s-Service Account

k8s-Service Account的授权管理 Service Account也是一种账号,是给运行在Pod里的进程提供了必要的身份证明。需要在Pod定义中指明引用的Service Account,...
k8s-RBAC Kubernetes

k8s-RBAC

k8s-RBAC认证授权策略 RBAC介绍 在Kubernetes中,所有资源对象都是通过API进行操作,他们保存在etcd里。而对etcd的操作我们需要通过访问 kube-apiserver 来实现...
k8s-Secret Kubernetes

k8s-Secret

配置管理中心Secret Secret是什么? Configmap一般是用来存放明文数据的,如配置文件,对于一些敏感数据,如密码、私钥等数据时,要用secret类型 Secret解决了密码、token...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: