Kubernetes入门实践(搭建Wordpress网站)
容器只是对单个进程的隔离和封装,实际的应用场景要求许多的应用进程互相协同工作,因此出现了容器编排,Kubernetes将集群中的计算资源定义为节点(Node),其中又划分成控制面和数据面两类,控制面是Master节点,负责管理集群和运维监控,里面的核心组件是apiserver、etcd、scheduler、controller-manager,数据面是Worker节点,受Master节点的管控,其中的核心组件是kubelet、kube-proxy、container-runtime
Kubernetes还支持了插件,能够灵活扩展各项功能,常用的插件有DNS和Dashboard,同时为了更好地管理集群和业务应用,抽象除了API对象,使用YAML语言描述这些对象,最核心的对象是Pod,捆绑了一组存在密切协作关系的容器,容器之间共享网络和存储,在集群里必须一起调度一起运行。通过Pod概念,Kubernetes简化了对容器的管理工作,其他的所有任务都是通过对Pod这个最小单位的再包装实现的
除了核心的Pod对象,基于单一职责和对象组合这两个基本原则,另外还有4个简单的API对象: Job/CronJob和ConfigMap/Secret,Job/CronJob对应的是离线作业,逐层包装了Pod,添加了作业控制和定时规则,ConfigMap/Secret对应的是配置信息,要以环境变量或者存储卷的形式注入进Pod,然后进程才能在运行时使用
Kubernetes提供了一个客户端工具,名叫kubectl,直接与Master节点的apiserver通信,将YAML文件发送给RESTful接口,从而触发Kubernetes的对象管理工作流程,其命令有很多,可以用api-resources和explain命令查看,查看API对象状态可以用get、describe、logs,操作对象可以用run、apply、exec、delete
YAML具有固定的格式,开头必须写的字段是apiVersion、kind和metadata,表示对象的版本、种类和名字等元信息,实体对象如Pod、Job和CronJob会再有spec字段描述对象的期望状态,最基本的就是容器信息,非实体对象如ConfigMap、Secret使用的是data字段,记录了一些静态的字符串信息
网站基本构建
与Docker搭建Wordpress网站不同的是,Kubernetes多了对应用的封装以及网络环境,Wordpress和MariaDB这两个应用被封装了Pod (由于都是在线业务,所以不使用Job/CronJob),运行所需的环境变量被改写为ConfigMap,统一用声明式来管理,与此同时,Kubernetes集群在内部维护了一个自己的专用网络,这个网络和外界隔离,要用特殊的端口转发方式来传递数据,还要在集群之外用Nginx反向代理该地址,才能实现与外部沟通
编排MariaDB
首先编排MariaDB对象,要求一些环境变量: 数据库名称、用户名和密码,使用YAML定义:
apiVersion: v1
data:
DATABASE: 'db'
USER: 'wp'
PASSWORD: '123'
ROOT_PASSWORD: '123'
kind: ConfigMap
metadata:
creationTimestamp: null
name: maria-cm
这里定义了数据库名称为db,用户名为wp,密码为123,ROOT用户密码为123,编辑Pod对象的YAML文件,将配置信息注入到Pod,让MariaDB运行时从环境变量读取这些信息:
apiVersion: v1
kind: Pod
metadata:
labels:
app: wordpress
role: database
name: maria-pod
spec:
containers:
- image: mariadb:10
name: maria
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
envFrom:
- prefix: 'MARIADB_'
configMapRef:
name: maria-cm
envFrom这个字段可以一次性将ConfigMap里的字段全部导入进Pod,并且能够制定变量名的前缀
使用apply运行这个容器:
$ minikube kubectl -- apply -f maria-cm.yml
pod/maria-cm created
$ minikube kubectl -- apply -f maria-pod.yml
pod/maria-pod created
查看运行状态,加-o wide查看IP地址:
$ minikube kubectl -- get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
maria-pod 1/1 Running 0 3m55s 172.17.0.2 minikube <none> <none>
数据库现在正常运行了,IP地址是172.17.0.2
编排Wordpress
先用ConfigMap定义其环境变量:
apiVersion: v1
data:
HOST: '172.17.0.2'
USER: 'wp'
PASSWORD: '123'
NAME: 'db'
kind: ConfigMap
metadata:
name: wp-cm
在这个ConfigMap里要注意的是HOST字段,必须是MariaDB Pod的IP地址
之后编写Pod对象文件,为了简化环境变量同样使用了envFrom:
apiVersion: v1
kind: Pod
metadata:
labels:
app: wordpress
role: website
name: wp-pod
spec:
containers:
- image: wordpress:5
name: wp-pod
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
envFrom:
- prefix: 'WORDPRESS_DB_'
configMapRef:
name: wp-cm
接着使用kubectl apply创建对象:
$ minikube kubectl -- apply -f wp-cm.yml
configmap/wp-cm created
$ minikube kubectl -- apply -f wp-pod.yml
pod/wp-pod created
随后查看状态:
$ minikube kubectl -- get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
maria-pod 1/1 Running 0 5m50s 172.17.0.2 minikube <none> <none>
wp-pod 1/1 Running 0 55s 172.17.0.3 minikube <none> <none>
因为Pod都是运行在Kubernetes内部的私有网段里的,为了Wordpress映射端口号,让集群可见外可见,要使用kubectl port-forward命令,专门负责把本机的端口映射到目标对象的端口号,类似Docker的参数-p,经常用于Kubernetes的临时调试和测试
将本地的8080映射到Wordpress Pod的80,kubectl会把这个端口的所有数据都转发给集群内部的Pod:
$ minikube kubectl -- port-forward wp-pod 8080:80 &
[1] 21501
$ Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
末尾使用&是将进程挂到后台运行,使用命令fg可以将任务带回前台
创建Nginx
在Kubernetes之外启动Nginx反向代理
这里使用Docker即可,编辑Nginx配置文件:
server {
listen 80;
default_type text/html;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080
}
}
使用docekr启动:
$ sudo docker run -d --rm --net=host -v /tmp/proxy.conf:/etc/nginx/conf.d/default.conf nginx:alpine
2b7332de74939d668067ba0b8181d12cacaaa664458de541ba34686abcefd495
查看进程列表:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b7332de7493 nginx:alpine "/docker-entrypoint.…" 33 seconds ago Up 32 seconds eloquent_panini
Nginx已经启动
使用浏览器访问 http://127.0.0.1:8080,即可看到wordpress页面

