云计算容器编排技术 课件全套 单元1-8 导学Kubernetes概述 - Kubernetes项目案例_第1页
云计算容器编排技术 课件全套 单元1-8 导学Kubernetes概述 - Kubernetes项目案例_第2页
云计算容器编排技术 课件全套 单元1-8 导学Kubernetes概述 - Kubernetes项目案例_第3页
云计算容器编排技术 课件全套 单元1-8 导学Kubernetes概述 - Kubernetes项目案例_第4页
云计算容器编排技术 课件全套 单元1-8 导学Kubernetes概述 - Kubernetes项目案例_第5页
已阅读5页,还剩856页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

为什么学习Kubernetes目录01任务为什么学习Kubernetes学习目标【知识目标】●了解Kubernetes常用功能;●

了解Kubernetes优势与发展前景1为什么学习Kubernetes为什么学习Kubernetes1支持用户在虚拟机及硬件上运行程序支持用户只需要编写一次就能在所有类型的云供应商及私有云上运行Kubernetes成为继Linux、Docker后最受欢迎的第三大平台的同时,也成为云计算领域的主流应用。流行的Kubernetes为什么学习Kubernetes主要技能要求就是Kubernetes以及Kubernetes周边生态技术,比如Prometheus监控系统、EFK日志管理平台和Istio微服务等。1薪资高为什么学习Kubernetes企业需要加快数字化创新,夯实智能社会新基础设施,云原生技术应运而生。随着容器的快速发展,容器管理工具Kubernete也应运而生,目前不仅百度、京东、阿里、google等大公司在使用Kubernetes,一些中小企业也开始把业务迁移到Kubernete中,作为运维、开发、测试或者架构师来说,必须要学习这项技术,才能在行业内拥有过硬的的技术储备,才能实现升职加薪的梦想。1发展前景好为什么学习Kubernetes知名互联网公司都在使用Kubernetes,如:京东百度阿里巴巴腾讯美团谷歌1业界认可度高为什么学习KubernetesKubernetes提供一个可弹性运行分布式系统的框架。Kubernetes能满足扩展要求、应用的故障转、提供部署模式等。1功能强大为什么学习KubernetesKubernetes常用功能:服务发现和负载均衡存储编排自动部署和回滚自动完成装箱计算自我修复密钥与配置管理1功能强大为什么学习Kubernetes功能齐全的UI界面1强大的生态体系为什么学习Kubernetes全方位的立体监控系统1强大的生态体系为什么学习Kubernetes功能完备的日志收集平台1强大的生态体系ThankYOU!Kubernetes简介目录01任务Kubernetes简介与功能Docker容器技术02任务03任务Kubernetes发展历史学习目标【知识目标】●了解Docker容器的优势与缺点;●

了解容器编排引擎Kubernetes;●

了解kubernetes发展历史。【技能目标】●

能够掌握Kubernetes容器编排技术特点;●

