k8s概述
Kubernetes介绍
- Kubernetes和docker的简史精简版
- 2013年docker开源,IT界的福音,备受关注
- 2014.06 Google有15年的容器编排Borg(博格,商业产品)使用经验,并将K8S(基于borg系统使用go语言研发)底层基于docker作为容器运行时开源
- 2014.12 docker inc公司推出了K8S竞品,docker swarm
- Google kubernets vs docker inc swarm 【3年对抗赛】 2017年年底结束,k8s完胜。(k8s 72% vs swarm %13)
- 2014 coreOS 公司推出了rkt容器管理工具并站队K8S
- 2015 Google公司将K8S开源并贡献给了CNCF组织,成为该组织的第一个毕业项目。
- 2015 docker inc公司推出了OCI提议,主要针对容器运行时和镜像规范,并开源了runc。
- 2016 Google推出了CRI规范,目前市面上没有任何产品可以满足,于是就开源了docker-shim组件(会调用docker接口并满足cri规范)支持CRI接口;
- 2016,RedHat公司基于cri-o(既符合CRI也符合OCI规范)开发框架让rkt容器管理工具支持CRI接口;
- 2017,docker inc公司将containerd从docker engine剥离,并将containerd开源给了CNCF组织,
- containerd底层调用runc,因此该产品是支持OCI提议的;
- containerd组件本身不支持CRI,因此社区大佬们(包含国内外)集体开发cri-containerd组件,最后合并到containerd项目
- 2018 年国内开始流程K8S,各大云厂商已经开始大规模使用K8S集群,
- 阿里云的ACK的SAAS产品
- 腾讯云的TKE的SAAS产品
- 华为云的CCE的SAAS产品
- ucloud的UK8S的SAAS产品
- 亚马逊的Amazon EKS的SAAS产品
- 京东云,百度云等
- 2018年,coreOS公司被Redhat以2.5亿美元收购。
- 2018年10月29日,IBM宣布以340亿美元的价格收购Red Hat。
- 曾经一度,Docker方面的炒作非常猛。
- Docker从Greylock Partners、Insight Partners和红杉资本等大牌投资者处筹资超过2.7亿美元,
- 2018年估值达到最高峰:13.2亿美元。
- 2019年2,Docker一分为二,将企业业务出售给了云咨询公司Mirantis(对于OpenStack代码贡献量非常大,能排到前3)。
- 2020年,Google宣布K8S将在1.22+版本后弃用docker容器运行时,当时年底发布的最新版是1.20.X;
- 2020年3月11日公布的,当时Docker宣布被云计算软件巨头微软(Microsoft)以 6.7亿美元收购。
- 2021年底 K8S 1.23的RC版本发布;
- 2022年初,K8S 1.24横空出世,直接将docker-shim组件移除,而是使用containerd作为容器运行时;
- 2023年初,K8S 1.27.X发布;
- 2023年3月,K8S 1.23.17 发布了最后一个支持docker-shim的版本。
- docker和Mirantis公司作为合作伙伴,将维护该项目,运维小伙伴如果需要在K8S 1.24及以后的版本使用docker的话,需要单独cri-docker组件。
- 2024年初,K8S 1.30.x版本发布
官方文档:
https://kubernetes.io/zh-cn/
为什么要使用K8S
- 1.它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。
- 2.Google 每周运行数十亿个容器,Kubernetes 基于与之相同的原则来设计,能够在不扩张运维团队的情况下进行规模扩展。
- 3.无论是本地测试,还是跨国公司,Kubernetes 的灵活性都能让你在应对复杂系统时得心应手。
- 4.Kubernetes是开源系统,可以自由地部署在企业内部,私有云、混合云或公有云,让您轻松地做出合适的选择。
kubernetes组件
1 | 1.master 节点 |
1.Scheduler:
kube-scheduler根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
2.Controller Manager:
Kube-controller-manager,处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
3.Cloud Controller Manager:
用在云平台上的Kube-controller-manager组件。如果我们直接在物理机上部署的话,可以不使用该组件。
4.API Server:
kube-apiserver,集群的统一入口,各组件协调者,以RESTFUL API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给etcd存储。
5.Etcd:
分布式键值存储系统,用于保存集群状态元数据信息,比如Pod,Service等对象信息。这个数据库是可以单独拿出来部署,只需要API server可以连接到该分布式数据库集群即可。
6.kubelet:
可以理解为Master在工作节点上的Agent,管理本机运行容器的生命周期,比如创建容器,Pod挂载数据卷,下载secret,获取容器的节点状态等工作。kubelet将每一个Pod转换成一组容器。
7.kube-proxy:
在工作节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。换句话说,就是用于负责Pod网络路由,用于对外提供访问的实现。可以找到你关心的项目所在的pod节点。
8.POD:
用户划分容器的最小单位,一个POD可以存在多个容器。
docker/rocket(rkt,已停止支持):
容器引擎,用于运行容器。
参考链接:
https://kubernetes.io/zh/docs/concepts/overview/components/
kubernetes三种网络
Kubernetes的三种网段说明
K8S各组件通信的网络
使用时物理网卡,默认网段: 10.0.0.0/24。跨节点容器实现通信的网段:
用户可以自定义,学习环境推荐: 10.100.0.0/16。但是在自定义网段时,要考虑将来能够分片的IP地址数量,”10.100.0.0/16”最多有65536个IP地址。
如果将来容器运行的数量超过该规模时,应该考虑将网段地址调大,比如”10.0.0.0/8”。
Service网段:
为容器提供负载均衡和服务发现功能。也是需要一个独立的网段,比如”10.200.0.0/16”最多有65536个IP地址。同理,如果规模较大时,应该考虑网段分配的问题。
kubernetes的部署方式
1.kubeadm部署 简单,适合新手
2.二进制部署 繁琐,但是可以自定义配置信息
==这里使用kubeadm部署==
二进制部署和kubeadm部署的区别?
K8S常见的部署方式对比及CNCF项目:
官方提供
二进制部署K8S集群
手动部署K8S各个组件,配置文件,启动脚本及证书生成,kubeconfig文件。
对新手不友好,尤其是证书管理。对K8S玩熟练的小伙伴需要2小时起步。kubeadm部署K8S集群
是官方提供的一种快速部署K8S各组件的搭建,如果镜像准备就绪的情况下,基于容器的方式部署,新手估计就1-2分钟部署完成。需要提前安装kubelet,docker或者containerd,kubeadm组件。
第三方提供的部署方式:
国内公司:- 青云科技: kubesphere 底层基于kubeadm快速部署K8S,提供了丰富的图形化管理界面。 - kuboard 底层基于kubeadm快速部署K8S,提供了丰富的图形化管理界面。 - kubeasz 底层基于二进制方式部署,结合ansible的playbook实现的快速部署管理K8S集群。
国外的产品:
- rancher:
和国内的kubesphere很相似,也是K8S发行商,提供了丰富的图形化管理界面。
还基于K8S研发出来了K3S,号称轻量级的K8S。
云厂商:
- 阿里云: ACK
- 腾讯云: TKE
- 华为云: CCE
- 京东云: Kubernetes
- ....
其他部署方式:
- minikube:
适合在windows部署K8S,适合开发环境搭建的使用。不建议生产环境部署。
- kind:
可以部署多套K8S环境,轻量级的命令行管理工具。、
- yum:
不推荐,版本支持较低,默认是1.5.2。
CNCF技术蓝图:https://landscape.cncf.io/
:dango:K8S的集群配置环境准备
推荐阅读:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- 本机示例环境
1 | 环境准备: |
- Kubernetes的版本选择
1 | 选择的版本是K8S 1.23.17版本,该版本的第一个rc版本是2021年初,最后一个版本是23年年初结束 |