Kubernetes是用于基于容器的技术的全新分布式架构解决方案。它是Google开源的容器群集管理系统。Kubernetes称为K8。
Kubernetes是一个完整的分布式系统开发和支持平台。它也是一个开放的平台。现有的编程语言,编程框架和中间件没有入侵。
Kubernetes提供了全面的管理工具,可涵盖所有链接,包括开发,部署测试以及操作和维护监控。
服务滚动升级和在线扩展功能,可扩展资源自动调度机制以及多规模资源配额管理功能。
kubernetes官方文件:https://kubernetes.io/zh//
①自我修复
当节点失败时,重新启动失败的容器,替换并重新删除,以确保预期副本的副本数量;杀死未能检查健康检查的容器,并且在准备确保不会中断的在线服务之前,请勿处理用户的请求。
②弹性望远镜
使用命令,UI或基于CPU的使用以及快速扩展和收缩应用程序实例的使用,以确保应用业务高峰时的高可用性;以最低成本回收低峰和运行服务的资源。
③自动部署和回滚
K8S使用滚动更新策略更新应用程序一次更新POD,而不是同时删除所有POD。如果在更新过程中存在问题,它将进行更改,以确保升级不会影响业务。
④服务发现和负载平衡
K8S为多个容器(内部IP地址和DNS名称)提供了统一的访问入口,以及与负载平衡相关的所有容器,因此用户无需考虑容器IP问题。
⑤秘密和配置管理
管理机密数据和应用程序配置,而无需在镜子中公开敏感数据,改善敏感数据安全性。可以将一些常用的配置存储在K8s中,以供简易应用。
⑥存储或安排
安装外部存储系统,无论是来自本地存储,公共云还是网络存储,都用作集群资源的一部分,可极大地提高存储和使用的灵活性。
批量处理
提供一个时间任务,时机任务;满足批处理数据处理和分析的处理和分析。
Kubernetes群集体系结构和相关的核心组件如下图:Kubernetes群集通常包含主节点和多个节点节点。一个节点可以被视为物理或虚拟机。
主是K8S群集控制节点。每个K8S群集都需要一个主节点来负责整个集群的管理和控制。基本上,将K8的所有控制命令发送到该命令,该命令负责特定的执行过程。主机节点通常占据独立服务器,因为它太重要了。如果不可用,所有控制命令将失败。
在主节点上运行以下密钥组件:
①kube-apiserver
这是集群的统一条目。每个组件协调器提供HTTP REST的接口服务。所有对象资源的增加,删除,修改,检查和监视操作将在将其提交给APISERVER处理之前提交给ETCD存储。
②kube-controller-Manager
它是K8S中所有资源对象的自动化控制中心。它在集群中处理常规背景任务。资源对应于控制器,并且控制器管理器负责管理这些控制器。
③kube-scheduler
根据新创建的POD的调度算法,请选择一个节点节点。它可以任意部署。它可以部署在相同的节点上,也可以将其部署在不同的节点上。
④等
它是一个分布式,一致的键值存储。主要目的是共享配置和服务发现,保存群集状态数据,例如POD和服务对象信息。
除了主机外,K8S群集中的其他机器称为节点节点。节点节点是K8S群集中的工作负载节点。它将自动通过主节点传输到其他节点。
以下关键组件在每个节点节点上运行:
①kubelet
kubelet是节点节点上的代理(代理)。它与Master紧密合作,以管理操作容器的生命周期,负责与POD相对应的容器的创建,启动和停止,以实现群集管理的基本功能。
②kube-proxy
在节点节点上实现POD网络代理,实现Kubernetes服务的通信,并维护网络规则和四层负载平衡工作。
③码头引擎
Docker Engine,负责机器容器的创建和管理。
在操作过程中,可以将节点节点动态增加到K8S群集,前提是上述节点已正确安装,配置并启动了上述密钥组件。默认情况下,Kubelet将向Master注册。一旦将节点包含在集群管理范围中,Kubelet将定期向主节点报告,例如操作系统,Docker版本,CPU和机器的内存以及以前的POD.in运行,以便主人可以知道每个节点的资源使用量并实现高效且平衡的资源调度策略。当节点不报告指定时间的时间时,主人将判断为“丢失的联系人”。节点的状态被标记为尚未准备就绪。然后,主会触发“工作负载过渡”的自动过程。
1.豆荚
POD是K8中最重要,最基本的概念。POD是最小的部署单元,是一组容器。每个POD由一个特殊的根容器暂停容器和一个或多个密切相关的用户业务容器组成。
作为暂停容器的根容器,暂停容器代表其状态中整个容器组的状态。K8S分配了每个POD的唯一IP地址,称为POD IP.Multiple Business Containe Pod中共享暂停容器的IP,并共享由暂停容器安装的卷。
2.标签
标签已连接到关联对象,查询和筛选的某些资源。标签是一个键=值对,键和值由用户指定。标签可以连接到各种资源,资源对象可以定义。任何数量的标签和同一标签也可以添加到任何数量的资源中。
我们可以通过将一个或多个不同的标签绑定到指定的资源对象来实现多维资源分组管理功能,从而可以促进灵活性和方便的资源分配,调度,分配,部署等。
K8S查询和屏幕通过标签选择器的某些标签的资源对象。标签选择器具有两种方法:基于名称= label1的名称(label1,label2)。
3.复制品(RC)
Replicaset用于确保预期POD的POD副本数量。如果运行太多的POD副本,系统将停止一些POD,否则系统将自动创建一些POD。
我们很少单独使用复制品。它主要由部署的高级资源对象使用,该对象构成了一组POD创建,删除和更新的布置机制。
4.部署
部署用于部署非州应用程序。部署提供POD和Replicaset的语句更新。您只需要描述部署中所需的目标状态即可。部署将将POD和Replicaset的实际状态更改为目标状态。
5.水平豆荚自动制剂(HPA)
HPA是POD的水平自动容量,它也是K8s.hpa的资源对象。。
6.服务
服务定义了服务访问入口,并在标签选择器和POD副本之间进行“无缝连接”,定义了一组POD访问策略,以防止POD失去联系。
在创建服务时,K8S将自动分配全局虚拟IP地址,即群集IP。服务发现通过服务的群集地址和服务的ServiceIP地址来解决DNS域名映射。
7.名称空间
命名空间,名称空间主要用于实现多派的资源隔离。名称空间可以形成不同的项目,组或用户组,这些项目,组或用户组通过“分配”群集的内部资源对象进行逻辑分组,以分组为不同的名称空间。
启动K8S群集后,它将创建一个名为默认值的命名空间。如果未明确指示名称空间,则将创建的POD,RC和服务将在默认值下创建。
当我们为每个租户创建一个命名空间以实现多个租户的资源隔离,我们还可以将K8S资源配额管理结合到有限的资源中,不同租户可以占据的资源,例如CPU使用和内存使用情况。
K8S环境有两种体系结构方法。单个主集群和多主群集将首先设置一个主集群,然后扩展到多层群集。开发和测试环境可以部署单个主集群。为了确保部署多层簇需要高可用性。
①单个主集群体系结构
与多层群集体系结构相比,单个主群集体系结构无法保证群集的高可用性,因为一旦主节点降低,群集就无法管理。单个主簇主要包括一个主节点,并且多个节点工作。节点,多个ETCD数据库节点。
ETCD是K8S群集的数据库。它可以与主节点的任何地方或同一台计算机上安装。只要K8可以连接到ETCD。
②多层群集体系结构
多主簇可以确保集群的高可用性。与单个主体系结构相比,加载多个主节点需要额外的负载平衡器。节点节点从连接主变为连接LB负载Balanor。
③集群计划
为了进行测试,我使用VMware创建了多台虚拟机(可以通过克隆快速创建虚拟机),而虚拟机代表独立的服务器。
K8S群集计划如下:
建议在生产环境中至少两个主节点,每个LB的一个节点;至少两个节点节点,根据运行的容器的实际数量进行调整;ETCD数据库可以直接部署在主节点和节点的节点上。如果机器足够,则可以部署以部署单独的节点。
④服务器硬件配置建议
建议进行测试环境和生产环境服务器配置如下。本地虚拟机的配置将根据本地测试环境的配置创建虚拟机。
接下来,它将基于二进制软件包手动部署每个组件以形成K8S高可用群集。每个组件是手动部署的,并且逐步逐步熟悉每个组件的配置,组件之间的通信等,深刻理解,和掌握K8。
首先,初始化每个服务器的配置,然后是以下步骤初始化。
①关闭防火墙
②关闭Selinux
③关闭交换
④添加主机
⑤同步系统时间
每个节点都需要保持一致,因为自我签名的证书基于时间验证的有效性。如果时间不一致,则验证将不会通过。
在K8S群集的安装和配置期间,将使用各种证书来加强集群安全性。K8S提供了基于CA的双向数字证书认证方法和基于HTTP基础或代币的简单方法,其中CA证书方法是最高的。每个K8S群集具有聚类证书授予机构(CA)。集群中的组件通常使用CA验证API服务器证书,该证书已由API服务器验证以验证Kubelet客户端证书。
证书生成操作可以在主节点上执行。证书只需要创建一次。在群集中添加新节点后,您只需要将证书复制到新节点并制作一定的配置。let在K8S-Master-1节点上创建证书。有关详细的介绍,您还可以参考官方文件:从签名-CA认证分发
①K8S证书
以下是K8S每个组件所需的证书
②准备CFSSL工具
我使用CFSSL工具生成证书,然后首先下载CFSSL工具。执行以下命令依次:
我们首先发布了一组为ETCD的SSL证书,并通过以下命令创建多个目录。/K8S/ETCD/SSL用于存储ETCD self -sign证书,/k8s/etcd/cfg用于存储ETCD配置文件,/k8s/etcd/bin用于存储ETCD执行程序。
输入ETCD目录:
①创建一个CA配置文件:CA-CONFIG.JSON
执行以下命令来创建CA-Config.json
阐明:
②创建CA证书签名请求文件:CA-CSR.JSON
执行以下命令来创建CA-CSR.JSON:
阐明:
③生成CA证书和私钥
阐明:
④创建证书签名请求文件:etcd-csr.json
执行以下命令来创建ETCD-CSR.JSON:
阐明:
⑤生成ETCD的证书和私钥
阐明:
阐明:
证书已完成。稍后部署ETCD时,将使用以下证书:
[]()
ETCD群集使用主要体系结构模式(一个主)部署。集群通过选举产生领导者。因此,有必要部署许多节点(3/5/7)正常工作。ETCD使用筏一致性算法来确保每个节点的一致性。
①下载等
loat github的适当版本的etcd
疏忽:
复制ETCD到/usr/local/bin:
②创建ETCD配置文件:etcd.conf
阐明:
③创建ETCD服务:etcd.service
将etcd.conf指定为带有环境文件作为环境配置文件的环境配置文件
ETCD.Service的更多配置和说明可以通过以下命令查看:
④将ETCD目录复制到其他两个节点
⑤修改两个节点配置文件
修改K8S-Node-1节点的/k8s/etcd/cfg/etcd.conf:
修改K8S-Node-2 Node的/k8s/etcd/cfg/etcd.conf:
⑥启动ETCD服务
首先将etcd.service复制到/usr/lib/systemd/system/在三个节点下
在三个节点上启动ETCD服务
设置引导启动
查看etcd的日志
注意:如果在日志中连接异常信息,请确认所有节点防火墙均为打开2379,2380端口,还是直接关闭防火墙。
查看etcd群集状态
K8S群集中所有资源的访问和更改是通过Kube-Apiserver的REST API实现的。首先,将Kube-aperver组件部署在主节点上。
我们首先发布了APISERVER的一组SSL证书,该证书类似于ETCD SSL证书。通过以下命令创建多个目录。SSL用于存储self -visa,CFG用于存储配置文件,bin用于存储执行程序和日志存储日志文件。
输入Kubernetes目录:
①创建一个CA配置文件:CA-CONFIG.JSON
执行以下命令来创建CA-Config.json
②创建CA证书签名请求文件:CA-CSR.JSON
执行以下命令来创建CA-CSR.JSON:
③生成CA证书和私钥
④创建证书签名请求文件:kubernetes-csr.json
执行以下命令创建Kubernetes-csr.json:
阐明:
⑤为Kubernetes生成证书和私钥
①下载二进制包
通过Kubernetes github安装和安装的二进制软件包。我在此处使用v1.16.2版本。服务器二进制软件包已包含主和节点上的各个组件。下载服务器二进制软件包。
考虑到网络问题,您可以下载从百度Web磁盘准备的二进制软件包:链接:下载离线安装软件包。
将下载的kubernetes-v1.16.2-server-linux-amd64.tar.gz上传到/usr/local/local/src and Decompress:
首先将部署在主节点上的组件复制到/k8s/kubernetes/bin目录:
②创建节点令牌文件:token.csv
在主APISERVER启用TLS认证之后,节点节点Kubelet组件希望加入群集,并且必须使用CA发出的有效证书与Apiserver通信。当节点节点很多时,签署证书是非常麻烦的事情。因此,Kubelet将自动适用于低授权用户的Apiserver,并且由Apiserver动态签名Kubelet证书。因此,首先为Apiserver生成一个令牌文件,并且在令牌后将在节点中使用。
随机字符串的令牌可以使用以下命令来生成令牌:apiserver的令牌配置必须与节点节点bootstrap.kubeconfig配置一致。
创建Token.csv,格式:令牌,用户,UID,用户组
③创建kube-apiserver配置文件:kube-apiserver.conf
Kube-aperver有很多配置项目。您可以参考官方文档以查看每个配置项目的目的:kube-aperver
注意:坑后面没有空间,没有额外的更改,否则会失败。
关键配置描述:
④创建Apiserver服务:Kube-Apiserver.Service
⑤启动Kube-abiserver组件
启动组件
检查起始状态
查看启动日志
⑥将kubelet-bootstrap用户绑定到系统群集的角色,然后便于节点使用令牌请求证书很方便
①创建kube-controller-manager配置文件:kube-controller-manager.conf
有关详细配置,请参阅官方文件:Kube-Controller-Manager
关键配置描述:
②创建kube-controller-manager服务:kube-controller-经理。服务
③启动kube-controller-manager组件
启动组件
检查起始状态
查看启动日志
①创建Kube-Scheduler配置文件:kube-scheduler.conf
②创建Kube-Scheduler服务:Kube-Scheduler.Service
③启动Kube-Scheduler组件
启动组件
查看启动状态
查看启动日志
①查看组件状态
CENTOS安装参考官方文件:https://docs.docker.com/install/linux/docker-ce/centos/
①卸载旧版本
②安装依赖套件
③安装Docker软件包源
④安装Docker CE
⑤开始Docker服务
⑥设置引导启动
⑦验证安装是否成功
[]()
①证书签名请求文件创建节点节点:kube-proxy-csr.json
首先,在K8S-Master-1节点上,首先创建一个证书,要通过已发行的CA证书签发的CA证书使用。首先创建证书签名请求文件:Kube-Proxy-csr.json:
②生成Kube-Proxy的证书和私钥
③节点节点创建工作目录
在K8S-Node-1节点上创建K8S目录
④将K8S-Master-1节点的文件复制到节点节点
复制kubelet,kube-proxy到节点节点:
将证书复制到K8S-Node-1节点:
①创建请求证书的配置文件:bootstrap.kubeconfig
Bootstrap.kubeconfig将用于从Apiserver请求证书。Apiserver将验证令牌,证书有效。
阐明:
②创建Kubelet配置文件:kubelet-config.yml
为了安全性,Kubelet禁止匿名访问,必须授权授权Apiserver通过Kubelet-Config.yml访问Kubelet。
阐明:
③创建Kubelet服务配置文件:kubelet.conf
阐明:
④创建Kubelet服务:Kubelet.Service
⑤开始kubelet
靴子:
查看开始日志:
⑥主授权节点
Kubelet启动后,它将要求Apiserver在不加入集群的情况下请求证书。您需要在K8S-Master-1上手动授权节点。
查看是否有新客户请求从以下命令中发布证书:
向客户发出证书,允许客户加入集群:
⑦授权
检查是否将节点添加到群集中(此时节点仍处于意外状态,因为未安装CNI组件):)::):
签发证书后,您可以看到主人根据/k8s/kubenetes/ssl颁发的证书:
在/k8s/kubenetes/cfg中,您可以看到自动kubelet.kubeconfig配置文件:
[]()
①创建kube-proxy配置文件:kube-proxy.kubeconfig
②创建kube-proxy配置文件:kube-proxy-config.yml
阐明:
③创建kube-proxy配置文件:kube-proxy.conf
④创建Kube-Proxy服务:Kube-Proxy.Service
⑤开始Kube-Proxy
开始服务:
靴子:
查看开始日志:
其他节点节点的部署基于与上述过程相同的过程。只需将配置文件中的K8S-Node-1更改为K8S-Node-2。
[]()
①K8S群集网络
Kubernetes项目未使用Docker网络模型。Kubernetes而不是通过CNI接口进行DOCKER0,以维护单独的网络桥梁。默认情况下,该桥称为CNI0。
CNI(容器网络接口)是CNCF拥有的项目。它由用于配置Linux容器的网络接口的一组网络接口组成,还包含一些插件-ins.cni仅在容器创建时关心网络分布,并在删除容器时发布网络资源。
法兰纳尔是CNI的插件,可以被视为CNI接口的实现。Flannel是为Kubernetes设计的网络规划服务。它的功能是允许群集中不同节点主机创建的Docker容器具有整个群集的唯一虚拟IP地址,并允许不同节点上的容器通过内部网络IPCommunication直接通过内部网络IP直接通过内部网络IPCommunication。
法兰绒网络体系结构,请参考:法兰绒网络体系结构
②CNI CNI工作目录
通过传递到kubelet-network-plugin = cni命令行options。要设置每个POD网络的文件。CNI配置文件必须与CNI法规匹配,并且必须在指定的CNI-BIN-DIR指定的目录中存在任何必需的CNI插件引用(默认为/opt/cni,/垃圾桶)。
由于在部署了Kubelet服务,因此cni-conf-dir =/etc/cni/net.d,-cni-bin-dir =/opt/opt/cni/bindirectory:
③放置CNI插头-in
您可以从GitHub下载CNI插头-in:下载CNI插头。
解压缩至/opt/cni/bin:
④部署法兰绒
您可以通过此地址下载法兰绒配置文件:下载kube-flannel.yml
请注意,以下配置:网络的地址必须与kube-controller-manager.conf中的cluster-cidr = 10.244.0.0/16一致。
法兰绒部署在K8S-Master-1节点上:
⑤检查部署状态
法兰绒将在节点上启动法兰绒的吊舱。您可以检查吊舱的状态,以查看法兰绒是否成功启动:
法兰绒成功部署后,您可以查看节点是否准备就绪:
查看节点上的网络配置,您可以看到法兰绒的虚拟网卡。1。该网卡用于接收POD流量并将其转发。
⑥豆荚的测试创建
例如,创建一个nginx服务:
查看POD状态:
您可以在相应的节点上看到部署的容器:
成功创建容器后,请检查节点上的网络配置,然后还有另一个CNI0虚拟网卡。CNI0用于POD本地通信。
曝光端口和访问nginx:
建议将服务名称用作Kubernetes群集中的服务访问地址,因此需要Kubernetes群集的DNS服务来分析从服务名称分析到群集IP。这是Kubernetes的基于DNS的服务发现功能。
①部署核心
下载Coredns配置文件:coredns.yaml
请注意,以下群集必须与kube-config.yaml中的clusterDN一致
部署核心:
②验证核心
创建BusyBox服务:
验证安装是否成功:
K8S提供了仪表板的网络版本。用户可以使用仪表板来部署基于容器的应用程序和监视应用程序,以创建和修改各种K8S资源,例如部署,作业,Daemonset等。USERS可以扩展/下部部署,执行滚动更新,重新启动POD或部署新的新的wizard.dashboard的应用程序可以在集群中显示各种资源的状态和日志信息。Kubernetes仪表板提供了Kubectl的大部分功能。
通过此地址下载仪表板YAML文件:kubernetes-dashboard.yaml
下载后,您需要更新以下内容:通过节点曝光端口访问仪表板
部署仪表板:
检查部署是否成功:
通过https访问仪表板:
仪表板支持两种身份验证方法:kubeconfig和令牌。为了简化配置,我们默认情况下通过配置文件将管理权放在仪表板上。
授权:
获取登录令牌:
通过令牌登录到仪表板,您可以查看群集信息:
①将K8S-Master-1上的相关文件复制到K8S-MASTER-2
创建K8S工作目录:
复制K8S配置文件,执行文件,证书:
复制ETCD证书:
复制K8S服务的服务文件:
②修改K8S-Master-2上的配置文件2
修改kube-apiserver.conf,将IP修改为IP
③启动K8S-Master-2组件
重载配置:
开始Kube-apiserver:
启动Kube-Controller-Manager:
部署Kube-Scheduler:
④验证
为了确保K8S Master的高可用性,将使用K8S-LB-MASTER和K8S-LB-BACKUP的两台机器来部署负载均衡。在K8S-LB-MASTER和K8S-LB-BACKUP的两台机器上。
①安装海湾合作委员会和其他环境,某些软件安装需要这些基本环境
②安装nginx
③apiserver负载配置
添加以下配置:
④启动nginx
为了确保NGINX的高可用性,还需要部署KeepAlive。Keepalive主要负责NGINX的健康检查和故障转移。
①分别在K8S-LB-MASTER和K8S-LB-BACKUP的两台机器上安装Keepalive
②大师开始保存
修改K8S-LB-Master keepalived配置文件
配置说明:
添加check_nginx.sh脚本以确定通过此脚本是否正常:
增加执行权限:
开始保存:
③备份开始保存
修改K8S-lb-backup keepalived配置文件
添加check_nginx.sh脚本:
增加执行权限:
开始保存:
④验证负载平衡
保存已将VIP附加到主人所在的网卡上
没有备份节点
关闭K8S-LB-Master上的Nginx,您可以看到VIP消失了
您可以看到它已漂移到节点。如果主上重新启动了主的NGNIX,VIP将再次漂移到主节点。
您仍然可以访问虚拟IP
4.节点节点连接vip
①在节点节点的配置文件中修改K8S-MASTER的IP作为VIP
②重新启动kubelet和kube-proxy
③访问VIP调用节点节点上的apiserver验证
授权的令牌是以前的token.csv。
此时,通过二进制方法安装K8S群集已完成!
文章来源:https://www.cnblogs.com/chiangchou/p/k8s -html#_label6_0
原始:https://juejin.cn/post/710157359730876430