能够自己拓展kubernetes知识。1Docker容器技术Docker容器技术Docker提供了一种将应用程序安全、隔离运行的一种方式,能够将应用程序依赖和库文件打包在一个容器中,后续在任何地方运行起来即可。特点:其包含了应用程序所依赖相关环境,一次构建,任意运行(buildonce,runanywhere)。1Docker容器技术DockerDaemon:容器管理组件,守护进程,负责容器,镜像,存储,网络等管理DockerClient:容器客户端,负责和DockerDaemon交互,完成容器生命周期管理DockerRegistry:容器镜像仓库,负责存储,分发,打包DockerObject容器对象:主要包含container和images1Docker组成Docker容器技术容器给应用程序开发环境带来很大的便利,从根本上解决了容器的环境依赖,打包等问题,然而,Docker带来的容器打包的便利,同时也带来了以下的挑战:容器如何调度,分发多台机器如何协同工作Docker主机故障时应用如何恢复如何保障应用高可用,横向扩展,动态伸缩1Docker的挑战2Kubernetes简介与功能2Kubernetes简介与功能为什么Kubernetes是如此有用?应用系统架构的三个发展阶段物理服务器部署应用;分布式和虚拟化技术替代物理服务器,满足企业所需的算力规模;应用容器化部署。2Kubernetes简介与功能容器的优势敏捷应用程序的创建和部署持续开发、集成和部署关注开发与运维的分离跨开发、测试和生产的环境一致性跨云和操作系统发行版本的可移植性以应用程序为中心的管理松散耦合、分布式、弹性、解放的微服务2Kubernetes简介与功能Kubernetes简介Kubernetes是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。k8s这个缩写是因为k和s之间有八个字符的关系。Google在2014年开源了Kubernetes项目。Kubernetes拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。2Kubernetes简介与功能三大容器编排引擎DockerSwarmApacheMesosGoogleKubernetesKubernetes已战胜Swarm,Mesos成为容器编排的行业标准。Kubernetes简介与功能Servicediscoveryandloadbalancing,服务发现和负载均衡Storageorchestration,存储编排Automatedrolloutsandrollbacks,自动发布与回滚2Kubernetes简介与功能Automaticbinpacking,自动资源调度Self-healing,内置的健康检查策略Secretandconfigurationmanagement,密钥和配置管理Batchexecution,批处理执行Horizontalscaling,横向扩展功能23Kubernetes发展历史3Kubernetes发展历史Kubernetes发展史k8s的发展经历了几个关键点,3Kubernetes发展历史Kubernetes容器运行时在Kubernetes集群内部,有一个叫做容器运行时的东西,负责拉取镜像和运行容器。从kubernetesv1.24起kubernetes官方不再对dockershim进行维护。即从kubernetesv1.24开始不再使用docker。3Kubernetes发展历史实现Kubernetes使用docker可以在kubelet和docker之间加上一个中间层cri-docker。一头通过CRI跟kubelet交互,另一头跟dockerapi交互缺点明显:调用链更长,效率更低。Kubernetes官网https://Kubernetes.io/https://Kubernetes.io/zh/ThankYOU!Kubernetes应用场景目录01任务Kubernetes应用场景学习目标【知识目标】●了解kubernetes的应用场景。1Kubernetes应用场景Kubernetes应用场景1、疾病疫情预测基于人们的搜索情况、购物行为预测大面积疫情爆发的可能性,如Google成功预测冬季流感。1Kubernetes应用场景2、交通行为预测基于用户和车辆的LBS定位数据,分析人车出行的个体和群体特征,进行交通行为的预测。交通部门可预测不同时间点不同道路的车流量进行智能的车辆调度,或应用潮汐车道;用户则可以根据预测结果选择拥堵几率更低的道路。1Kubernetes应用场景3、HDFSonKubernetesHDFS主要包括Datanode,Namenode和Journalnode三个组件。在Kubernetes中进行部署时,由于Datanode需要存储HDFS中的数据,对磁盘要求非常高,所以在Kubernetes中部署时Datanode采用DaemonSet的方式进行部署,每个存储节点部署一个Datanode实例。而Namenode和Journalnode由于需要保持名称不变,在Kubernetes中采用StatefulSet的方式进行部署。1Kubernetes应用场景4、诺基亚:通过Kubernetes实现5G技术落地实践采用容器化、Kubernetes和其他云原生技术,解决再不同的基础架构上运行相同的产品,而无需更改产品本身的问题1Kubernetes应用场景云原生应用微服务架构大规模数据处理容器化应用程序多云环境DevOps1Kubernetes应用场景DevOps物联网(IoT)边缘计算混合云多租户1ThankYOU!Kubernetes架构目录01任务Kubernetes高可用架构Kubernetes整体架构02任务学习目标【知识目标】●了解kubernetes架构的组成;●

了解kubernetes高可用架构的组成。【技能目标】●

能够掌握各节点的主要组件及其功能;●

能够规划高可用集群架构。1Kubernetes整体架构Kubernetes整体架构Kubernetes的物理架构是master/node模式,master节点是集群的管理节点,主要用于暴露API、调度部署和对节点进行管理。node工作节点主要是运行容器的。1Kubernetes整体架构kube-api-server:提供Kubernetesapi,负责集群所有接入请求,提供资源操作的唯一入口,并将操作对象持久化到etcd中。etcd:元数据信息存储,主要用于存储Kubernetes集群状态的数据,是一个高可用的键值数据库。1master节点组件Kubernetes整体架构kube-controller-scheduler:集群资源调度,主要负责Kubernetes集群中pod的调度的

。kube-controller-manager:集群状态的一致性,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理。1master节点组件Kubernetes整体架构cloud-controller-manager:云控制器管理器,用于公有云的接入实现,提供节点管理(node),路由管理,服务管理(LoadBalancer和Ingress),存储管理(Volume,如云盘,NAS接入),需要由公有云厂商实现具体的细节,Kubernetes提供实现接口的接入。1master节点组件Kubernetes整体架构ContainerRuntime:容器运行时,负责实现container生命周期管理,如Docker,Containerd,CRI-O。kube-proxy:是Kubernetes中负责网络代理和服务发现的重要组件,它通过维护代理规则表以及负载均衡功能,实现集群内部服务的可靠通信和高可用性。1node节点组件Kubernetes整体架构kubelet:负责镜像和pod的管理,每个Node节点上的kubelet定期就会调用APIServer的REST接口报告自身状态,APIServer接收这些信息后,将节点状态信息更新到etcd中。kubelet也通过APIServer监听Pod信息,从而对Node机器上的Pod进行管理,如创建、删除、更新Pod。1node节点组件Kubernetes整体架构DNS组件:由kube-dns或coredns实现集群内的名称解析。Kubernetes-dashboard:用于图形界面管理。

网络组件:如Calico,是一套开源的网络和网络安全方案,用于容器、虚拟机、宿主机之间的网络连接,可以用在Kubernetes、OpenShift、DockerEE、OpenStrack等PaaS或IaaS平台上。1其他组件Kubernetes整体架构容器运行时:如Docker,负责启动容器的。服务外部接入,通过ingress实现七层接入,由多种controller控制器组成

traefik

nginxingresscontroller

haproxyingresscontroller

公有云厂商

ingresscontroller1其他组件Kubernetes整体架构监控系统用于采集node和pod的监控数据

metric-server核心指标监控

