美文网首页
Kubernetes 学习笔记

Kubernetes 学习笔记

作者: FogDong | 来源:发表于2019-09-29 10:13 被阅读0次

    什么是Kubernetes

    Kubernetes 是 Google 开源的基于容器技术的分布式架构领先方案,提供应用部署、维护、扩展机制等功能,利用 Kubernetes 能方便地管理跨机器运行容器化的应用。

    单容器( contianer )所遇到的问题

    • 需要被管理
    • 网络环境复杂
    • 容器需要被调度、分发,以及配置负载均衡
    • 数据需要被保存在其他地方

    • 使用 Docker 对应用程序打包、实例化、运行
    • 以集群的方式运行、管理跨机器的容器
    • 解决 Docker 跨机器容器之间的通讯问题

    核心概念

    分为 master 和 node 节点,master 为集群控制节点
    master 节点通常会占据一个独立的服务器(高可用部署建议使用三台服务器(如果 master 和 etcd 部在一起的话))

    master上:etcd, controller, scheduler, api server

    • etcd: key-value 存储,集群状态管理,是运行在多节点上的分布式键值存储,高可用(奇数个,必须半数以上的选举,容错能力限制于节点数的一半,选举 raft)
    • controller:控制器(多个控制器组成)选举
    • scheduler:调度器,负责资源调度(pod 调度)的进程 选举。scheduler 的职责很明确,就是负责调度 pod 到合适的 Node 上。如果把 scheduler 看成一个黑匣子,那么它的输入是 pod 和由多个 Node 组成的列表,输出是 Pod 和一个 Node 的绑定,即将这个 pod 部署到这个 Node 上。Kubernetes 目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。
    • api server:暴露接口,处理请求。提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制。APIServer负责对外提供RESTful的 Kubernetes API 服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给 APIServer 处理后再提交给 etcd,kubectl( Kubernetes 提供的客户端工具,该工具内部就是对 Kubernetes API 的调用)是直接和 APIServer 交互的。

    node上:kubelet, kubeproxy, runtime

    • kubelet:管理 pod,负责 pod 对应的容器的创建、启停等任务,同时与 master 节点密切协作,实现集群管理的基本功能
    • kubeproxy: 实现 kubernetes service 的通信与负载均衡机制的重要组件
    • runtime: runtime 指的是容器运行环境,目前 Kubernetes 支持 docker 和 rkt 两种容器。

    除了核心组件,还有一些推荐的 Add-ons:

    • kube-dns:负责为整个集群提供 DNS 服务
    • Ingress Controller:为服务提供外网入口
    • Heapster:提供资源监控
    • Dashboard:提供GUI
    • Federation:提供跨可用区的集群
    • Fluentd-elasticsearch:提供集群日志采集、存储与查询

    网络预置

    • 所有 pods 之间可以相互通信
    • 所有 pods 和 nodes 可以相互通信
    • 不做 NAT

    设计原则

    声明式编程(Declarative)

    声明式与命令式的区别

    Declarative 的定义是用户设定期望的状态,系统会知道它需要执行什么操作,来达到期望的状态。
    而对于 Imperative,需要用户告诉系统需要做什么。比如说用户说创建一个新的 Container,系统才会创建一个新的 Container。

    Level-triggered

    Pod

    基本概念

    • Kubernetes 中最小计算和被调度单元
    • 是多个容器的集合,pod 中的容器共享 namespacevolume
    • 一 pod 一 ip

    pod 的五大状态(生命周期,pod phase)

    • Pending:系统已经接受 pod 实例的创建,但其中所包含容器的一个或者多个 image 还没有创建成功。Pending 包含调度计算与通过网络创建 image,所以此 phase 的时间可能会有点长。
    • Running:Pod 已经被调度到某个 node 上,pod 包含的所有容器已经创建完成,至少有一个容器正常运行或者处于启动与重启动过程。
    • Failed:Pod 中所有容器已终止运行,至少有一个容器非正常结束,比如退出码非零,被系统强制杀死等。
    • Succeeded:Pod 中的所有容器正常终止,并且不会再次启动。
    • Unknown:无法取得 pod 状态,一般是网络问题引起。

    pod 的重启策略

    • Always:总是重启
    • Never:从不重启
    • OnFailure:失败时重启

    API

    API 资源结构

    • apiVersion:api 版本
    • kind:资源类型
    • metadata:元数据
    • spec:Spec 是让用户写入期望的状态,系统可以通过 Spec 读出用户的期望
    • status:Status 是系统写入观察到的状态,用户可以从中读出系统当前是什么状态

    API 扩展方法

    • CRD:自定义 api
    • aggregator:让用户利用全部的 Kubernetes API 实现自己的 apiserver,封装服务层

    RC, RS, Deployment

    RC

    推荐使用 RS + Deployment 来代替 RC
    是比 pod 高一级的存在
    RC 与 Pod 的关联是通过 Label 来实现的(通过 selector)
    Label 是键值对,可用于筛选资源

    RS

    大部分与 RC 相同,除了 rolling update (RS 特有)

    Deployment

    比 RS 高一级的定义微服务应用的抽象层
    Deployments 创建 RS

    PV, PVC

    PV 与 PVC 一一对应
    管理员定义 PV, 用户使用 PVC

    相关文章

      网友评论

          本文标题:Kubernetes 学习笔记

          本文链接:https://www.haomeiwen.com/subject/rdxfpctx.html