zoukankan      html  css  js  c++  java
  • Kubernetes实战模拟一(wordpress基础版)

    Kubernetes实战模拟一(wordpress基础版)

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

    Kubernetes实战模拟三(wordpress健康检查和服务质量QoS)

    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

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

    原理

    Wordpress 

    Wordpress 是一个基于 PHP 和 MySQL 的流行的开源内容管理系统,拥有丰富的插件和模板系统。一个能够解析 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

    由于我们这里 MySQL 和 Wordpress 在同一个 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,为最简单的问题,我们将在此版本上改进架构,不断的优化

    人生得意须尽欢,莫使金樽空对月。 天生我材必有用,千金散尽还复来。
  • 相关阅读:
    RedisCluster的rename机制失败报错,解决又是数据倾斜问题
    开发如何避免redis集群访问倾斜和数据倾斜
    Pika 连接 rabbitmq 集群
    RabbitMQ概念及环境搭建(三)RabbitMQ cluster
    Rabbitmq安装过程和踩过的坑( 二 集群搭建 )
    java中<<、>>、>>>
    用WordPress 插入广告的几种方法
    macOS Mojave 卡顿问题解决
    前端元编程——使用注解加速你的前端开发
    如何优雅安全地在深层数据结构中取值
  • 原文地址:https://www.cnblogs.com/heian99/p/14624036.html
Copyright © 2011-2022 走看看