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 ...
随机推荐
- qt webassembly emscripten build 编译 环境搭建 JS调用C++传参
环境搭建 本文主要是针对ubuntu/mac编译环境搭建和调试环境 可以直接参考下面的dockerfile qt wasm build docker pull colorlength/qt-webas ...
- STM32F103使用FSMC对接正点原子3.5寸TFTLCD屏幕
fsmc的使用算是32里面有点绕的一个知识点,但是想明白了其实也没啥了. 首先我先放32个0在这儿: 0000 0000 0000 0000 0000 0000 0000 0000 [3 ...
- 2020.4.2关于java.pta的总结
0.前言 本文是有关pta2020.3至2020.4所有面向对象程序课程(java)共三次作业的阶段性总结,是java学习最开始起步时期的成果. 1.作业过程总结 这三次作业,是从c++过渡到java ...
- 输入一段字符(只含有空格和字母,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。
#include<stdio.h>#include<string.h>main(){ int i,j=0,m,count,max; char a[100]; ...
- tcpdump 对指定pod 进行抓包分析
tcpdump kubectl get pod -n imas imas-chabot-759bc8c6cf-bvq7m -o json 获取到pod所在的容器信息,在对应的宿主机获取卡片信息. do ...
- C#实现控制台打印年历
C#实现控制台打印年历 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System. ...
- jvm垃圾收集器汇总
1.吞吐量和延时 吞吐量:吞吐量指的是cpu的利用时间,计算公式是 运行用户代码时间 / (用户代码时间 + 垃圾收集时间),吞吐量越大说明cpu的利用率越大. 延时:延时指的是停顿时间,用户代码不 ...
- PointGNN未修改之前实验结果 ---car
10个epoch中1-4:
- Linux Broadcom Bluetooth BCM43142A0 蓝牙驱动安装
Linux Broadcom Bluetooth BCM43142A0 蓝牙驱动安装 想转到Linux,奈何蓝牙鼠标不识别. 经历了4个发行版的努力(Linux Mint,Pop!OS,OpenSus ...
- 01.html大致主体格式
<!DOCTYPE html> 不是HTML标签,就是文档声明标签 告诉浏览器使用哪种html版本来显示网页,其必须在文档中的最前面位置,要放在<html>标签之前, < ...