prometheus自定义指标监控,提供丰富功能日志采集系统,用于收集容器的业务数据,实现日志的采集,存储和展示,由EFK实现

Fluentd日志采集

ElasticSearch日志存储+检索

Kiabana数据展示1其他组件2Kubernetes高可用架构2Kubernetes高可用架构集群内部的高可用需要实现基础组件的高可用,其中最重要的就是etcd和apiserver,schedule和controller-mansger也不可缺少2Kubernetes高可用架构高可用架构组成Master的kube-apiserver、kube-controller-mansger和kube-scheduler服务至少三个结点的多实例方式部署。ETCD至少以3个结点的集群模式部署。2Kubernetes高可用架构流行的KubernetesMaster、ETCD集群启用基于CA认证的HTTPS安全机制,Master启用RBAC授信机制。LoadBalance使用双机热备,向Node暴露虚拟IP作为入口地址,供客户端访问。ThankYOU!Kubernetes核心资源目录01任务Kubernetes核心资源学习目标【知识目标】●

了解kubernetes核心资源。【技能目标】●

能够辨别各资源之间的关系1Kubernetes核心资源Kuberntes核心资源解析Pod是Kubernetes中的最小调度单元。Pod代表集群上正在运行的一个进程,一个Pod封装一个容器,也可以封装多个容器,Pod里的容器共享存储、网络等。1PodKuberntes核心资源解析Replicaset是Kubernetes中的副本控制器,管理Pod,使pod副本的数量始终维持在预设的个数。1ReplicasetKuberntes核心资源解析Deployment是管理Replicaset和Pod的副本控制器,Deployment可以管理多个Replicaset,是比Replicaset更高级的控制器,也就是说在创建Deployment的时候,会自动创建Replicaset,由Replicaset再创建Pod,Deployment能对Pod扩容、缩容、滚动更新和回滚、维持Pod数量。1DeploymentKuberntes核心资源解析k8s中的资源对象大都可以打上标签,如Node、Pod、Service等,一个资源可以绑定任意多个label,k8s通过Label可实现多维度的资源分组管理,后续可通过LabelSelector查询和筛选拥有某些Label的资源对象。1LabelKuberntes核心资源解析Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。service对一组Pod进行逻辑集合,通常是通过

LabelSelector实现的1ServiceKuberntes核心资源解析Pod被ReplicaSet管理,ReplicaSet控制pod的数量:ReplicaSet被Deployment管理,Deployment控制pod应用的升级、回滚,当然也能控制pod的数量;Service提供一个统一固定入口,负责将前端请求转发给一组Pod(根据label选定)。1总结ThankYOU!Kubernetes项目案例目录华为:以用户和供应商身份拥抱云原生01任务01任务网易:利用Kubernetes支持在全球的互联网业务学习目标【知识目标】●了解kubernetes的发展现状及经典案例。1华为:以用户和供应商身份拥抱云原生华为:以用户和供应商身份拥抱云原生大型公司应用程序纷纷迁移到Kubernetes上运行1华为:以用户和供应商身份拥抱云原生早期以社区创始成员及白金会员的身份加入其中。目前拥有1个SteeringCommittee席位和5个Maintainer席位。华为通过参与和贡献Kubernetes项目,为自身带来了在规划、网络、多集群联合、应用支持、安全、可扩展性和政策执行等方面的良好设计、代码和文档管理,以及在服务治理方面的收益。1华为:以用户和供应商身份拥抱云原生通过自身的容器化改造实践,在受益的同时又将自身遇到的实际问题不断的贡献给社区,与社区成员一同推动Kubernetes的发展。华为云应用服务产品围绕着“容器”为中心构建,致力于帮助客户容器化的应用在云上高效地开发、交付与运维,并保障应用运行时的高性能、高可靠、高弹性。目前,华为云应用服务产品以基于K8S的华为云容器引擎(CCE)为核心,协同补齐了完整的应用开发、交付与运维流程,为客户提供完整的一站式云上应用生命周期管理方案。12网易:利用Kubernetes支持在全球的互联网业务网易:利用Kubernetes支持在全球的互联网业务网易希望通过无服务器容器服务自动为用户提供基础设施和工具。放弃构建自己的业务流程解决方案后,将其私有云平台建立在Kubernetes的基础上。于2015年开始与Kubernetes合作。2网易:利用Kubernetes支持在全球的互联网业务影响Kubernetes已经提高了研发效率一倍多,部署效率提高了2.8倍。新平台还允许使用GPU和CPU资源进行混合部署,这些改进也提高了资源的利用率。网易系统可以在单个集群中支持30000个节点。在生产中,网易在单个集群中获取到了10000个节点的数据。整个内部系统都在使用该系统进行开发、测试和生产。2网易:利用Kubernetes支持在全球的互联网业务影响基于使用内部平台的成果和学习,网易向外部客户推出了基于Kubernetes的云和微服务型PaaS产品,NetEase轻舟微服务。作为最终用户和供应商,网易已经更多地参与社区,向其他公司学习,分享他们所做的工作。并一直在为Harbor和Envoy项目做出贡献,在NetEase进行规模测试技术时提供反馈。2ThankYOU!Kubernetes集群-基础环境目录01任务项目实施节点环境准备02任务学习目标【知识目标】●了解ipvs基本知识;●

