【Kubernetes系列】第3篇 基础概念介绍(下)

举报
HankerCloud 发表于 2019/09/24 16:59:43 2019/09/24
【摘要】 9 DaemonSet 守护进程集DaemonSet保证在特定或所有Node节点上都运行一个Pod实例,常用来部署一些集群的日志采集、监控或者其他系统管理应用。典型的应用包括:日志收集,比如fluentd,logstash等系统监控,比如Prometheus Node Exporter,collectd等系统程序,比如kube-proxy, kube-dns, glusterd, ceph,...

v2-41cd4e0da53d456d5ee31a41ce490067_1200x500.jpg

9 DaemonSet 守护进程集

DaemonSet保证在特定或所有Node节点上都运行一个Pod实例,常用来部署一些集群的日志采集、监控或者其他系统管理应用。典型的应用包括:

  • 日志收集,比如fluentd,logstash等

  • 系统监控,比如Prometheus Node Exporter,collectd等

  • 系统程序,比如kube-proxy, kube-dns, glusterd, ceph,ingress-controller等


指定Node节点
DaemonSet会忽略Node的unschedulable状态,有两种方式来指定Pod只运行在指定的Node节点上:

  • nodeSelector:只调度到匹配指定label的Node上

  • nodeAffinity:功能更丰富的Node选择器,比如支持集合操作

  • podAffinity:调度到满足条件的Pod所在的Node上


目前支持两种策略

  • OnDelete: 默认策略,更新模板后,只有手动删除了旧的Pod后才会创建新的Pod

  • RollingUpdate: 更新DaemonSet模版后,自动删除旧的Pod并创建新的Pod


10 Ingress 负载均衡

Kubernetes中的负载均衡我们主要用到了以下两种机制:

  • Service:使用Service提供集群内部的负载均衡,Kube-proxy负责将service请求负载均衡到后端的Pod中

  • Ingress Controller:使用Ingress提供集群外部的负载均衡


Service和Pod的IP仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到service所在节点暴露的端口上,然后再由kube-proxy通过边缘路由器将其转发到相关的Pod,Ingress可以给service提供集群外部访问的URL、负载均衡、HTTP路由等,为了配置这些Ingress规则,集群管理员需要部署一个Ingress Controller,它监听Ingress和service的变化,并根据规则配置负载均衡并提供访问入口。

常用的ingress controller:

  • nginx

  • traefik

  • Kong

  • Openresty


11 Job & CronJob 任务和定时任务

Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。
CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。

12 HPA(Horizontal Pod Autoscaling) 水平伸缩

Horizontal Pod Autoscaling可以根据CPU、内存使用率或应用自定义metrics自动扩展Pod数量 (支持replication controller、deployment和replica set)。

  • 控制管理器默认每隔30s查询metrics的资源使用情况(可以通过 --horizontal-pod-autoscaler-sync-period 修改)

  • 支持三种metrics类型

    • 预定义metrics(比如Pod的CPU)以利用率的方式计算

    • 自定义的Pod metrics,以原始值(raw value)的方式计算

    • 自定义的object metrics

  • 支持两种metrics查询方式:Heapster和自定义的REST API

  • 支持多metrics


可以通过如下命令创建HPA:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10


13 Service Account

Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的

授权
Service Account为服务提供了一种方便的认证机制,但它不关心授权的问题。可以配合RBAC(Role Based Access Control)来为Service Account鉴权,通过定义Role、RoleBinding、ClusterRole、ClusterRoleBinding来对sa进行授权。

14 Secret 密钥

Sercert-密钥解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。有如下三种类型:

15 ConfigMap 配置中心

ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap跟secret很类似,但它可以更方便地处理不包含敏感信息的字符串。ConfigMap可以通过三种方式在Pod中使用,三种分别方式为:设置环境变量、设置容器命令行参数以及在Volume中直接挂载文件或目录。
可以使用 kubectl create configmap从文件、目录或者key-value字符串创建等创建 ConfigMap。也可以通过 kubectl create -f value.yaml 创建。

16 Resource Quotas 资源配额

资源配额(Resource Quotas)是用来限制用户资源用量的一种机制。
资源配额有如下类型:

  • 计算资源,包括cpu和memory

    • cpu, limits.cpu, requests.cpu

    • memory, limits.memory, requests.memory

  • 存储资源,包括存储资源的总量以及指定storage class的总量

  • 对象数,即可创建的对象的个数

    • pods, replicationcontrollers, configmaps, secrets

    • resourcequotas, persistentvolumeclaims

    • services, services.loadbalancers, services.nodeports

它的工作原理为:

  • 资源配额应用在Namespace上,并且每个Namespace最多只能有一个 ResourceQuota 对象

  • 开启计算资源配额后,创建容器时必须配置计算资源请求或限制(也可以 用LimitRange设置默认值)

  • 用户超额后禁止创建新的资源


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。