栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

k8s开发基础-wordpress的部署演变

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

k8s开发基础-wordpress的部署演变

1.docker 安装mysql+workpress

安装一个mysql 和 一个wrokpress的容器,通过link关联

[root@node201 ~]# docker run -it -d --name wp-db -e MYSQL_ROOT_PASSWORD=apple123456 -e MYSQL_DATABASE=wpdb -v /root/k8s/wordpress/mysql:/var/lib/mysql mariadb

这里的数据库主机mariadb,后面创建wordpress容器使用--link wp-db:mariadb  通过mariadb访问wp-db的容器

简单版:一步步初始化

[root@node201 ~]# docker run -it -d --name wordpress --link wp-db:mariadb -v /root/k8s/wordpress/html:/var/www/html -p 3080:80  wordpress

复杂版:直接到创建站点名

[root@node201 ~]# docker run -it -d --name wordpress --link wp-db:mariadb -v /root/k8s/wordpress/html:/var/www/html -e WORDPRESS_DB_HOST=mariadb -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=apple123456 -e WORDPRESS_DB_NAME=wpdb -p 3080:80  wordpress

解释:

--link wp-db:mariadb  通过mariadb访问wp-db的容器

-p 3080:80       将wordpress的80端口映射到主机的3080端口 

 

 

 

清除环境

[root@node201 wordpress]# docker stop wp-db wordpress
wp-db
wordpress
[root@node201 wordpress]# docker rm wp-db wordpress
wp-db
wordpress

2.docker-compose部署 mysql+workpress

Dockerfile用于单个image的创建,并生成对应的单个容器。

Docker-compose用于多个容器的关联生成。

docker-compose 是用来 自动化 处理多个关联的docker容器的作业。

相当于ansible的playbook

2.1 安装docker-compose组件:

[root@node201 wordpress]# curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@node201 wordpress]# chmod +x /usr/local/bin/docker-compose

[root@node201 wordpress]# docker-compose -version
docker-compose version 1.29.0, build 07737305

2.2 验证docker-compose.yml文件语法:

[root@node201 wordpress]# docker-compose config
ERROR:
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml  必须是固定文件名
        
[root@node201 wordpress]# mv docker_compose_wp.yml docker-compose.yml

[root@node201 docker-compose]# mkdir mysql html

[root@node201 docker-compose]# cat docker-compose.yml

version: '3.9'
services:
    wordpress:
      depends_on:
        - wp-db
      image: wordpress:latest
      links:
        - wp-db:mariadb
      environment:
        - "WORDPRESS_DB_HOST=mariadb"
        - "WORDPRESS_DB_USER=root"
        - "WORDPRESS_DB_PASSWORD=root123456"
        - "WORDPRESS_DB_NAME=wpdb"
      ports:
        - "3080:80"
      volumes:
        - /root/k8s/wordpress/docker-compose/html:/var/www/html
    wp-db:
      image: mysql
      environment:
        - "MYSQL_ROOT_PASSWORD=root123456"
        - "MYSQL_DATABASE=wpdb"
      volumes:
        - /root/k8s/wordpress/docker-compose/mysql:/var/lib/mysql

以上命令的意思是新建db和wordpress容器。等同于:

 [root@node201 ~]# docker run -it -d --name wp-db -e MYSQL_ROOT_PASSWORD=root123456 -e MYSQL_DATABASE=wpdb -v /root/k8s/wordpress/mysql:/var/lib/mysql mariadb

[root@node201 ~]# docker run -it -d --name wordpress --link wp-db:mariadb -v /root/k8s/wordpress/html:/var/www/html -p 3080:80  wordpress

2.3 运行docker-compose

[root@node201 docker-compose]# docker-compose -f docker-compose.yml  up -d
Creating network "docker-compose_default" with the default driver
Creating docker-compose_wp-db_1 ... done
Creating docker-compose_wordpress_1 ... done

[root@node201 docker-compose]# docker-compose ps
           Name                         Command               State          Ports        
------------------------------------------------------------------------------------------
docker-compose_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:3080->80/tcp
docker-compose_wp-db_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp

       

===========================================================

       docker-compose up    # 编排启动容器 -d 以守护模式启动

        docker-compose ps    # 查看容器

        docker-compose stop # 停止容器

        docker-compose start # 启动容器

       docker-compose logs  # 查看所有容器日志

        docker-compose stop; docker-compose rm    # 需要先stop然后删除容器

# docker-compose stop;docker-compose rm;rm -rf html/* mysql/*