掌握集群基础环境配置要点

【技能目标】●

能够基于搭建过程中出现的问题进行基础排错。1节点环境准备初始化实验环境1角色IP地址主机名安装的组件控制节点0masterapiserver,controller-manager,scheduler,etcd,kube-proxy,docker,flannel工作节点0node1kubelet,kube-proxy,docker,flannel工作节点0node2kubelet,kube-proxy,docker,flannel节点规划初始化实验环境1环境准备和说明软件名称软件版本LinuxOSCentOSLinuxrelease7.7.1908(Core)Dockerdocker-ce-20.10.6Kubernetes1.20.6Kubeadmkubeadm-1.20.6-0.x86_64etcd3.3.10flannelv3.18.0初始化实验环境1环境准备和说明推荐配置:4vcpu+4Gmemory+50Gdisk。最低配置:2vcpu+2Gmemory+50Gdisk网络:NAT本次实验配置如下2案例实施案例实施按照部署要求,修改三个节点的IP地址,以master节点为例2配置静态IP[root@localhost~]#vim/etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static。。。ONBOOT=yesIPADDR=0PREFIX=24GATEWAY=DNS1=14修改配置文件之后需要重启网络服务才能使配置生效[root@localhost~]#systemctlrestartnetwork案例实施2配置机器主机名在0上执行如下:[root@localhost~]#hostnamectlset-hostnamemaster&&bash在0上执行如下:[root@localhost~]#hostnamectlset-hostnamenode1&&bash在0上执行如下:[root@localhost~]#hostnamectlset-hostnamenode2&&bash案例实施2配置主机hosts文件3个节点相互之间通过主机名互相访问修改每台机器的/etc/hosts,增加如下3行:0master0node10node2案例实施2关闭交换分区swapKubernetes为了能提升性能,默认不允许使用交换分区的。Kubeadm初始化的时候会检swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装Kubernetes的时候可以指定--ignore-preflight-errors=Swap来解决。案例实施2关闭交换分区swap(1)临时关闭[root@master~]#swapoff-a[root@node1~]#swapoff-a[root@node2~]#swapoff-a案例实施2关闭交换分区swap(2)永久关闭[root@master~]#vi/etc/fstab#/etc/fstab#CreatedbyanacondaonMonJul2411:15:142023#Accessiblefilesystems,byreference,aremaintainedunder'/dev/disk'#Seemanpagesfstab(5),findfs(8),mount(8)and/orblkid(8)formoreinfo#UUID=ab12c361-6848-4035-bc98-bf8a242efa2a/xfsdefaults00UUID=628bfe49-1b47-40c7-9182-45383cfe840b/bootxfsdefaults00#UUID=5bfdd074-35c2-40ac-a57f-b41de7d81dd5swapswapdefaults00

案例实施2关闭firewalld防火墙[root@master~]#systemctlstopfirewalld;systemctldisablefirewalld[root@node1~]#systemctlstopfirewalld;systemctldisablefirewalld[root@node2~]#systemctlstopfirewalld;systemctldisablefirewalld案例实施2关闭selinux三节点做同样配置,以master节点为例[root@master~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config修改selinux配置文件之后,重启机器,selinux配置才能永久生效。[root@master~]#getenforceDisabled#显示Disabled说明selinux已经关案例实施2开启ipvs配置ipvs模块,三个节点均需配置cat>/etc/sysconfig/modules/ipvs.modules<<EOF#!/bin/bashmodprobe--br_netfiltermodprobe--ip_vsmodprobe--ip_vs_rrmodprobe--ip_vs_wrrmodprobe--ip_vs_shmodprobe--nf_conntrack_ipv4EOF案例实施2开启ipvschmod755/etc/sysconfig/modules/ipvs.modules&&\bash/etc/sysconfig/modules/ipvs.modules&&\lsmod|grep-E"ip_vs|nf_conntrack_ipv4"输出结果如下:ThankYOU!Kubernetes集群-安装Docker目录01任务安装Docker服务环境准备02任务学习目标【知识目标】●了解内核参数;●

掌握yum的配置。【技能目标】●

