容器只是对单个进程的隔离和封装,实际的应用场景要求许多的应用进程互相协同工作,因此出现了容器编排,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-resourcesexplain命令查看,查看API对象状态可以用getdescribelogs,操作对象可以用runapplyexecdelete

YAML具有固定的格式,开头必须写的字段是apiVersionkindmetadata,表示对象的版本、种类和名字等元信息,实体对象如Pod、Job和CronJob会再有spec字段描述对象的期望状态,最基本的就是容器信息,非实体对象如ConfigMap、Secret使用的是data字段,记录了一些静态的字符串信息

网站基本构建

与Docker搭建Wordpress网站不同的是,Kubernetes多了对应用的封装以及网络环境,Wordpress和MariaDB这两个应用被封装了Pod (由于都是在线业务,所以不使用Job/CronJob),运行所需的环境变量被改写为ConfigMap,统一用声明式来管理,与此同时,Kubernetes集群在内部维护了一个自己的专用网络,这个网络和外界隔离,要用特殊的端口转发方式来传递数据,还要在集群之外用Nginx反向代理该地址,才能实现与外部沟通

编排MariaDB

首先编排MariaDB对象,要求一些环境变量: 数据库名称、用户名和密码,使用YAML定义:

  1. apiVersion: v1
  2. data:
  3. DATABASE: 'db'
  4. USER: 'wp'
  5. PASSWORD: '123'
  6. ROOT_PASSWORD: '123'
  7. kind: ConfigMap
  8. metadata:
  9. creationTimestamp: null
  10. name: maria-cm

这里定义了数据库名称为db,用户名为wp,密码为123,ROOT用户密码为123,编辑Pod对象的YAML文件,将配置信息注入到Pod,让MariaDB运行时从环境变量读取这些信息:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. labels:
  5. app: wordpress
  6. role: database
  7. name: maria-pod
  8. spec:
  9. containers:
  10. - image: mariadb:10
  11. name: maria
  12. imagePullPolicy: IfNotPresent
  13. ports:
  14. - containerPort: 3306
  15. envFrom:
  16. - prefix: 'MARIADB_'
  17. configMapRef:
  18. name: maria-cm

envFrom这个字段可以一次性将ConfigMap里的字段全部导入进Pod,并且能够制定变量名的前缀

使用apply运行这个容器:

  1. $ minikube kubectl -- apply -f maria-cm.yml
  2. pod/maria-cm created
  3. $ minikube kubectl -- apply -f maria-pod.yml
  4. pod/maria-pod created

查看运行状态,加-o wide查看IP地址:

  1. $ minikube kubectl -- get pod -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. maria-pod 1/1 Running 0 3m55s 172.17.0.2 minikube <none> <none>

数据库现在正常运行了,IP地址是172.17.0.2

编排Wordpress

先用ConfigMap定义其环境变量:

  1. apiVersion: v1
  2. data:
  3. HOST: '172.17.0.2'
  4. USER: 'wp'
  5. PASSWORD: '123'
  6. NAME: 'db'
  7. kind: ConfigMap
  8. metadata:
  9. name: wp-cm

在这个ConfigMap里要注意的是HOST字段,必须是MariaDB Pod的IP地址

之后编写Pod对象文件,为了简化环境变量同样使用了envFrom:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. labels:
  5. app: wordpress
  6. role: website
  7. name: wp-pod
  8. spec:
  9. containers:
  10. - image: wordpress:5
  11. name: wp-pod
  12. imagePullPolicy: IfNotPresent
  13. ports:
  14. - containerPort: 80
  15. envFrom:
  16. - prefix: 'WORDPRESS_DB_'
  17. configMapRef:
  18. name: wp-cm

接着使用kubectl apply创建对象:

  1. $ minikube kubectl -- apply -f wp-cm.yml
  2. configmap/wp-cm created
  3. $ minikube kubectl -- apply -f wp-pod.yml
  4. pod/wp-pod created

随后查看状态:

  1. $ minikube kubectl -- get pod -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. maria-pod 1/1 Running 0 5m50s 172.17.0.2 minikube <none> <none>
  4. 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:

  1. $ minikube kubectl -- port-forward wp-pod 8080:80 &
  2. [1] 21501
  3. $ Forwarding from 127.0.0.1:8080 -> 80
  4. Forwarding from [::1]:8080 -> 80

末尾使用&是将进程挂到后台运行,使用命令fg可以将任务带回前台

创建Nginx

在Kubernetes之外启动Nginx反向代理

这里使用Docker即可,编辑Nginx配置文件:

  1. server {
  2. listen 80;
  3. default_type text/html;
  4. location / {
  5. proxy_http_version 1.1;
  6. proxy_set_header Host $host;
  7. proxy_pass http://127.0.0.1:8080
  8. }
  9. }

使用docekr启动:

  1. $ sudo docker run -d --rm --net=host -v /tmp/proxy.conf:/etc/nginx/conf.d/default.conf nginx:alpine
  2. 2b7332de74939d668067ba0b8181d12cacaaa664458de541ba34686abcefd495

