课程实录 | 从 0 搭建高可用 Wordpress 博客(上)
原文作者:陶辉
原文链接:课程实录 | 从 0 搭建高可用 Wordpress 博客(上)
转载来源:NGINX 开源社区
编者按——本文为系列课程《在 K8s 中用好 NGINX 》的第一节《从 0 搭建高可用 WordPress 博客》的课程实录。由于文章较长,将分为上下两篇发布,点击这里收看课程回放。
在本节课程中,陶辉老师首先基于环境搭建,讲解如何从 0 搭建高可用 Wordpress 博客,然后展开讲述存储、网络部分课程概述了作者对 K8s 的理解、虚拟化技术与容器的差别,也帮助您快速了解 K8s 的架构、重要组件以及教学中所用例子的最终架构。
课程背景简介
本文将分享如何在 K8s 中用好 NGINX。K8s 目前是一个特别火的话题,无论是 Server List、还是 FAS 都是要基于 K8s 来构建。一些基础实力不是很强的非互联网公司,他们也有能力去管理几万个节点共同完成一些任务,很多时候都归功于 K8s。
在开始之前,我们需要基于环境来讲解 NGINX ,因为 K8s 太灵活了, NGINX Ingress、Load Balance 等等用法太多,必须要不断的调整并通过实操进行学习。
第一步,通过一个案例来讲解如何从 0 搭建高可用 Wordpress 博客。Wordpress 是用 PHP 语言编写,和 MySql 数据库连通,可以定制化搭建各种类型网站的博客。环境搭建完成后就可以开始研究网络以及存储的整个架构。
托管:从 IaaS 到 PaaS
在演示之前分享一下我对 K8s 的理解。由于这是一个比较新的技术,很多概念和版本都在变更中,所以会基于我的理解为大家讲解,未必会适用于未来。
比如我刚工作的时候还没有公有云,如果你在大厂可能会有自己的 IDC 机房,但如果你是在一个小公司很多时候服务器是放在运营商的机房里,所以需要从头搭建——操作系统需要自己安装,存储、网络、甚至包括长时间不间断的 UPS 电源等等,这些设备都需要自己搭建,特别是以前运维和开发分工不明、新应用上线时更加麻烦,准备时长也很长。
后来有了公有云,其以前的名称叫 IaaS,本次演示也将基于 IaaS 上。那么 K8s 和 IaaS 的差别在哪里呢?做 IaaS 的时候我们需要理解操作系统,例如在 Windows 2000 或是在 Linux Server 上操作是不一样的,甚至 Linux 里的 CentOS 和 Ubuntu 也有略微的差别。
本次讲解将会基于 CentOS 和 Ubuntu 搭建 K8s 系统。如果分布式系统里宕掉一个机器还需要容灾,要监控机器之间的流量,比如针对公网的出入流量、内网之间的 CPU、还有磁盘、RO 等等。
接下来着重介绍 PaaS,以前公有云的 PaaS 是非常不落地的,它本质上是希望开发只需要提交代码和数据就可以了。至于服务上如何调度、运维并演化成进程以及进程如何切换都由 PaaS 平台自主完成,然而以前的 PaaS 平台做不到这些, K8s 却可以完成。
前端经常会讲的 ServerLess/FaaS,这些 function as a service 只是一些概念,本次讲解不做展开分析。
包括云原生也是同样的道理,我们希望开发只关注核心的东西,并不需要分散精力去处理运维工作,不像在用 IaaS 的时候每个公司都要有运维。
在未来云原生的趋势下,公司将不再需要运维,因为我们可以把运维的工作交给云厂商,这也是为什么这些公有云特别积极的在推 K8s 。
虚拟化技术与容器的差别
容器和之前的虚拟化技术有什么差别呢?比如演示需要用的腾讯云 CentOS 7.i 系统,我们在这个虚拟机上面放了很多 K8s 系统。他们之间有什么差别呢?
其实我以前也是从事虚拟化技术的,在 2012 年加入阿里云的时候还在用英国剑桥大学的一个开源虚拟化系统 Xen 进行开发,当时底层用的 Linux,基于 Xen 这一层,上面可以有 Windows、Linux 等各种不同版本的虚拟化操作系统。
在 2013 年时,阿里云从 Xen 切到了 KVM,因为当时认为 KVM 性能提升了很多,但和今天的容器相比较还是天差地别的。
KVM 其实是一种很重的虚拟化,它上面和底层的操作系统之间会消耗很多的性能和内存。在虚拟化里,底层放 Linux 上层放 Windows,或者底层放 Linux 2.6 内核,上层放 Linux 4.9 内核都是可以的。
但容器不一样,其内核是共用的,这些容器之间只是通过名字空间隔离的技术,也就是 Linux 中的 C-Group 技术来把进程、网络,和磁盘给隔离开。
如果你用了 Docker 就会知道它只是做到了隔离,并不会占用其他资源。在宿主机上能看到所有 Docker 里面跑的 Apache、PHP 全都一目了然。所以它性能很高,只是简单隔离了一下网络和 CPU。其中 CPU 就是把时间片隔离了,可以设置只用 25% 的 CPU、单颗CPU等等,并且隔离网络。以上就是 KVM 和容器两者之间的差别。
然而这个名字空间隔离是极其有限的,比如如果在某个虚拟机里改系统时间,物理机的系统时间是不受影响的。而容器就不行了,由于系统时间只有一个,修改一个容器之后所有的容器都会被改掉。
所以名字空间隔离技术其实是很轻且很有限的,像是进程、存储、网络、系统时间等等这些是没有办法进行隔离的。
了解 K8s 架构
在演示部署之前,需要先了解 K8s 架构里面有哪些东西。大部分人在学习 K8s 的时候,可能公司运维已经做好了搭建,所以对架构怎么部署并不用关注。
但在今天的讲解中,由于我需要经常调整 K8s 的网络去演示 NGINX 和 K8s 之间的关系,所以必须从头开始搭建。
K8s 的架构核心是在每一个服务器上,比如目前我们做搭建的两台服务器,它们都被部署了 Kubelet。 会负责管理容器,所以不能在容器内运行,这需要先安装 Kubelet。当部署 Kubelet 后就可以管理每台 Linux 上的容器了,比如 Docker 也是一种容器。
如果不用 Docker 也没关系,曾有新闻报道表示容器运行时不支持 Docker 了,这其实是一个误读。比如我们看图中的红线,这代表着操作系统通过驱动去使用硬件。
操作系统和 Container Runtime (容器运行时)中间的黄线是 OCI(Open Container Initiative)它包含了容器镜像的标准,也就是当我们 pull 一个镜像的时候所需的所有规则,以及容器运行起来的时候怎样去启动进程等等,这两个接口标准都放在 OCI里。OCI 是很多公司包括 Docker 所使用的一种规范。而 Docker 更多只适合单机运行,它的集群非常不好用。
后来 K8s 发展的特别好,因为它的定位从一开始就不是为单机交付进行服务的。K8s 核心的关键是在于 Controller Manager 和 Scheduler,并且使用一种声明式的语言编排。
比如我会先定义清楚前面有 3 个 PHP 的 Wordpress,后面有一个 MySql 是组倍的或是一组多倍的,前面有几个 Load Balance,中间是读写分离或是别的等等,这些东西先定义清楚并且写在 yaml 文件中,然后提交给 K8s 由它自己来帮我维护。这就是 k8s 的切入点,是我们能维护上万台节点的关键所在。
而 Docker Swam 的切入点就差很多了并且很不灵活,所以 K8s 自己设计了一套容器运行时接口(container runtime interface)。
上图中黄色的线是很多厂商共同定制的 OCI 标准,绿色的线是 K8s 自己的 CI。对 K8s 来说,无论是否适用于 OCI ,只要能支持这条绿色的 CI 接口,就能知道怎么去拉镜像、起容器、怎么去管理了。所以核心在于把 kubelet 安装上,其他东西自然就受支持了。
更多资源
想要更及时全面地获取 NGINX 相关的技术干货、互动问答、系列课程、活动资源?
请前往 NGINX 开源社区:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
分享会上狂吹MySQL的4大索引结构,没想到~~~
文章内容整理自【博学谷狂野架构师】 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构 上实现高级查找算法,这种数据结构就是索引。 优缺点: 优点: 提高数据检索效率,降低数据库的IO成本 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗 缺点: 索引列也是要占用空间的 索引大大提高了查询效率,但降低了更新的速度,比如 INSERT、UPDATE、DELETE 索引结构 索引结构 描述 B+Tree 最常见的索引类型,大部分引擎都支持B+树索引 Hash 底层数据结构是用哈希表实现,只有精确匹配索引列的查询才有效,不支持范围查询 R-Tree(空间索引) 空间索引是 MyISAM 引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少 Full-Text(全文索引) 是一种通过建立倒排索引,快速匹配文档的方式,类似于 Lucene, Solr, ES 上述是MySQL中所支持的所有的索引结构,接下来,我们再来看看不同的存储引...
- 下一篇
这可能是最为详细的Docker入门吐血总结
Docker是什么? 在计算机技术日新月异的今天,Docker在国内发展的如火如荼,特别是在一线互联网公司,Docker的使用是十分普遍的,甚至成为了一些企业面试的加分项,不信的话看看下面这张图。 这是我在某招聘网站上看到的招聘 Java开发工程师 的招聘要求,其中有一条熟悉docker成为了你快速入职的加分项,由此可见熟悉docker在互联网公司的地位之重要。 当然对于我们 CTF选手 而言,熟悉docker可以快速搭建CTF环境,完美地还原比赛真实漏洞的场景,帮助我们快速提升自己。 市面上已经有很多优秀的教程,但是很多原理性的东西,笔者认为那些教程对初学者而言还是很难理解,感觉没有说清楚(笔者自己都觉得挺懵逼的),为了让初学者少走弯路,我将以我的学习经历以及作为一个 CTF选手 的角度,编写此套教程,来带大家去了解并熟练运用docker,祝愿各位读者朋友们学完此套教程后,在未来企业面试中能够多一项加分的筹码,能够帮助到大家,我觉得就很值了。 既然说了这么多,docker到底是个什么东西呢? 我们在理解docker之前,首先我们得先区分清楚两个概念,容器和虚拟机。 可能很多读者朋...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,CentOS7官方镜像安装Oracle11G