能够安装Docker服务。1环境准备docker安装环境准备1修改机器内核参数为什么开启net.bridge.bridge-nf-call-iptables内核参数?在centos下安装docker,执行dockerinfo出现如下警告:WARNING:bridge-nf-call-iptablesisdisabledWARNING:bridge-nf-call-ip6tablesisdisabled解决办法:vim/etc/sysctl.d/Kubernetes.confnet.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=11修改机器内核参数为什么要开启net.ipv4.ip_forward参数?kubeadm初始化Kubernetes报错:解决办法:vim/etc/sysctl.d/Kubernetes.confnet.ipv4.ip_forward=1docker安装环境准备1修改机器内核参数三节点执行相同配置,以master节点为例[root@master~]#modprobebr_netfilter[root@master~]#echo"modprobebr_netfilter">>/etc/profile[root@master~]#cat>/etc/sysctl.d/Kubernetes.conf<<EOFnet.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1EOF[root@master~]#sysctl-p/etc/sysctl.d/Kubernetes.confdocker安装环境准备1配置yum源三节点配置阿里云centos的YUM源,以Master节点为例[root@master~]#mv/etc/yum.repos.d/*/home[root@master~]#curl-o/etc/yum.repos.d/CentOS-Base.repo/repo/Centos-7.repodocker安装环境准备1配置yum源三节点配置国内阿里云docker的YUM源,以Master节点为例[root@master~]#yuminstall-yyum-utils[root@master~]#yum-config-manager--add-repo/docker-ce/linux/centos/docker-ce.repo[root@master~]#sed-i's++/docker-ce+'/etc/yum.repos.d/docker-ce.repodocker安装环境准备2安装docker服务安装docker服务各节点部署docker服务,以Master节点为例[root@master~]#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2[root@master~]#yuminstalldocker-ce-20.10.6docker-ce-cli-20.10.6containerd.io-y[root@master~]#systemctlstartdocker&&systemctlenabledocker.service2安装docker-ce安装docker服务[root@master~]#cat>/etc/docker/daemon.json<<EOF{"exec-opts":["native.cgroupdriver=systemd"],"log-driver":"json-file","log-opts":{"max-size":"100m","max-file":"10"},"oom-score-adjust":-1000,"registry-mirrors":[""],"storage-driver":"overlay2","storage-opts":["overlay2.override_kernel_check=true"],"live-restore":false}EOF2配置镜像加速器和驱动[root@master~]#systemctldaemon-reload[root@master~]#systemctlrestartdocker[root@master~]#systemctlstatusdocker以master节点为例,node1和node2节点重复上述操作。ThankYOU!Kubernetes集群部署1目录01任务初始化集群软件包准备02任务学习目标【知识目标】●了解kubeadm工具的使用方法;●

掌握Kubernetes集群的初始化。【技能目标】●

能够利用kubeadm初始化Kubernetes集群;●

能够基于搭建过程中出现的问题进行基础排错。1软件包准备1配置yum源配置安装Kubernetes组件需要的阿里云的YUM源cat<<EOF>/etc/yum.repos.d/Kubernetes.repo[Kubernetes]name=Kubernetesbaseurl=/Kubernetes/yum/repos/Kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=/Kubernetes/yum/doc/yum-key.gpg/Kubernetes/yum/doc/rpm-package-key.gpgEOF软件包准备1安装软件包三节点安装初始化Kubernetes需要的软件包,并启动kubelet服务,设置开机自启,以master节点为例,代码如下:[root@master~]#yuminstall-ykubelet-1.20.6kubeadm-1.20.6kubectl-1.20.6[root@master~]#systemctlenablekubelet[root@master~]#systemctlstartkubelet软件包准备1安装软件包查看kubelet服务状态:[root@master~]#systemctlstatuskubelet输出结果如下:软件包准备2初始化集群初始化集群(1)使用kubeadm初始化Kubernetes集群[root@master~]#kubeadmconfigprintinit-defaults>kubeadm-config.yaml2初始化控制节点初始化集群(2)编辑kubeadm-config.yaml文件2初始化控制节点vim/root/kubeadm-config.yamlapiVersion:kubeadm.Kubernetes.io/v1beta2bootstrapTokens:-groups:-system:bootstrappers:kubeadm:default-node-tokentoken:abcdef.0123456789abcdefttl:24h0m0susages:-signing-authenticationkind:InitConfigurationlocalAPIEndpoint:advertiseAddress:0#修改为master节点IP地址bindPort:6443nodeRegistration:criSocket:/var/run/dockershim.sockname:mastertaints:-effect:NoSchedulekey:node-role.Kubernetes.io/master初始化集群(2)编辑kubeadm-config.yaml文件2初始化控制节点apiServer:timeoutForControlPlane:4m0sapiVersion:kubeadm.Kubernetes.io/v1beta2certificatesDir:/etc/Kubernetes/pkiclusterName:KubernetescontrollerManager:{}dns:type:CoreDNSetcd:local:dataDir:/var/lib/etcdimageRepository:/google_containerskind:ClusterConfigurationKubernetesVersion:v1.20.6#版本修改为我们预装的版本networking:dnsDomain:cluster.localpodSubnet:/16#添加pod子网serviceSubnet:/12scheduler:{}初始化集群(3)通过kubeadm-config.yaml安装KUBERNETES[root@master~]#kubeadminit--configkubeadm-config.yaml2初始化控制节点初始化集群安装成功,输出结果如下:2初始化控制节点本行代码需记录,用于node节点加入集群初始化集群2初始化控制节点①[init]:指定版本进行初始化操作。②[preflight]:初始化前的检查和下载所需要的Docker镜像文件。。③[certs]:生成Kubernetes使用的证书,存放在/etc/kubernetes/pki目录中。④[kubeconfig]:生成KubeConfig文件,存放在/etc/kubernetes目录中,组件之间通信需要使用对应文件。⑤[kubelet-start]:生成Kubelet的配置文件/var/lib/kubelet/config.yaml,没有这个文件Kubelet无法启动,所以初始化之前的Kubelet实际上启动失败。⑥[control-plane]:使用/etc/kubernetes/manifest目录下的YAML文件,安装Master组件。⑦[etcd]:使用/etc/kubernetes/manifest/etcd.yaml安装Etcd服务。初始化集群2初始化控制节点⑧[wait-control-plane]:等待control-plan部署的Master组件启动。⑨[apiclient]:检查Master组件服务状态。⑩[upload-config]:更新配置。⑪[kubelet]:使用configMap配置Kubelet。⑫[upload-certs]:多MASTER时使用,可追加控制平台⑬[mark-control-plane]:为当前节点打标签,打了角色Master,和不可调度标签,这样默认就不会使用Master节点来运行Pod。⑭[bootstrap-token]:生成的Token需要记录下来,后面使用kubeadmjoin命令往集群中添加节点时会用到。⑮[addons]:安装附加组件CoreDNS和kube-proxy。初始化集群[root@master~]#mkdir-p$HOME/.kube[root@master~]#sudocp-i/etc/Kubernetes/admin.conf$HOME/.kube/config[root@master~]#sudochown$(id-u):$(id-g)$HOME/.kube/config[root@master~]#kubectlgetnodesNAMESTATUS