查看进程列表:

  1. $ sudo docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 2b7332de7493 nginx:alpine "/docker-entrypoint.…" 33 seconds ago Up 32 seconds eloquent_panini

Nginx已经启动

使用浏览器访问 http://127.0.0.1:8080,即可看到wordpress页面

Kubernetes入门实践(搭建Wordpress网站)的更多相关文章

  1. 微服务 + Docker + Kubernetes 入门实践 目录

    微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...

  2. kubernetes入门实践

    k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...

  3. Linux下安装搭建WordPress网站

    WordPress简介 WordPress 是一种使用 PHP语言和 MySQL数据库开发的开源.免费的Blog(博客,网志)引擎,用户可以在支持 PHP 和 MySQL 数据库的服务器上建立自己的 ...

  4. 12、利用docker快速搭建Wordpress网站

    一.准备工作 结构图: 用户访问页面,Nginx将请求进行转发,如果请求的是php页面,则通过FastCGI转发给后端php进行处理:如果非php页面,则直接返回静态页面. 关键点: mysql.ph ...

  5. 如何在VPS上搭建WordPress博客网站(史上最全图文教程)

    由于现在很多人仍然使用共享主机,所以我决定写这篇教程,教你如何设置自己的虚拟专用服务器(VPS),以便为启动一个 WordPress 网站准备好所有必要的服务. 为什么共享托管不是最好的选择? 你的 ...

  6. 利用XAMPP本地搭建WordPress博客

    现在越来越多的人利用WordPress搭建了自己的博客网站,我也是一样,但是还有一些人不知道怎么搭建WordPress网站的方法,因为怕弄 不好,所以也就没有花钱去做,所以这里我就讲讲怎么样利用XAM ...

  7. Windows下搭建Wordpress博客网站

    一:安装wamp Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使 ...

  8. Wordpress 网站搭建及性能监控方法详解!

    前言 说到 Wordpress,大家往往想到的是博客,其实,如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统.并且,如果你有一定的技术基础稍加改动,就可以搭建出新闻网站.企业网站 ...

  9. 搭建一个wordpress网站需要做哪些工作

    今天做了自己的个人网站:二飞日志 之前因为服务器的问题,因为备案的原因辛辛苦苦做的站点数据没了.还好的是没有多少数据.没关系,重新来.有了上一次的经验,这次搭建起来比较顺手.但是也出现了几个问题.下面 ...

  10. 基于DigitalOcean+LAMP+WordPress搭建个人网站

    1. 注册DigitalOcean并新建主机 为了搭建个人网站首先需要一个可以在公网范围访问的主机,可以选用国内如阿里云.国外如DigitalOcean的各种云主机提供商,这里选用DigitalOce ...

随机推荐

  1. qt webassembly emscripten build 编译 环境搭建 JS调用C++传参

    环境搭建 本文主要是针对ubuntu/mac编译环境搭建和调试环境 可以直接参考下面的dockerfile qt wasm build docker pull colorlength/qt-webas ...

  2. STM32F103使用FSMC对接正点原子3.5寸TFTLCD屏幕

    fsmc的使用算是32里面有点绕的一个知识点,但是想明白了其实也没啥了. 首先我先放32个0在这儿: 0000  0000  0000  0000  0000  0000  0000  0000 [3 ...

  3. 2020.4.2关于java.pta的总结

    0.前言 本文是有关pta2020.3至2020.4所有面向对象程序课程(java)共三次作业的阶段性总结,是java学习最开始起步时期的成果. 1.作业过程总结 这三次作业,是从c++过渡到java ...

  4. 输入一段字符(只含有空格和字母,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

    #include<stdio.h>#include<string.h>main(){    int i,j=0,m,count,max;    char a[100];     ...

  5. tcpdump 对指定pod 进行抓包分析

    tcpdump kubectl get pod -n imas imas-chabot-759bc8c6cf-bvq7m -o json 获取到pod所在的容器信息,在对应的宿主机获取卡片信息. do ...

  6. C#实现控制台打印年历

    C#实现控制台打印年历 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System. ...

  7. jvm垃圾收集器汇总

    1.吞吐量和延时 吞吐量:吞吐量指的是cpu的利用时间,计算公式是 运行用户代码时间  / (用户代码时间 + 垃圾收集时间),吞吐量越大说明cpu的利用率越大. 延时:延时指的是停顿时间,用户代码不 ...

  8. PointGNN未修改之前实验结果 ---car

    10个epoch中1-4:

  9. Linux Broadcom Bluetooth BCM43142A0 蓝牙驱动安装

    Linux Broadcom Bluetooth BCM43142A0 蓝牙驱动安装 想转到Linux,奈何蓝牙鼠标不识别. 经历了4个发行版的努力(Linux Mint,Pop!OS,OpenSus ...

  10. 01.html大致主体格式

    <!DOCTYPE html> 不是HTML标签,就是文档声明标签 告诉浏览器使用哪种html版本来显示网页,其必须在文档中的最前面位置,要放在<html>标签之前, < ...