3.dockerfile+docker-compose部署wordpress(nginx+php-fpm)

 docker run -it -d --name wp-db -e MYSQL_ROOT_PASSWORD=apple123456 -e MYSQL_DATABASE=wpdb -v /root/k8s/wordpress/docker-compose/dockerfile/mysql:/var/lib/mysql mariadb
 
 
 docker pull centos:7
 docker run -it --name wordpress --link wp-db:mariadb -p 3080:80 centos:7  /bin/bash
 # epel,remi repo for php-fpm, nginx, php-fpm for nginx
 yum install -y epel-release  &&  rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm &&
 #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 curl -L http://mirrors.aliyun.com/repo/epel-7.repo -o /etc/yum.repos.d/epel.repo &&
 yum install nginx net-tools -y &&
 yum -y install --enablerepo=remi --enablerepo=remi-php56  php php-fpm php-gd php-mysql php-common php-pear php-mbstring php-mcrypt
 docker cp nginx.conf wordpress:/etc/nginx/nginx.conf
 wget http://wordpress.org/latest.zip
 unzip latest.zip
 mv wordpress /usr/share/nginx/
 docker cp latest.zip wordpress:/usr/share/nginx
 yum install unzip -y && unzip latest.zip && chown -R apache:apache /usr/share/nginx/wordpress
 php-fpm
 nginx
 tail -f /var/log/nginx/access.log
 
 [root@c1737624ed6c /]# php-fpm --version
PHP 5.6.40 (fpm-fcgi) (built: Nov 15 2021 11:30:45)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
[root@91c098944819 wordpress]# ps -ef|grep php-fpm
apache     514   513  0 15:30 ?        00:00:04 php-fpm: pool www
apache     515   513  0 15:30 ?        00:00:04 php-fpm: pool www
[root@91c098944819 wordpress]# ps -ef|grep nginx
root       520     1  0 15:30 ?        00:00:00 nginx: master process nginx
nginx      521   520  0 15:30 ?        00:00:00 nginx: worker process

4.k8s pod+nfs_pv+service部署mysql+wordpress

[root@node201 wordpress]# cat wp_pod_test.yaml
---
# 1.创建namespace: longway
apiVersion: v1
kind: Namespace
metadata:
  name: longway


---
# 2.创建PVC: wordpress-pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-pvc
  namespace: longway  
  annotations:
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage-new"  #通过这里关联特定的nfs
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  storageClassName: nfs

---
# 3.创建pod
apiVersion: v1
kind: Pod
metadata:
  name: wordpress
  namespace: longway
  labels:
    app: wordpress    # <==== 这里添加一个label标签,pod 向外暴露pod的service NodePort型端口需要用标签选择器。
spec:
  containers:
  - name: wordpress
    image: wordpress
    ports:
    - containerPort: 80
      name: wdport
    env:
    - name: WORDPRESS_DB_HOST
      value: 127.0.0.1:3306    # <==== 这里不能是localhost数据库的localhost默认是去找socket文件,然而在不同的容器之间文件系统是隔离的,会导致报错;
    - name: WORDPRESS_DB_USER
      value: wordpress
    - name: WORDPRESS_DB_PASSWORD
      value: wordpress
    - name: WORDPRESS_LANG
      value: zh_CN
    imagePullPolicy: IfNotPresent
  - name: mysql
    image: mysql
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3306
      name: dbport
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: root123456
    - name: MYSQL_DATABASE
      value: wordpress
    - name: MYSQL_USER
      value: wordpress
    - name: MYSQL_PASSWORD
      value: wordpress
    volumeMounts:
    - name: db
      mountPath: /var/lib/mysql
  volumes:
    - name: db
      persistentVolumeClaim:
        claimName: wordpress-pvc
      #hostPath:
      #  path: /root/k8s/wordpress/mysql  #如果不使用nfs pvc,这里需要手动创建该目录
---

# 创建service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wordpress
  name: wp-svc
  namespace: longway
spec:
  ports:
  - port: 3080
    protocol: TCP
    targetPort: 80
  selector:
    app: wordpress
  type: NodePort

[root@node201 wordpress]# kubectl apply -f wp_pod_test.yaml
namespace/longway created
persistentvolumeclaim/wordpress-pvc created
pod/wordpress created
service/wp-svc created

[root@node201 wordpress]# kubectl get all -n longway
NAME            READY   STATUS    RESTARTS   AGE
pod/wordpress   2/2     Running   0          24s

NAME             TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/wp-svc   NodePort   10.105.100.133           3080:30941/TCP   23s

PVC有namespace的概念,PV没有namespace的概念!

root@node201 wordpress]# kubectl get pvc -n longway
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS              AGE
wordpress-pvc   Bound    pvc-f46f175b-5ccb-4109-92d8-b25e706910e9   2Gi        RWX            managed-nfs-storage-new   102s

nfs服务器端pvc目录命名规则: ns-pvc_name-volume_name

9.附录:php-fpm安装

1.清除依赖
yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64

2.配置epel源
yum install -y epel-release``wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

3.配置remi源
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

4.安装php5.6.x
yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

5.安装php-fpm
yum install --enablerepo=remi --enablerepo=remi-php56 php-fpm

6.配置开机启动服务
systemctl restart php-fpm``systemctl enable php-frm

7.查看是否安装成功
ps -ef | grep php``netstat -anp | grep 9000

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/844779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号