ROLES

AGE

VERSIONmasterNotReadycontrol-plane,master60sv1.20.62配置kubectl工具ThankYOU!Kubernetes集群部署2目录01任务添加工作节点安装网络插件02任务学习目标【知识目标】●

掌握Kubernetes网络插件的使用;●

掌握node节点的添加方法。【技能目标】●

能够利用kubeadm搭建Kubernetes集群;●

能够基于搭建过程中出现的问题进行基础排错。1安装网络插件安装网络插件2k8s网络模型多个开源组件支持容器网络模型:Flannel、OpenvSwitch、Calico等安装网络插件2Calico网络

Calico可创建并管理一个3层平面网络,为每个工作负载分配一个完全可路由的IP地址,而没有采用overlay网络做报文的转发。

这样,每个容器都通过IP直接通信,中间通过路由转发找到对方,所有工作负载可以无需IP封装或网络地址转换就可进行通信。在这个过程中,容器所在的节点类似于传统的路由器,提供了路由查找的功能。

要想路由工作能够正常,每个虚拟路由器(容器所在的主机节点)必须有某种方法知道整个集群的路由信息,calico采用的是BGP路由协议来完成Node上Pod间通信;在需要使用overlay网络的环境中,Calico提供了IP-in-IP隧道技术,或者也可以与flannel等其他overlay网络配合使用。安装网络插件2Calico网络Calico还提供网络安全规则的动态配置:基于iptables提供了丰富的网络策略,实现了k8s的NetworkPolicy策略,提供容器间网络可达性限制的功能。使用Calico提供的简单策略语言,就可以实现对容器、虚拟机工作负载和裸机主机各节点之间通信的细粒度控制。安装网络插件2Flannel网络Flannel由CoreOS开发,用于解决容器集群跨主机通讯的覆盖网络(overlaynetwork),它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络。Flannel通过在每一个节点上启动一个叫flannel的进程,负责为每一个节点上的子网划分,并将相关配置信息(如各节点的子网网段、外部IP等)保存到etcd中,而具体的网络报文转发交给backend实现。安装网络插件2Flannel与calicoflannel部署简单,功能比较少,不具备复杂网络的配置能力;calico功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理,Calico还可以与服务网格Istio集成;flannel实现的是网络通信;calico的特性是在pod之间的隔离,纯三层的转发,中间没有任何的NAT和overlay,转发效率最好。安装网络插件2Flannel与calico比较小而简单的集群使用flannel;网络设备多、配置策略多则使用calico。安装网络插件上传kube-flannel.yml到master节点上,使用yaml文件安装Flannel网络插件。自行下载地址:/flannel-io/flannel[root@master~]#kubectlapply-fkube-flannel.yml[root@master~]#kubectlgetpods-nkube-system1安装flannel网络安装网络插件输出结果如图下所示,说明网络插件flannel已经正常工作。1安装flannel网络2添加node节点添加node节点默认的token有效期为24小时,当过期之后,该token就不能用了,这时可以使用如下的命令创建token:[root@master~]#kubeadmtokencreate--print-join-command生成一个永不过期的token:[root@master~]#kubeadmtokencreate--ttl02添加node节点将node1节点加入集群[root@node1~]#kubeadmconfigprintjoin-defaults>kubeadm-config.yaml2初始化控制节点添加node节点(2)编辑kubeadm-config.yaml文件2初始化控制节点[root@node1~]#vimkubeadm-config.yamlapiVersion:kubeadm.Kubernetes.io/v1beta2caCertPath:/etc/Kubernetes/pki/ca.crtdiscovery:bootstrapToken:apiServerEndpoint:0:6443#修改为master节点IPtoken:abcdef.0123456789abcdefunsafeSkipCAVerification:truetimeout:5m0stlsBootstrapToken:abcdef.0123456789abcdefkind:JoinConfigurationnodeRegistration:criSocket:/var/run/dockershim.sockname:node1taints:null添加node节点最后,通过kubeadm-config.yaml加入KUBERNETES集群。[root@node1~]#kubeadmjoin--configkubeadm-config.yaml添加成功,输出结果如下:2查看kube-system空间各pod工作状态添加node节点添加node2节点步骤同node1相同,只需在yaml文件里修改相应的主机名nodeRegistration:criSocket:/var/run/dockershim.sockname:node2taints:null2查看kube-system空间各pod工作状态添加node节点[root@master~]#kubectlgetpods-nkube-system输出结果如下:2查看kube-system空间各pod工作状态添加node节点[root@master~]#kubectlgetnodes输出结果如下:2查看集群节点状况ThankYOU!Kubernetes高可用集群-基础环境目录01任务项目实施节点环境准备02任务学习目标【知识目标】●

