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
2
3
4
5
6
7
8
9
10
1.master 节点
etcd: 整个集群的核心,负责存储K8S请求数据所有的数据。保存了整个集群的状态
Controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
Scheduler: 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
API Server: 提供了资源操作的唯一入口,无论是客户端还是内部组件都必须通过它来访问
2.node节点
kubelet: 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
kube-proxy: 负责为Service提供cluster内部的服务发现和负载均衡;
pod: 是K8S中最小可部署的计算单元,可包含一个或多个容器,这些容器共享网络和存储等资源。
Container Runtime 容器运行时,负责运行容器,如Docker、containerd、CRI-O等。

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
2
3
4
5
6
7
8
环境准备:
硬件配置: 2core 4GB
磁盘: 50GB+
操作系统: Ubuntu 22.04.04 LTS
IP和主机名:
10.0.0.231 master231
10.0.0.232 worker232
10.0.0.233 worker233
  • Kubernetes的版本选择
1
选择的版本是K8S 1.23.17版本,该版本的第一个rc版本是2021年初,最后一个版本是23年年初结束