(P1-P9)初窥kubernetes全貌

文章目录

1 docker容器技术

  • Docker提供了一种将应用程序安全,隔离运行的一种方式,能够将应用程序依赖和库文件打包在一个容器中,后续再任何地方运行起来即可,其包含了应用程序所依赖相关环境,一次构建,任意运行(build once,run anywhere)
    (P1-P9)初窥kubernetes全貌

  • Docker组成:
    Docker Daemon 容器管理组件,守护进程,负载容器,镜像,存储,网络等管理
    Docker Client 容器客户端,负责和Docker Daemon交互,完成容器生命周期管理
    Docker Registry 容器镜像仓库,负责存储,分发,打包
    Docker Object 容器对象,主要包含container和images
    容器给应用程序开发环境带来很大的便利,从根本上解决了容器的环境依赖,打包等问题,然而,

  • Docker带来的容器打包的便利,同时也带来了以下的挑战:
    容器如何调度,分发
    多台机器如何协同工作
    Docker主机故障时应用如何恢复
    如何保障应用高可用,横向扩展,动态伸缩
    (P1-P9)初窥kubernetes全貌

2.2 kubernetes简介与功能

  • Kubernetes是google开源的一套微服务,容器化的编排引擎,提供容器话应用的自动化部署,横向扩展和管理,是google内部容器十多年实战沉淀的结晶,已战胜Swarm,Mesos成为容器编排的行业标准。

  • kuberntes内置有很多非常优秀的特性使开发者专注于业务本身,其包含的功能如下:
    (P1-P9)初窥kubernetes全貌

  • Service discovery and load balancing,服务发现和负载均衡,通过DNS实现内部解析,service实现负载均衡

  • Storage orchestration,存储编排,通过plungin的形式支持多种存储,如本地,nfs,ceph,公有云快存储等

  • Automated rollouts and rollbacks,自动发布与回滚,通过匹配当前状态与目标状态一致,更新失败时可回滚

  • Automatic bin packing,自动资源调度,可以设置pod调度的所需(requests)资源和限制资源(limits)

  • Self-healing,内置的健康检查策略,自动发现和处理集群内的异常,更换,需重启的pod节点

  • Secret and configuration management,密钥和配置管理,对于敏感信息如密码,账号的那个通过secret存储,应用的配置文件- 通过configmap存储,避免将配置文件固定在镜像中,增加容器编排的灵活性

  • Batch execution,批处理执行,通过job和cronjob提供单次批处理任务和循环计划任务功能的实现

  • Horizontal scaling,横向扩展功能,包含有HPA和AS,即应用的基于CPU利用率的弹性伸缩和基于平台级的弹性伸缩,如自动增加node和删除nodes节点。

  • 参考:生产级别的容器编排系统kubernetes入门到实战(一)初窥kubernetes全貌

3.kubernetes架构解析

(P1-P9)初窥kubernetes全貌

  • kube-apiserver 功能
    (1)k8s nodes上的所有请求都要经过apiserver
    (2)认证和授权
    (3)将数据写入etcd数据库

  • etcd
    (1)etcd 是兼具一致性和高可用性的键值数据库
    (2)保存和持久化集群状态信息

  • kube-scheduler
    (1)过滤:将满足条件的node筛选出来进行排序,最优的节点运行重启
    (2)调度策略:硬件/软件/策略约束、亲和性和反亲和性规范等

  • kube-controller-manager
    这些控制器包括:
    节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
    任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
    端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
    服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌

  • cloud-controller-manager
    (1)与公有云进行集成
    (2)下面的控制器都包含对云平台驱动的依赖:
    节点控制器(Node Controller): 用于在节点终止响应后检查云提供商以确定节点是否已被删除
    路由控制器(Route Controller): 用于在底层云基础架构中设置路由
    服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器

  • Node 组件
    (1)容器运行时(Container Runtime)
    容器运行环境是负责运行容器的软件。
    Kubernetes 支持多个容器运行环境: Docker、 containerd、CRI-O 以及任何实现 Kubernetes CRI (容器运行环境接口)。
    (2)kubelet
    kubelet创建和管理Container Runtime资源,k8s通过kubelet来判断node的健康状态,容器不健康会迁移;
    (3)kube-proxy
    实现 Kubernetes 服务(Service) 概念的一部分;
    通过iptables或lvs定义负载均衡的策略;
    暴露容器对外服务的实现;

  • 附加插件(Addons)
    (1)DNS
    (2)Web 界面(Dashboard )
    (3)容器资源监控
    监控系统用于采集node和pod的监控数据
    metric-server 核心指标监控
    prometheus 自定义指标监控,提供丰富功能
    heapster+influxdb+grafana 旧核心指标监控方案,现已废弃
    (4)集群层面日志
    日志采集系统,用于收集容器的业务数据,实现日志的采集,存储和展示,由EFK实现
    Fluentd 日志采集
    ElasticSearch 日志存储+检索
    Kiabana 数据展示

  • 参考:Kubernetes 组件

4.CNCF蓝图

(P1-P9)初窥kubernetes全貌

  • 云原生相关内容
    (P1-P9)初窥kubernetes全貌

  • CNCF

上一篇:从天河 2 号到阿里云超算,P9 技术牛的职业发展智慧


下一篇:看完阿里P9大牛的“Java成长笔记”我悟了!跳槽大厂必看!