K8S基础学习

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的架构

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
  • 工具包索引图

K8S基础学习

 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。

K8S基础学习

五 参考学习

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