Kubernetes实战模拟一wordpress基础版

Kubernetes是现在比较流行的容器化软件。我们日常也比较使用的多,我们都是慢慢的从陌生到熟悉的进阶,只有不断的学习,才能有收获。

Kubernetes专栏:https://blog.csdn.net/heian_99/category_9652886.html

Kubernetes官网地址:https://kubernetes.io/

这个专栏,模拟Kubernetes的日常发布流程。

源码地址:https://github.com/nangongchengfeng/Kubernetes/tree/main/wordpress-example

里面包含多个版本,现在是演示v1版本。

环境

Kubernetes:v1.18.3

docker:19.03.9

MysqL:5.7

wordpress:5.3.2-apache

版本1

思路:由于wordpressMysqL需要进行交互。版本1就把wordpressMysqL集成到一个pod运行,测试访问效果

原理

wordpress 

wordpress一个基于 PHPMysqL 的流行的开源内容管理系统,拥有丰富的插件和模板系统。一个能够解析 PHP 的程序和 MysqL 数据库。官方提供了镜像 https://hub.docker.com/_/wordpress

可以通过一系列环境变量去指定 MysqL 数据库的配置,只需要将这些参数配置上直接运行即可。

我们知道 wordpress 应用本身会频繁的和 MysqL 数据库进行交互,这种情况下如果将二者用容器部署在同一个 Pod 下面是不是要高效很多

因为一个 Pod 下面的所有容器是共享同一个 network namespace 的,下面我们就来部署我们的应用

 

命名空间:(namespace.yaml)

apiVersion: v1
kind: Namespace
Metadata:
  name: kube-example

应用清单:(deployment.yaml)

apiVersion: apps/v1
kind: Deployment
Metadata:
  name: wordpress
  namespace: kube-example
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
  template:
    Metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: wordpress:5.3.2-apache
        ports:
        - containerPort: 80
          name: wdport
        env:
        - name: wordpress_DB_HOST
          value: localhost:3306
        - name: wordpress_DB_USER
          value: wordpress
        - name: wordpress_DB_PASSWORD
          value: wordpress
      - name: MysqL
        image: MysqL:5.7
        imagePullPolicy: IfNotPresent
        args:  # 新版本镜像有更新,需要使用下面的认证插件环境变量配置才会生效
        - --default_authentication_plugin=MysqL_native_password
        - --character-set-server=utf8mb4
        - --collation-server=utf8mb4_unicode_ci
        ports:
        - containerPort: 3306
          name: dbport
        env:
        - name: MysqL_ROOT_PASSWORD
          value: rootPassW0rd
        - name: MysqL_DATABASE
          value: wordpress
        - name: MysqL_USER
          value: wordpress
        - name: MysqL_PASSWORD
          value: wordpress

由于我们这里 MysqLwordpress 在同一个 Pod 下面,所以在 wordpress 中我们指定数据库地址的时候是用的 localhost:3306,因为这两个容器已经共享同一个 network namespace 了,这点很重要,然后如果我们要想把这个服务暴露给外部用户还得创建一个 Service 或者 Ingress 对象

NodePort 类型的 Service:(service.yaml)

apiVersion: v1
kind: Service
Metadata:
  name: wordpress
  namespace: kube-example
spec:
  selector:
    app: wordpress
  type: NodePort
  ports:
  - name: web
    port: 80
    targetPort: wdport

因为只需要暴露 wordpress 这个应用,所以只匹配了一个名为 wdport 的端口,现在我们来创建上面的几个资源对象

kubectl apply -f namespace.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

接下来就是等待拉取镜像,启动 Pod:

$ kubectl get pods -n kube-example
NAME                         READY   STATUS    RESTARTS   AGE
wordpress-77dcdb64c6-zdlb8   2/2     Running   0          12m
$ kubectl get svc -n kube-example
NAME        TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
wordpress   NodePort   10.106.237.157   <none>        80:30892/TCP   2m2s

测试

当 Pod 启动完成后,可以通过上面的 http://<任意节点IP>:30892 这个 NodePort 端口来访问应用了

安装界面

问题

(1)pod中没有先后顺序

(2)单节点问题,没有高可用

(3)wordpress 是无状态服务器,如果增加节点,MysqL也会增加,数据不独立

(4)数据没有持久化

等等一些列的问题。

此版本1,为最简单的问题,我们将在此版本上改进架构,不断的优化

 

版本优化:

Kubernetes实战模拟二(wordpress高可用)

 

相关文章

我们有时候在定制WORDPRESS主题的时候,由于菜单样式的要求我...
很多朋友在做wordpree主题制作的时候会经常遇到一个问题,那...
wordpress后台的模块很多,但并不是每个都经常用到。介绍几段...
从WordPress4.2版本开始,如果我们在MYSQL5.1版本数据中导出...
很多网友会遇到这样一个问题,就是WordPress网站上传图片、附...
对于经常要在文章中出现代码的IT相关博客,安装一个代码高亮...