您好,欢迎访问三七文档
K8s部署操作一、K8s总体架构通过Kubectl提交一个创建RC的请求,该请求通过APIServer被写入etcd中,此时ControllerManager通过APIServer的监听资源变化的接口监听到这个RC事件,分析之后,发现当前集群中还没有它所对应的Pod实例,于是根据RC里的Pod模板定义生成一个Pod对象,通过APIServer写入etcd,接下来,此事件被Scheduler发现,它立即执行一个复杂的调度流程,为这个新Pod选定一个落户的Node,然后通过APIServer讲这一结果写入到etcd中,随后,目标Node上运行的Kubelet进程通过APIServer监测到这个“新生的”Pod,并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束。随后,我们通过Kubectl提交一个新的映射到该Pod的Service的创建请求,ControllerManager会通过Label标签查询到相关联的Pod实例,然后生成Service的Endpoints信息,并通过APIServer写入到etcd中,接下来,所有Node上运行的Proxy进程通过APIServer查询并监听Service对象与其对应的Endpoints信息,建立一个软件方式的负载均衡器来实现Service访问到后端Pod的流量转发功能。组件简述1etcd用于持久化存储集群中所有的资源对象,如Node、Service、Pod、RC、Namespace等;APIServer提供了操作etcd的封装接口API,这些API基本上都是集群中资源对象的增删改查及监听资源变化的接口。APIServer提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,通过对相关的资源数据“全量查询”+“变化监听”,这些组件可以很“实时”地完成相关的业务功能。ControllerManager集群内部的管理控制中心,其主要目的是实现Kubernetes集群的故障检测和恢复的自动化工作,比如根据RC的定义完成Pod的复制或移除,以确保Pod实例数符合RC副本的定义;根据Service与Pod的管理关系,完成服务的Endpoints对象的创建和更新;其他诸如Node的发现、管理和状态监控、死亡容器所占磁盘空间及本地缓存的镜像文件的清理等工作也是由ControllerManager完成的。组件简述2Scheduler集群中的调度器,负责Pod在集群节点中的调度分配。Kubelet负责本Node节点上的Pod的创建、修改、监控、删除等全生命周期管理,同时Kubelet定时“上报”本Node的状态信息到APIServer里。Proxy实现了Service的代理与软件模式的负载均衡器。二、基本概念MasterKubernetes里的Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和控制,基本上Kubernetes所有的控制命令都是发给它,它来负责具体的执行过程。我们后面所有执行的命令基本都是在Master节点运行的。Master节点通过占据一个服务器,一个主要的原因是它太重要了,它是整个集群的“首脑”,如果它宕机或者不可用,那么我们所有的控制命令都将失效。Node除了Master,Kubernetes集群中的其它机器被称为Node节点,在较早的版本中也被称为Minion。与Master一样,Node节点的可以是一台物理主机,也可以是一台虚拟机。Node节点才是Kubernetes集群中的工作负载节点。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载将会被Master自动转移到其它节点上。PodPod是Kubernetes最重要也是基本的概念,其组成结构如右图所示。它包含一个Pause容器和多个用户业务容器。Pause容器的作用:(1)代表整个容器组的状态。(2)Pod里的多个业务共享Paush容器的IP,共享Paush容器挂接Volume。既解决了密切相关的业务容器之间的通信问题,又解决了它们之间的文件共享问题。RC全称“ReplicationController”,中文名“副本控制器”。RC是Kubernetes系统中的核心概念之一,简单来说,它其实定义了一个期望的场景,即声明某种Pod的副本数量在在任意时刻都符合某个预期值。RC的定义包括如下几个部分:(1)Pod期待的副本数(replicas)(2)用于筛选目标Pod的LabelSelector(3)当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板(template)ServiceService也是Kubernetes里最核心的资源对象之一,它定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,Service与其后端Pod副本集群之间则是通过LabelSelector来实现“无缝对接”的。而RC的作用实际上是保证了Service的服务能力和服务质量始终处于一预期的标准。下图为Pod、RC与Service的关系图三、实际操作1.创建MySqlrc文件:mysql-master-rc.yamlsvc文件:mysql-master-svc.yaml2.创建Eureka、Zuul、Hystrix、Config四个服务中心rc文件:qishon-center-master-rc.yamlsvc文件:config-svc.yaml、eureka-svc.yaml、hystrix-svc.yaml、zuul-svc.yaml在Master主机上通过命令操作文件可以创建或删除RC和SVC。常用命令1nodekubectlgetnodes==》查看集群中的主机kubectl-s[|hostname:8080]getnodekubectldescribenode[ip|hostname]==》查看指定主机详细信息RCkubectlcreate-f[xxxx-rc.yaml]==》通过文件创建rc和对应podkubectldelete-f[xxxx-rc.yaml]==》通过文件删除rc和对应的podkubectlgetrc==》查看已经存在的rckubectldeleterc[rc_name]==》删除指定名称的rckubectldescriberc[rc_name]==》查看指定rc详情常用命令2Podkubectlgetpods==》查看已经创建的所有podkubectldeletepod[pod_name]==》删除指定名称的podkubectldescribepod[pod_namej]==》查看指定名称的pod详情kubectllogs[pod_name]==》查看POD的容器日志(单容器)kubectllogs-f[pod_name]==》查看POD的容器日志(单容器,实时)kubectllogs[pod_name][container_name]==》查看POD中指定容器的日志(多容器)kubectllogs-f[pod_name][container_name]==》查看POD中指定容器的日志(多容器,实时)常用命令3svckubectlcreate-f[xxxx-svcyaml]==》通过文件创建svckubectldelete-f[xxxx-svc.yaml]==》通过文件删除svckubectlgetsvc==》查看所有svckubectldescribesvc[svc_name]==》查看指定名称的svc详情kubectlexposerc[rc_metadata_name]==》通过rc创建一个svckubectldeletesvc[svc_name]==》删除指定的svcmysql-master-rc.yaml1.apiVersion:v12.kind:ReplicationController3.metadata:4.name:mysql-master5.labels:6.name:mysql-master7.spec:8.replicas:19.selector:10.name:mysql-master11.template:12.metadata:13.labels:14.name:mysql-master15.spec:16.containers:17.-name:mysql18.image:mysql:latest19.volumeMounts:20.-mountPath:/var/lib/mysql21.name:mysqldb22.imagePullPolicy:IfNotPresent23.ports:24.-containerPort:330625.env:26.-name:MYSQL_ROOT_PASSWORD27.value:12345628.#指定目标node调度pod29.nodeSelector:30.zone:node6031.volumes:32.-name:mysqldb33.hostPath:34.path:/home/volume/mysqlmysql-master-svc.yaml1.apiVersion:v12.kind:Service3.metadata:4.name:mysql5.#labels:6.#name:mysql-master7.spec:8.type:NodePort9.ports:10.-port:330611.nodePort:330612.selector:13.name:mysql-masterqishon-center-master-rc.yaml1.apiVersion:v12.kind:ReplicationController3.metadata:4.name:qscenter5.spec:6.replicas:17.selector:8.name:qscenter9.template:10.metadata:11.labels:12.name:qscenter13.spec:14.containers:15.-name:eureka-server16.image:qishon/eureka-server:latest17.imagePullPolicy:IfNotPresent18.ports:19.-containerPort:111120.env:21.-name:EUREKA_HOST22.value:'localhost'23.-name:config-server24.image:qishon/config-server:latest25.imagePullPolicy:IfNotPresent26.ports:27.-containerPort:700128.env:29.-name:EUREKA_HOST30.value:'localhost'31.-name:zuul-proxy32.image:qishon/zuul-proxy:latest33.imagePullPolicy:IfNotPresent34.ports:35.-containerPort:707036.env:37.-name:EUREKA_HOST38.value:'localhost'39.-name:CONFING_HOST40.value:'localhost'41.-name:hystrix-dashboard42.image:qishon/hystrix-dashoboard:latest43.imagePullPolicy:IfNotPresent44.ports:45.-containerPort:200546.#指定目标node调度pod47.nodeSelector:48.zone:node60eureka-svc.
本文标题:K8s部署操作
链接地址:https://www.777doc.com/doc-4422454 .html