




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1容器云平台的集群高可用安装部署Kubernetes(简称k8s)凭借着其优良的架构,灵活的扩展能力,丰富的应用编排模型,成为了容器编排领域的事实标准,也是各大企业进行容器云平台建设的首选技术。无论是在公有云环境使用还是在私有云环境使用,k8s集群的生产高可用是一个不能回避的话题。本章节阐述了k8s容器云平台的高可用部署方式,其核心思想是让k8smaster节点中的各类组件(etcd/kube-apiserver/kube-controller-man-ager/kube-scheduler)具备高可用性,不存在组件的单点故障。学习本章节,学员可以掌握k8s环境下如何让各组件组成集群以达到高可用的效果,为k8s在生产的高可用部署实践提供参考和指导。1.1k8s集群高可用部署说明1.1.1环境准备要实现k8s集群的高可用,集群至少需要3节点。本章节以下面的3节点为例进行部署说明。主机名:k8s-1;IP:9主机名:k8s-2;IP:0主机名:k8s-3;IP:13节点均为CentOS7操作系统,建议升级内核到4.4以上,因为CentOS7自带的3.10内核存在一些bug,会导致Docker,Kubernetes运行不稳定,特别是高版本的Docker、Kubernetes(参考/kubernetes/kubernetes/issues/61937)。节点上需要做如下配置。ssh免密登录,将k8s-1的ssh公钥分发到另外两个节点,ssh-copy-idroot@k8s-2各节点上关闭防火墙,systemctlstopfirewalld&&systemctldisablefirewalld各节点上关闭SELinux,setenforce0&&sed-i's/^SELINUX=.*/SELINUX=disabled/'/etc/seli-nux/config1.1.2部署策略及高可用原理以下部署的Kubernetes版本为1.14.2,etcd的版本为3.3.13。Kubernetes的节点角色分为master和node两种,node节点默认已经有高可用了,因为pod会分配到各个node上,如果有node挂了,k8s就会将node置为NotReady,随后到其他健康的node上新建pod,保证副本数为预期状态。因此要实现Kubernetes集群的高可用,实际上是要实现master节点的高可用。master节点上运行了如下组件:etcdkube-apiserverkube-schedulerkube-controller-manager其中,etcd采用以上3节点实现高可用,etcd会保证所有的节点都会保存数据,并保证数据的一致性和正确性,在正常运行的状态下,集群中会有一个leader,其余的节点都是followers。通常情况下,如果是follower节点宕机,如果剩余可用节点数量超过半数,不影响集群正常工作。如果是leader节点宕机,那么follower就收不到心跳而超时,发起竞选获得投票,成为新的leader,继续为集群提供服务。kube-apiserver、kube-scheduler和kube-controller-manager三个组件均以多实例模式运行。kube-apiserver是无状态的,一般可以采用以下两种方式实现高可用:(1)通过配置haproxy或nginx等负载均衡器进行代理访问kube-apiserver,从而保证kube-apiserver服务的高可用性,haproxy或nginx等负载均衡器自身使用keepalived绑定一个vip实现高可用;(2)在每个master和node节点配置一个nginx,后端对接多个kube-apiserver实例,nginx对多个kube-apiserver实例做健康检查和负载均衡,kubelet、kube-proxy、controller-manager、scheduler组件通过本地的nginx访问kube-apiserver,从而实现kube-apiserver的高可用。本章节以第二种方式为例来介绍k8s集群的高可用部署。kube-scheduler和kube-controller-manager是有状态的服务,多个实例会通过向apiserver中的endpoint加锁的方式来选举产生一个leader实例,其它实例处于阻塞模式,当leader挂了后,会重新选举产生新的leader,从而保证服务的可用性。因此这两个组件采用多实例部署即可实现高可用。1.2
etcd组件的高可用部署1.2.1创建CA自签名根证书Kubernetes系统各组件需要使用x509证书对通信进行加密和认证。本章节在部署各组件前,需要创建CA自签名根证书,用来给后续创建的其他组件证书进行签发。会生成3个文件ca.pemca-key.pemca.csr将CA证书(ca.pem)、CA私钥(ca-key.pem)及CA配置文件(ca-config.json)拷贝到所有节点的/etc/k8s/cert目录下,若没有该目录需创建1.2.2下载etcd及创建etcd证书私钥在/etcd-io/etcd/releases下载etcd的安装包。这里下载3.3.13版本的etcd。将解压得到的文件夹中的二进制可执行文件etcd及etcdctl拷贝到三个节点的/opt/k8s/bin目录下,并赋予执行权限。使用前一步创建的CA证书,来签发etcd集群各节点使用的x509证书,用于加密客户端与etcd集群、etcd集群之间的数据通信。该命令会生成3个文件etcd.pem(etcd使用的证书)etcd-key.pem(etcd的私钥)etcd.csr(etcd的证书签名请求文件)将etcd.pem及etcd-key.pem拷贝到所有节点的/etc/etcd/cert/目录下,若没有该目录需创建。1.2.3创建etcd的systemdunit文件注意,以上文件是k8s-1节点上使用的etcdservice文件,另外两个节点需要把以上文件中的红色部分替换为自身节点的主机名或IP。按照以上内容创建好3个节点的etcdservice文件后,将文件拷贝并重命名为相应节点的/etc/systemd/system/etcd.service文件。1.2.4各节点启动etcd服务分别登录到各节点,执行如下命令。1.2.5验证服务状态分别在各节点执行如下命令,endpoints中的IP需要替换为实际节点的IP。若集群服务状态正常,则会分别输出如下结果:查看集群当前的leader。输出如下,显示第3个节点为leader。1.3kube-apiserver组件的高可用部署1.3.1各节点部署nginx代理通过在各节点部署nginx,让k8s组件通过本地nginx访问kube-apiserver,实现kube-apiserver的高可用。如果有yum源可以使用(如公网yum源),nginx可以使用yum安装,较为方便。也可以下载源码进行编译安装,这里以源码编译安装进行说明。然后将nginx可执行文件拷贝到3个节点上,并配置systemdunit文件来管理nginx服务。然后将上面编译生成的nginx-prefix/sbin/nginx可执行文件分别拷贝到3个节点的/opt/k8s/kube-ng-inx/sbin/下,并重命名为kube-nginx,并赋予可执行权限。将该配置文件分别拷贝到3个节点的/opt/k8s/kube-nginx/conf/目录下。然后将该文件拷贝到3个节点的/etc/systemd/system/目录下1.3.2下载kubernetes-server文件包解压后得到文件夹kubernetes,将kubernetes/server/bin/下面的所有可执行文件分别拷贝到3个节点的/opt/k8s/bin/目录下,并赋予可执行权限。1.3.3创建kubernetes证书和私钥该命令会生成3个文件kubernetes.pem(kubernetes使用的证书)kubernetes-key.pem(kubernetes的私钥)kubernetes.csr(kubernetes的证书签名请求文件)将kubernetes.pem及kubernetes-key.pem拷贝到所有节点的/etc/kubernetes/cert/目录下,若没有该目录需创建。1.3.4创建EncryptionConfig文件将encryption-config.yaml拷贝到所有节点的/etc/kubernetes/目录下。1.3.5创建Policy文件将audit-policy.yaml文件拷贝到所有节点的/etc/kubernetes/目录下。1.3.6创建kube-apiserversystemdunit文件注意,以上文件是k8s-1节点上使用的kube-apiserver.service文件,另外两个节点需要把以上文件中的红色部分替换为自身节点的IP。按照以上内容创建好3个节点的kube-apiserverservice文件后,将文件分别拷贝到3个对应节点上,并重命名为/etc/systemd/system/kube-apiserver.service文件。1.3.7启动kube-apiserver服务在3个节点上启动kube-apiserver服务。分别在3个节点上执行如下操作。1.3.8验证服务状态1.3.9查看集群信息任意节点执行kubectlcluster-info可查看集群信息。1.4kube-controller-manager组件的高可用部署1.4.1创建kube-controller-manager证书和私钥创建kube-controller-manager服务使用的证书和私钥,用于跟kube-apiserver的安全端口通信。该命令会生成3个文件kube-controller-manager.pem(kube-controller-manager使用的证书)kube-controller-manager-key.pem(kube-controller-manager的私钥)kube-controller-manager.csr(kube-controller-manager的证书签名请求文件)将kube-controller-manager.pem及kube-controller-manager-key.pem拷贝到所有节点的/etc/kubernetes/cert/目录下。1.4.2创建kube-controller-manager使用的kubeconfig文件kube-controller-manager使用kubeconfig文件访问kube-apiserver。以上命令会在当前目录下生成kube-controller-manager.kubeconfig文件,并进行相关配置。执行完成后,将该文件拷贝到3个节点的/etc/kubernetes/目录下。1.4.3创建kube-controller-managersystemdunit文件注意,以上文件是k8s-1节点上使用的kube-controller-manager.service文件,另外两个节点需要把以上文件中的红色部分替换为自身节点的IP。按照以上内容创建好3个节点的kube-controller-managerservice文件后,将对应文件分别拷贝到3个对应节点上,并命名为/etc/systemd/system/kube-controller-manager.service1.4.4启动kube-controller-manager服务在3个节点上启动kube-controller-manager服务。分别在3个节点上执行如下操作。1.4.5验证服务状态会显示集群的leader信息1.5kube-scheduler组件的高可用部署1.5.1创建kube-scheduler证书和私钥创建kube-scheduler服务使用的证书和私钥,用于跟kube-apiserver的安全端口通信。该命令会生成3个文件kube-scheduler.pem(kube-scheduler使用的证书)kube-scheduler-key.pem(kube-scheduler的私钥)kube-scheduler.csr(kube-scheduler的证书签名请求文件)将kube-scheduler.pem及kube-scheduler-key.pem拷贝到所有节点的/etc/kubernetes/cert/目录下。1.5.2创建kube-scheduler使用的kubeconfig文件kube-scheduler使用kubeconfig文件访问kube-apiserver。以上命令会在当前目录下生成kube-scheduler.kubeconfig文件,并进行相关配置。执行完成后,将该文件拷贝到3个节点的/etc/kubernetes/目录下。1.5.3创建kube-scheduler配置文件注意,以上文件是k8s-1节点上使用的kube-scheduler配置文件,另外两个节点上的配置文件需要把以上文件中的红色部分替换为自身节点的IP。按照以上内容创建好3个节点的kube-scheduler配置文件后,将文件分别拷贝为3个对应节点的/etc/kubernetes/kube-scheduler.yaml文件。1.5.4创建kube-schedulersystemdunit文件注意,以上文件是k8s-1节点上使用的kube-scheduler.service文件,另外两个节点需要把以上文件中的红色部分替换为自身节点的IP。按照以上内容创建好3个节点的kube-schedulerservice文件后,将对应文件分别拷贝到3个对应节点上,并命名为/etc/systemd/system/kube-scheduler.service文件。1.5.5启动kube-scheduler服务在3个节点上启动kube-scheduler服务。分别在3个节点上执行如下操作。1.5.6验证服务状态会显示集群的leader信息1.6本章小结本章介绍了k8s容器云平台集群的高可用安装部署步骤。k8s集群高可用的关键在于master节点各组件的高可用,最重要的是kube-apiserver组件的高可用实现。本章内容将k8s各组件采用systemd服务进行管理,并以k8s各节点部署nginx反向代理来访问多个apiserver实例的方式来说明了apiserver的高可用实现方式。
对于集群的其他组件,例如master节点上的kube-controller-manager及kube-scheduler也是多实例部署,配置访问本地的nginx代理来访问apiserver,并通过选举的方式实现组件单活高可用。对于node节点上的组件,kubelet及kube-proxy在部署时,也需要通过本地的nginx代理来访问apiserver,从而保证apiserver的高可用。通过本章节的学习,可以帮助读者了解k8s集群的高可用实现方式及各组件的配置原理,为学习k8s及实践提供参考指导。2基于Docker网络基础和实现原理通过上面的学习,我们掌握了从无到有的配置一个适合于个人学习、实践的高可用的容器云平台的方式。
但对于企业级的容器云平台来说,我们考虑的内容要更多,这里基于红帽的OpenShift企业级容器云平台,来介绍对于一个企业级的容器云平台来说,该考虑哪些多层次的高可用性设计,使平台不存在单点故障,保证客户业务的安全和稳定:1)容器的故障恢复当服务器宕机时,平台系统会自动在其它服务器上重新启动容器并为其分配资源,从而达到秒级启动,恢复业务。保障业务不掉线,高可靠运行。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保设备制作培训课件
- 航空航天复合材料 课件 第6章 烧蚀防热复合材料朱和国
- 早产儿的治疗及护理
- 餐饮行业知名品牌收购与经营权协议
- 企业财务风险管理与内部控制体系建设合同
- 餐饮企业大堂经理职位竞聘与培养协议
- 拆迁补偿与二手房买卖合同风险评估与解决方案合同
- 幼儿园考勤制度岗前培训
- 水稻专用肥采购合同及技术指导服务协议
- 高新区股权交易纠纷解决及股权转让合同
- 武汉市法院系统招聘审判辅助人员笔试真题2022
- 啤酒专场合同范本
- DZ∕T 0270-2014 地下水监测井建设规范
- 内江市社区工作者考试题库可打印
- 2023-2024学年广西壮族自治区桂林市物理八下期末考试试题及答案解析
- (高清版)JTGT 3365-02-2020 公路涵洞设计规范
- 明挖隧道专项施工方案
- 很完整半导体制造工艺流程
- 建筑结构荷载规范DBJ-T 15-101-2022
- 中华民族共同体概论课件专家版4第四讲 天下秩序与华夏共同体的演进(夏商周时期)
- 2024十八项医疗核心制度必考试题库及答案
评论
0/150
提交评论