参考:
K8s介绍:https://www.cnblogs.com/chiangchou/p/k8s-1.html
K8s安装:https://www.jianshu.com/p/a6abdc6f76e1

K8s是什么

毫无疑问,K8s是目前云原生时代最优秀、最适合用来做容器技术的分布式架构解决方案,可以说K8s就是为了云原生时代大规模的容器编排而生的,大大提高了资源的利用效率。

K8s来自 Google 云平台的开源容器集群管理系统,前身为Google内部使用的Brog,在Google内部已经有十几年的应用历史,非常成熟及高效。

K8s全名为Kubernetes,Kubernetes在希腊语中意思是船长或领航员,这也恰好与它在容器集群管理中的作用吻合,即作为装载了集装箱(Container)的众多货船的指挥者,负担着全局调度和运行监控的职责。

K8s主要特性

① 自我修复

在节点故障时,重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理用户的请求,确保线上服务不中断。

② 弹性伸缩

使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

③ 自动部署和回滚

K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

④ 服务发现和负载均衡

K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。

⑤ 机密和配置管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。

⑥ 存储编排

挂载外部存储系统,无论是来自本地存储,公有云,还是网络存储,都作为集群资源的一部分使用,极大提高存储使用灵活性。

⑦ 批处理

提供一次性任务,定时任务;满足批量数据处理和分析的场景。

K8s架构图

下面是K8s的架构图以及所包含的主要组件:
在这里插入图片描述

一个 Kubernetes 集群一般包含一个 Master 节点(也可以包含多个 Master 节点)和多个 Node 节点,一个节点可以看成是一台物理机或虚拟机。

K8s组件

Master

Master是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,Master 节点通常会占据一个独立的服务器,因为它太重要了,如果它不可用,那么所有的控制命令都将失效,Master节点上运行着以下关键组件:

  • kube-apiserver:是集群控制的统一入口,以 HTTP Rest 提供接口服务,所有对K8s集群的操作都是通过ApiServer来调用。
  • kube-controller-manager:k8s中所有资源对象(pod、node、server等)的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等,资源控制的最小单位为Pod。
  • kube-scheduler:根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
  • etcd:是一个分布式的,一致的 key-value 存储,主要用途是共享配置和服务发现,保存集群状态数据,比如 Pod、Service 等对象信息。

Node

除了 Master,K8S 集群中的其它机器被称为 Node 节点,Node 节点是 K8S 集群中的工作负载节点,每个 Node 都会被 Master 分配一些工作负载,当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其它节点上去。,Node节点上运行着以下关键组件:

  • kubelet:是 Master 在 Node 节点上的 Agent(代理),负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能。
  • kube-proxy:在 Node 节点上实现 Pod 网络代理,实现 Kubernetes Service 的通信,维护网络规则和四层负载均衡工作。
  • docker(Docker Engine):Docker引擎,负责本机的容器创建和管理

Node 节点可以在运行期间动态增加到 K8S 集群中,前提是这个节点上已经正确安装、配置和启动了上述关键组件。在默认情况下 kubelet 会向 Master 注册自己,一旦 Node 被纳入集群管理范围,kubelet 就会定时向 Master 节点汇报自身的情况,例如操作系统、Docker 版本、机器的 CPU 和内存情况,以及之前有哪些 Pod 在运行等,这样 Master 可以获知每个 Node 的资源使用情况,并实现高效均衡的资源调度策略。而某个 Node 超过指定时间不上报信息时,会被 Master 判定为“失联”,Node 的状态被标记为不可用(Not Ready),随后 Master 会触发“工作负载大转移”的自动流程。

核心概念

  • Master: 集群控制节点,每个集群至少要有一个控制节点负责集群的管控。
  • Node: 工作负载节点,由 Master 分配容器到这些 Node 工作节点上,然后Node节点上的docker负责容器的运行
  • Pod:K8s最小控制单元,容器都是运行在Pod中,一个Pod中可以有多个容器运行。
  • Controller: 控制器,通过它实现对Pod的管理,比如启动Pod、停止Pod、伸缩Pod的数量等等。
  • Service: Pod对外服务的统一入口,下面可以维护同一类的多个Pod。
  • Label: 标签,用于对Pod进行分类,同一类Pod拥有相同的标签。
  • NameSpace:命名空间,用来隔离Pod的运行环境。

K8s安装

我这边使用的是M1芯片的Mac,装的是Docker Desktop,下面的安装方法主要也是基于M1的Docker Deskto进行K8s的安装,其他安装方法可以自行搜索一下,我自己的安装方法也是在网上根据教程一步步来的= =!

前置条件,必须安装好Docker Desktop,并保证版本较新,我这边的版本是:
在这里插入图片描述

第一步 克隆详细

git clone https://github.com/gotok8s/k8s-docker-desktop-for-mac.git

第二步 进入 k8s-docker-desktop-for-mac项目,拉取镜像

./load_images.sh

执行完上面两步后,Docker Desktop就已经准备好安装K8s所需要的所有镜像了。

第三步 打开docker 配置页面,enable k8s。需要等k8s start一会

在这里插入图片描述

如果安装成功,则会显示kubernetes running,并且在Docker Desktop界面可以看到K8s running的标志。
在这里插入图片描述

然后我们就可以在本机通过命令验证一下K8s是否安装成功

验证
$ kubectl cluster-info
$ kubectl get nodes
$ kubectl describe node
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