掌握集群基础环境配置要点

【技能目标】●

能够基于搭建过程中出现的问题进行基础排错。1节点环境准备初始化实验环境1角色IP地址主机名安装的组件控制节点0Master-1apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx控制节点0Master-2apiserver、controller-manager、scheduler、etcd、docker、keepalived、nginx工作节点0Node-1kubelet、kube-proxy、docker、calico、coredns节点规划初始化实验环境1环境准备和说明软件名称软件版本LinuxOSCentOSLinuxrelease7.7.1908(Core)Dockerdocker-ce-20.10.6Kubernetes1.20.6Kubeadmkubeadm-1.20.6-0.x86_64etcd3.3.10calicov3.18.0初始化实验环境1环境准备和说明推荐配置:4vcpu+4Gmemory+50Gdisk最低配置:2vcpu+2Gmemory+50Gdisk网络:NAT本次实验配置如下:初始化实验环境1环境准备和说明k8s本地环境规划:podSubnet(pod网段)/16serviceSubnet(service网段):/162案例实施案例实施按照部署要求,修改三个节点的IP地址,以master1节点为例2配置静态IP[root@localhost~]#vim/etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static。。。ONBOOT=yesIPADDR=192.168.116.10PREFIX=24GATEWAY=192.168.116.2DNS1=14修改配置文件之后需要重启网络服务才能使配置生效[root@localhost~]#systemctlrestartnetwork案例实施2配置机器主机名在0上执行如下:hostnamectlset-hostnamemaster1&&bash在0上执行如下:hostnamectlset-hostnamemaster2&&bash在0上执行如下:hostnamectlset-hostnamenode1&&bash案例实施2配置主机hosts文件3个节点相互之间通过主机名互相访问,修改每台机器的/etc/hosts,增加如下3行:0master10master20node1案例实施2配置主机之间无密码登录生成秘钥[root@master1~]#ssh-keygen把本地生成的密钥文件和私钥文件拷贝到远程主机[root@master1~]#ssh-copy-idmaster1[root@master1~]#ssh-copy-idmaster2[root@master1~]#ssh-copy-idnode1案例实施2配置主机之间无密码登录生成秘钥[root@master2~]#ssh-keygen把本地生成的密钥文件和私钥文件拷贝到远程主机[root@master2~]#ssh-copy-idmaster1[root@master2~]#ssh-copy-idmaster2[root@master2~]#ssh-copy-idnode1案例实施2配置主机之间无密码登录生成秘钥[root@node1~]#ssh-keygen把本地生成的密钥文件和私钥文件拷贝到远程主机[root@node1~]#ssh-copy-idmaster1[root@node1~]#ssh-copy-idmaster2[root@node1~]#ssh-copy-idnode1案例实施2关闭交换分区swap三节点相同配置,以master1为例(1)临时关闭[root@master1~]#swapoff-a案例实施2关闭交换分区swap(2)永久关闭[root@master1~]#vi/etc/fstab#/etc/fstab#CreatedbyanacondaonMonJul2411:15:142023#Accessiblefilesystems,byreference,aremaintainedunder'/dev/disk'#Seemanpagesfstab(5),findfs(8),mount(8)and/orblkid(8)formoreinfo#UUID=ab12c361-6848-4035-bc98-bf8a242efa2a/xfsdefaults00UUID=628bfe49-1b47-40c7-9182-45383cfe840b/bootxfsdefaults00#UUID=5bfdd074-35c2-40ac-a57f-b41de7d81dd5swapswapdefaults00

1修改机器内核参数三节点执行相同配置,以master1节点为例[root@master1~]#modprobebr_netfilter[root@master1~]#echo"modprobebr_netfilter">>/etc/profile[root@master1~]#cat>/etc/sysctl.d/Kubernetes.conf<<EOFnet.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1EOF[root@master1~]#sysctl-p/etc/sysctl.d/Kubernetes.confdocker安装环境准备案例实施2关闭firewalld防火墙[root@master1~]#systemctlstopfirewalld;systemctldisablefirewalld[root@master2~]#systemctlstopfirewalld;systemctldisablefirewalld[root@node1~]#systemctlstopfirewalld;systemctldisablefirewalld案例实施2关闭selinux三节点做同样配置,以master1节点为例[root@master1~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config修改selinux配置文件之后,重启机器,selinux配置才能永久生效。[root@master1~]#getenforceDisabled#显示Disabled说明selinux已经关案例实施2配置时钟同步所有节点安装chrony服务。[root@master1~]#yuminstall-ychrony

