• K8S基础学习


    一.什么是K8S 

    k8s全称kubernetes。K8s 是 Google 在 2014 年开源出来的用于解决生产环境中大规模容器编排的组件。换言之,k8s是为容器服务而生的一个可移植容器的编排管理工具。

    K8s三大特性:第一,K8s 自带便捷性,包括故障自愈、容器编排、服务发现,使应用更便捷。第二,K8s 在数据库、Serverless、边缘计算、微服务等多种技术领域的应用,扩展了其使用场景的边界。第三,K8s 具备的稳定性与安全性为其生产应用提供了强有力的支持。除此之外,周边生态的持续完善也为 K8s 迎来长足的发展奠定了不可磨灭的基础。

    二.K8S的作用和架构

    首先,从容器技术谈起,在容器技术之前,大大家用虚拟机比较多,比如vmware和openstack,我们可以使用虚拟机模拟出多台子电脑(Linux),子电脑之间是相互隔离的,但是虚拟机对于开发和运维人员而言,存在启动慢,占用空间大,不易迁移的缺点。接着,容器化技术应运而生,它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境即可,而且启动速度很快,除了运行其中应用以外,基本不消耗额外的系统资源。Docker是应用最为广泛的容器技术,通过打包镜像,启动容器来创建一个服务。但是随着应用越来越复杂,容器的数量也越来越多,由此衍生了管理运维容器的问题,而且随着云计算的发展,云端最大的挑战,容器在漂移。在此业务驱动下,k8s问世,提出了一套全新的基于容器技术的分布式架构领先方案,在整个容器技术领域的发展是一个重大突破与创新。

    k8s可以使我们应用的部署和运维更加方便。具体来说,主要包括以下几点:

    1. 服务发现与调度
    2. 负载均衡
    3. 服务自愈
    4. 服务弹性扩容
    5. 横向扩容
    6. 存储卷挂载

    k8s的架构

    部分概念

    Pod

    1.最小部署单位
    2.一组容器的集合
    3.在一个Pod的容器共享网络命名空间(pod容器之间的网络是共享的,例如A B俩个容器属于一个pod,A上开了80端口,B上的80端口也是开通的)
    4.Pod是短暂的(应用更新或者发版后Pod就会销毁)

    Controllers 

    1.ReplicaSet: 确保预期的Pod副本数量
    2.Deployment: 无状态应用部署   (Pod故障触发迁移后,Pod中的应用可以照常使用,不需要考虑存储、网络等问题,例如web应用)
    3.StatefulSet:    有状态应用部署  (Pod故障触发迁移后,需要考虑网络和存储是否可以正常调用,有状态部署会对网络和存储进行标识,例如mysql主从和zk集群) 
    4.DaemonSet: 确保所有Node运行同一个Pod
    5.Job: 一次性任务
    6.Cronjob: 定时任务

    Service

    作用:将请求转发到相应的一组Pod和实现一定的负载功能,暴露应用
    1.防止Pod失联 2.定义一组Pod的访问策略

    Label

    标签,附加到某个资源上,用于关联对象、查询和筛选

    Namespace

    命名空间,将对象逻辑上隔离

    三.部署

    k8s部署方式

    https://www.cnblogs.com/python-cat/p/12515436.html

    k8s环境部署(一)

    https://www.cnblogs.com/python-cat/p/10831419.html

    四.使用注意事项

     4.1 优化方法 

    • Utility: CPU/内存/磁盘/网络利用率
    • Saturation: 各种队列长度/饱和度
    • Error: 协议栈错误、应用层错误日志

     4.2 指标收集

    • 系统指标: top/sysstat 包等(debian)
    • 应用指标: prometheus + grafana
    • 工具包索引图

     4.3 流控优化

    默认流控重试时间1S。其机理是,重启时所有client需要重新list&watch导致并发请求量过高(包含bootstrap controller),超过流控,超过流控之后,返回响应码 429,同时在响应头里添加 RetryAfter 告诉 client 1s 之后再试,造成 APIServer 长时间过载。优化方式:(1).多级流控:在读写流控的基础上,根 据 UserAgent、Resource、Verb 进 行细粒度流控。例如: 通过 UserAgent,限制 kubelet,优先允许 Master 组件初始 化(APIServer Bootstrap Controller、其他Controller 和 Scheduler 等)。(2)拥塞控制:静态 Retry-After 改为动 态值,根据系统当前繁忙程度调节1到 8s(token bucket).其算法为:初始化时间窗口为1s、容量210 的 bucket,每次被流控尝试拿Token。可用量 >1/2,返回 1s;可用量 > ¼, 返回 2s;可用量 > 1/8, 返回 4s;可用量不足或者不可用, 返回 8s。

    五 参考学习

    1.什么是K8S

    https://zhuanlan.zhihu.com/p/103124918

    2.网易云kubernetes性能优化实践

    https://www.itdks.com/Course/detail?id=3513

    3.https://www.cnblogs.com/python-cat/category/1459874.html

  • 相关阅读:
    投行风云:FO的酸甜苦辣【转】
    周末排毒
    LeetCode | Single Number II【转】
    Adding supplementary tables and figures in LaTeX【转】
    Algorithm | Tree traversal
    Leetcode | Linked List Cycle I && II
    Network | UDP checksum
    Ubuntu下将现有的文件打包成deb包
    Base64编码加密
    requestAnimationFrame 的原理与优势
  • 原文地址:https://www.cnblogs.com/xuliuzai/p/14933644.html
Copyright © 2020-2023  润新知