Kubernetes入门实践(搭建Wordpress网站)的更多相关文章
- 微服务 + Docker + Kubernetes 入门实践 目录
微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...
- kubernetes入门实践
k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...
- Linux下安装搭建WordPress网站
WordPress简介 WordPress 是一种使用 PHP语言和 MySQL数据库开发的开源.免费的Blog(博客,网志)引擎,用户可以在支持 PHP 和 MySQL 数据库的服务器上建立自己的 ...
- 12、利用docker快速搭建Wordpress网站
一.准备工作 结构图: 用户访问页面,Nginx将请求进行转发,如果请求的是php页面,则通过FastCGI转发给后端php进行处理:如果非php页面,则直接返回静态页面. 关键点: mysql.ph ...
- 如何在VPS上搭建WordPress博客网站(史上最全图文教程)
由于现在很多人仍然使用共享主机,所以我决定写这篇教程,教你如何设置自己的虚拟专用服务器(VPS),以便为启动一个 WordPress 网站准备好所有必要的服务. 为什么共享托管不是最好的选择? 你的 ...
- 利用XAMPP本地搭建WordPress博客
现在越来越多的人利用WordPress搭建了自己的博客网站,我也是一样,但是还有一些人不知道怎么搭建WordPress网站的方法,因为怕弄 不好,所以也就没有花钱去做,所以这里我就讲讲怎么样利用XAM ...
- Windows下搭建Wordpress博客网站
一:安装wamp Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使 ...
- Wordpress 网站搭建及性能监控方法详解!
前言 说到 Wordpress,大家往往想到的是博客,其实,如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统.并且,如果你有一定的技术基础稍加改动,就可以搭建出新闻网站.企业网站 ...
- 搭建一个wordpress网站需要做哪些工作
今天做了自己的个人网站:二飞日志 之前因为服务器的问题,因为备案的原因辛辛苦苦做的站点数据没了.还好的是没有多少数据.没关系,重新来.有了上一次的经验,这次搭建起来比较顺手.但是也出现了几个问题.下面 ...
- 基于DigitalOcean+LAMP+WordPress搭建个人网站
1. 注册DigitalOcean并新建主机 为了搭建个人网站首先需要一个可以在公网范围访问的主机,可以选用国内如阿里云.国外如DigitalOcean的各种云主机提供商,这里选用DigitalOce ...
随机推荐
- 如何配置php.ini才能让PHP性能最大优化
用于生产环境中的PHP需要对其进行优化,可以让PHP自身发挥更好的性能,除了写好PHP代码,还要配置好php.ini.本文从内存.文件上传.会话缓冲输出.真实路径缓存这几个方面讲解php.ini的配置 ...
- [Leetcode 108]有序数组转BST二叉搜索树Convert Sorted Array to Binary Search Tree
题目 https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Given an integer array ...
- (三).JavaScript的分支结构和循环结构
1. 分支结构 1.1 分支语句之单分支 ①.语法: if(值,如果不是布尔值会强制转换成布尔值) { 代码块; } ②.案例: // 案例:如果a变量的值加键盘上输入的数大于100,就打印我爱你二狗 ...
- vs2013安装完VASSISTX助手之后字体变成斜体如何解决?
VC助手为最新版本. 1. 打开vc助手选项 2. 取消勾选"show stable symbols in italics"
- CentOS7 使用Mariadb 安装 hive
前提:已成功安装hadoop ──────────1. MariaDB安装 ──────────第一步 参照以下内容安装MariaDBhttps://www.linuxprobe.com/chapte ...
- gensim
官方文档: https://radimrehurek.com/gensim/models/word2vec.html 1.训练模型定义 from gensim.models import word2v ...
- nextcloud file location
- ubuntu手动创建快捷方式
新建document,重命名为XXX.desktop,打开文件 以sublime为例,填写 [Desktop Entry] Version=1.0 Type=Application Name=Subl ...
- 在服务器建立git服务端接收push后覆盖部署记录
1.在本地要部署的目录 git initgit clone --bare ./ my_project.git 把本地init仓库克隆到 my_project.git 2.上传my_project.gi ...
- rosetta Resfile语法和约束
介绍 参考:https://www.rosettacommons.org/docs/latest/rosetta_basics/file_types/resfiles resfile包含输入到Pack ...