[root@master2~]#yuminstall-ychrony

[root@node1~]#yuminstall-ychrony

案例实施2配置时钟同步master1节点修改/etc/chrony.conf文件,注释默认NTP服务器,指定上游公共NTP服务器,并允许其他节点同步时间。[root@master1~]#sed-i's/^server/#&/'/etc/chrony.conf[root@master1~]#cat>>/etc/chrony.conf<<EOFlocalstratum10servermasteriburstallowallEOF案例实施2配置时钟同步master1节点重启chronyd服务并设为开机启动,开启网络时间同步功能。[root@master1~]#systemctlenablechronyd&&systemctlrestartchronyd[root@master1~]#timedatectlset-ntptrue案例实施2配置时钟同步master2和node1节点修改/etc/chrony.conf文件,指定内网master1节点为上游NTP服务器,重启服务并设为开机启动。以node1为例[root@node1~]#sed-i's/^server/#&/'/etc/chrony.conf[root@node1~]#echoserver0iburst>>/etc/chrony.conf[root@node~]#systemctlenablechronyd&&systemctlrestartchronyd案例实施2开启ipvs配置ipvs模块,三个节点均需配置cat>/etc/sysconfig/modules/ipvs.modules<<EOF#!/bin/bashmodprobe--br_netfiltermodprobe--ip_vsmodprobe--ip_vs_rrmodprobe--ip_vs_wrrmodprobe--ip_vs_shmodprobe--nf_conntrack_ipv4EOF案例实施2开启ipvschmod755/etc/sysconfig/modules/ipvs.modules&&\bash/etc/sysconfig/modules/ipvs.modules&&\lsmod|grep-E"ip_vs|nf_conntrack_ipv4"输出结果如下:案例实施2安装基础包三节点安装基础软件包,以master1为例[root@master1~]#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2wgetnet-toolsnfs-utilslrzszgccgcc-c++makecmakelibxml2-developenssl-develcurlcurl-develunzipsudontplibaio-develwgetvimncurses-develautoconfautomakezlib-devel

python-develepel-releaseopenssh-serversocat

ipvsadmconntrackntpdatetelnetipvsadm案例实施2安装iptables如果用firewalld不习惯,可以安装iptables,在master1、master2、node1上操作:#yuminstalliptables-services-y禁用iptables#serviceiptablesstop&&systemctldisableiptables清空防火墙规则#iptables-F#iptables-X#iptables-Z#/usr/sbin/iptables-saveThankYOU!Kubernetes高可用集群-安装Docker目录01任务安装Docker服务环境准备02任务学习目标【知识目标】●

掌握yum的配置。【技能目标】●

能够安装Docker服务1环境准备1配置yum源三节点配置阿里云centos的YUM源,以Master1节点为例[root@master1~]#mv/etc/yum.repos.d/*/home[root@master1~]#curl-o/etc/yum.repos.d/CentOS-Base.repo/repo/Centos-7.repodocker安装环境准备1配置yum源三节点配置阿里云docker的YUM源,以Master1节点为例[root@master1~]#yum-config-manager--add-repo/docker-ce/linux/centos/docker-ce.repo[root@master1~]#sed-i's++/docker-ce+'/etc/yum.repos.d/docker-ce.repodocker安装环境准备1配置yum源三节点配置阿里云Kubernetes的YUM源,以Master1节点为例[root@master1~]#cat<<EOF>/etc/yum.repos.d/Kubernetes.repo[Kubernetes]name=Kubernetesbaseurl=/Kubernetes/yum/repos/Kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=/Kubernetes/yum/doc/yum-key.gpg/Kubernetes/yum/doc/rpm-package-key.gpgEOFdocker安装环境准备2安装docker服务安装docker服务各节点部署docker服务,以Master1节点为例[root@master1~]#yuminstalldocker-ce-20.10.6docker-ce-cli-20.10.6containerd.io-y[root@master1~]#systemctlstartdocker&&systemctlenabledocker.service2安装docker-ce安装docker服务[root@master1~]#cat>/etc/docker/daemon.json<<EOF{"exec-opts":["native.cgroupdriver=systemd"],"registry-mirrors":[""]}EOF[root@master1~]#systemctldaemon-reload[root@master1~]#systemctlrestartdocker[root@master1~]#systemctlstatusdocker以master1节点为例,master2和node1节点重复上述操作。2配置镜像加速器和驱动ThankYOU!Kubernetes高可用集群-高可用配置目录01任务高可用配置软件包准备02任务学习目标【知识目标】●了解kubeadm工具的使用方法;●

掌握Kubernetes集群的高可用配置。【技能目标】●

能够利用keepalived+nginx实现k8sapiserver节点高可用;●

能够基于搭建过程中出现的问题进行基础排错。1软件包准备1安装软件包三节点安装初始化Kubernetes需要的软件包,并启动kubelet服务,设置开机自启,以master节点为例,代码如下:[root@master1~]#yuminstall-ykubelet-1.20.6kubeadm-1.20.6kubectl-1.20.6[root@master1~]#systemctlenablekubelet[root@master1~]#systemctlstartkubel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论