目录
目录
(五)在Master上批准新Node kubelet证书申请
一、Kubernetes和相关组件介绍
(一)容器介绍(docker)
1、容器和虚拟机对比
虚拟机:传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
容器:新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
2、容器特点
● 快速创建/部署应用:与VM虚拟机相比,容器镜像的创建更加容易。
● 持续开发、集成和部署:提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚(由于镜像不可变性)。
● 开发和运行相分离:在build或者release阶段创建容器镜像,使得应用和基础设施解耦。
● 开发,测试和生产环境一致性:在本地或外网(生产环境)运行的一致性。
● 云平台或其他操作系统:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何环境中运行。
● Loosely coupled,分布式,弹性,微服务化:应用程序分为更小的、独立的部件,可以动态部署和管理。
● 资源隔离
● 资源利用:更高效
3、docker
● Docker是最主流的容器运行时,即容器引擎。containerd是容器技术标准化之后的产物,为了能够兼容OCI 标准,独立负责容器运行时和生命周期(如创建、启动、停止、中止、信号处理、删除等),从daemon中剥离,向docker engine提供运行容器的API,通过grpc通信;每创建一个容器,containerd都会创建一个shim进程,每个shim会调用runc(前身是libcontainer)进行实际的容器运行时管理,比如创建namespace的隔离
● 涉及docker的关键概念有镜像,即容器应用发布件,通过dockerfile描述,docker’会根据dockerfile构建镜像;有镜像仓库,及镜像存放的地方。容器,及容器应用运行的环境,通过容器的几个关键技术进行隔离
● Docker所应用的几个关键技术都不是docker发明的,而是linux早就成熟的技术,docker将这几个技术整合,形成了革命性的成果。Namespace负责运行环境的隔离,即每个容器都是一个独立进程,通过namespace技术进行隔离,每个容器互相不可见,包括进程隔离、网络隔离、文件隔离;Cgroup是负责运行资源的隔离或者说独占,可以为每个容器指定资源数量,互相不侵占;Union filesystem是解决应用运行的小型化统一标准,容器镜像提供了容器运行的基础,但容器镜像并不等于容器。容器镜像是通过存储驱动技术管理的一系列分层的只读文件,而当容器镜像运行为容器时,就会在镜像的最上层添加一个可写的层,也就是容器层,所有对于运行时容器的修改其实都是对这个容器读写层的修改,所有对容器的变化,比如写新的文件,修改已有文件和删除文件,都只会作用在这个容器层之中
(二)Kubernetes介绍
1、Kubernetes是什么
● Kubernetes 这个单词来自于希腊语,含义是舵手或领航员。Kubernetes简称k8s,因为k到s有8个字母
● Kubernetes是谷歌贡献给开源社区的,是谷歌根据自己内部容器borg(布谷鸟),在去除自己业务属性后开源的一个产品。
● K8s的标准架构中是以集群为整体的,一个集群就是一套完整的k8s产品,大多数企业会在其上封装管理面进行集群级别的管理
● 集群中会有一个主控节点master,负责管理整个容器集群,一般由于其中使用的etcd,高可用场景下master的数量至少是3个。
● 集群中会有很多的业务节点node,负责运行容器应用。Master会在每个node上安装 kubelet作为其管理node的agent。
● 用户使用k8s时通过master上的apiserver,调用声明式的接口里定义所需要的应用、服务等各类资源对象,master的控制器和调度器会根据用户的定义,在node中进行创建,并且时刻监控其状态,保证一直符合用户的定义
● 在node上容器应用,通过kubeproxy提供统一访问能力
2、Kubernetes特点
● 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
● 可扩展: 模块化, 插件化, 可挂载, 可组合
● 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
3、Kubernetes组件介绍
Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,以及包括客户端命令行工具kubectl和其它附加项。以下介绍一下Kubernetes的核心组件
(1)Master node组件
● kube-apiserver:
kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行
● ETCD:
etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。etcd不属于Kubernetes,但是Kubernetes依赖于etcd
● kube-controller-manager:
kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。
这些控制器包括:
节点(Node)控制器。
副本(Replication)控制器:负责维护系统中每个副本中的pod。
端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。
Service Account和Token控制器:为新的Namespace创建默认帐户访问API Token。
● kube-scheduler:
kube-scheduler 监视新创建没有分配到Node的Pod,为Pod选择一个Node。
(2)Work node组件
● kubelet:
kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:
安装Pod所需的volume。
下载Pod的Secrets。
Pod中运行的 docker(或experimentally,rkt)容器。
定期执行容器健康检查。
● kube-proxy:
kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。
● docker:
docker用于运行容器。
(3)addons插件
● Dashboard:
Dashboard提供了集群的GUI界面
● coreNDS:
CoreDNS用于集群内部Service名称解析
二、部署环境规划
我采用的是华为云服务器,推荐配置2U、4G、40GB硬盘、Centos8.2系统
主机名/角色 |
IP |
组件 |
kube-master01 |
192.168.0.10 |
kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy,docker,etcd,nginx,keepalived |
kube-master02 |
192.168.0.11 |
kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy,docker,nginx,keepalived |