k8s的LNMP部署

架构图:

在这里插入图片描述

镜像

首先我们将nginx和php镜像准备好,并且将其推送到镜像仓库中:
自己没有Dockerfile文件得可以下载我的:
https://download.csdn.net/download/qq_25611295/10672202

docker login 192.168.1.40:5000
nginx:
docker build -t  192.168.1.40:5000/lnmp/nginx .
docker push 192.168.1.40:5000/lnmp/nginx

php:
docker bulid -t 192.168.1.40:5000/lnmp/php .
docker push 192.168.1.40:5000/lnmp/php

mysql:
docker pull mysql:5.6
docker tag 1f47fade220d 192.168.1.40/lnmp/mysql
docker push 192.168.1.40:5000/lnmp/mysql

检测仓库:
仓库配置:https://blog.csdn.net/qq_25611295/article/details/80967135

[root@k8s-g1 ~]# curl -u liaochao:123456 192.168.1.40:5000/v2/_catalog
{"repositories":["lnmp/mysql","lnmp/nginx","lnmp/php","nginx","php"]}

认证:

镜像准备好以后我们需要配置一些认证文件,比如,mysql的账户密码,仓库的账户密码等等,我们需要将这些放入k8s的认证中
mysql:
创建mysql密码的认证

kubectl create secret generic mysql-pass --from-literal=password=123456

检测:

[root@master LNMP]# kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-5bjhk   kubernetes.io/service-account-token   3         24d
liaochao-https        kubernetes.io/tls                     2         6d
mysql-pass            Opaque                                1         19s

创建仓库认证:
查看认证信息:(bash64 -wo 代表以64位转码展示并且不换行)

cat .docker/config.json |base64 -w0

然后我们根据得到的数据创建认证:

[root@master LNMP]# cat docker-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: registrypullsecret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEuNDA6NTAwMCI6IHsKCQkJImF1dGgiOiAiYkdsaGIyTm9ZVzg2TVRJek5EVTIiCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJEb2NrZXItQ2xpZW50LzE4LjA2LjAtY2UgKGxpbnV4KSIKCX0KfQ==
type: kubernetes.io/dockerconfigjson

创建

kubectl create -f docker-secret.yaml

检测:

[root@master LNMP]# kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-5bjhk   kubernetes.io/service-account-token   3         24d
liaochao-https        kubernetes.io/tls                     2         7d
mysql-pass            Opaque                                1         23m
registrypullsecret    kubernetes.io/dockerconfigjson        1         12s

配置lnmp环境

pv 数据存储:

[root@master LNMP]# cat pv.yaml
apiVersion: v1
#使用glusterfs做存储,不懂glusterfs的请参考其他文章
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: "glusterfs-cluster"
    path: "gv1"
---
#使用nfs做存储
apiVersion: v1
kind: PersistentVolume
metadata:
  name: wp-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /opt/container_data/wp-wwwroot
    server: 192.168.1.39

php配置:

[root@master LNMP]# cat php-deployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: wordpress-php
  labels:
    app: wordpress
spec:
  ports:
    - port: 9000
  selector:
    app: wordpress-php
    tier: frontend
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pvc
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: wordpress-php
  labels:
    app: wordpress
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wordpress-php
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress-php
        tier: frontend
    spec:
      containers:
      - name: php
        image: 192.168.1.40:5000/lnmp/php
        ports:
        - containerPort: 9000
          name: wordpress
        volumeMounts:
#用于php解析的目录
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
##拉取镜像时的用户认证,没有的时候注释掉这2行
      imagePullSecrets:
        - name: registrypullsecret
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pvc

nginx配置:
此处nginx和php共用一个pv,pvc

[root@master LNMP]# cat nginx-deployment.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-wp-config
data:
  site.conf: |-
    server {
        listen 80;
        server_name localhost;
        root html;
        index index.html index.php;

        location ~ \.php$ {
            root html;
            fastcgi_pass wordpress-php:9000;
            fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_connect_timeout 60s;
            fastcgi_read_timeout 300s;
            fastcgi_send_timeout 300s;
        }
    }
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-nginx
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress-nginx
    tier: frontend
  type: NodePort
  sessionAffinity: ClientIP
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: wordpress-nginx
  labels:
    app: wordpress
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wordpress-nginx
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress-nginx
        tier: frontend
    spec:
      containers:
      - name: nginx
        image: 192.168.1.40:5000/lnmp/nginx
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /usr/local/nginx/html
        - name: config
          mountPath: /usr/local/nginx/conf/vhost/site.conf
          subPath: site.conf
      imagePullSecrets:
        - name: registrypullsecret
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pvc
      - name: config
        configMap:
          name: nginx-wp-config

yaml文件准备好以后,创建:

kubectl create -f mysql-deployment.yaml
kubectl create -f php-deployment.yaml
kubectl create -f nginx-deployment.yaml

检测存储:

kubectl get pv,pvc
[root@k8s-g1 lnmp]# kubectl get pv,pvc
NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM                    STORAGECLASS   REASON    AGE
persistentvolume/mysql-pv   20Gi       RWX            Retain           Bound     default/mysql-pv-claim                            17m
persistentvolume/wp-pv      5Gi        RWX            Retain           Bound     default/wp-pvc                                    2h

NAME                                   STATUS    VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/mysql-pv-claim   Bound     mysql-pv   20Gi       RWX                           17m
persistentvolumeclaim/wp-pvc           Bound     wp-pv      5Gi        RWX                           2h

检测节点:(保证所有节点都是running)

kubectl get pod -o wide

检测nginx servers暴露出来的端口:

kubectl get svc

然后根据nginxserver暴露出来的端口测试nginx页面是否能访问
http://192.168.1.40:49665/
利用phpinfo测试php解析

[root@master wp-wwwroot]# cat test.php
<?php phpinfo(); ?>

部署wordpress

此处我们将nfs挂载的共享路径为:/opt/container_data/wp-wwwroot/
我们将wordpress放在此处:
数据库选择:wordpress ,主机名为:wordpress-mysql,账户密码选择:root 123456

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ansible角色是Ansible中的一种组织方式,它是一组任务、变量、文件和模板的集合,用于实现某个特定功能。在这个问题中,我们可以使用Ansible角色来部署LNMP(Linux、Nginx、MySQL和PHP)堆栈。 以下是一个简单的LNMP Ansible角色部署示例: 1. 创建一个名为“lnmp”的Ansible角色目录: ``` mkdir roles/lnmp ``` 2. 在lnmp目录中创建一个tasks目录: ``` mkdir roles/lnmp/tasks ``` 3. 在tasks目录中创建一个main.yml文件,其中包含以下任务: ``` - name: Install Nginx yum: name: nginx state: present - name: Start Nginx service service: name: nginx state: started - name: Install MySQL yum: name: mysql-server state: present - name: Start MySQL service service: name: mysqld state: started - name: Install PHP yum: name: php state: present - name: Install PHP-FPM yum: name: php-fpm state: present - name: Start PHP-FPM service service: name: php-fpm state: started ``` 这些任务将安装和启动Nginx、MySQL和PHP-FPM服务。 4. 在lnmp目录中创建一个vars目录: ``` mkdir roles/lnmp/vars ``` 5. 在vars目录中创建一个main.yml文件,其中包含以下变量: ``` --- nginx_conf_file: /etc/nginx/nginx.conf mysql_root_password: mysecretpassword php_conf_dir: /etc/php.d/ ``` 这些变量将用于配置Nginx、MySQL和PHP的设置。 6. 在lnmp目录中创建一个templates目录: ``` mkdir roles/lnmp/templates ``` 7. 在templates目录中创建一个nginx.conf.j2模板文件: ``` worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name localhost; location / { root /var/www/html; index index.php index.html index.htm; } location ~ \.php$ { root /var/www/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } } ``` 这个模板将用于生成Nginx的配置文件。 8. 在tasks目录中创建一个configure.yml文件,其中包括以下任务: ``` - name: Copy Nginx configuration file template: src: nginx.conf.j2 dest: "{{ nginx_conf_file }}" mode: '0644' - name: Set MySQL root password mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/lib/mysql/mysql.sock - name: Copy PHP configuration file copy: src: php.ini dest: "{{ php_conf_dir }}" mode: '0644' ``` 这些任务将生成Nginx配置文件、设置MySQL root密码和复制PHP配置文件。 9. 在lnmp目录中创建一个files目录: ``` mkdir roles/lnmp/files ``` 10. 在files目录中创建php.ini文件: ``` memory_limit = 128M upload_max_filesize = 64M post_max_size = 64M ``` 这个文件将被复制到PHP配置目录中。 11. 在lnmp目录中创建一个meta目录: ``` mkdir roles/lnmp/meta ``` 12. 在meta目录中创建一个main.yml文件,其中包含以下元数据: ``` --- dependencies: - { role: geerlingguy.repo-epel } - { role: geerlingguy.mysql } ``` 这些元数据将指定依赖项,以便安装EPEL存储库和MySQL角色。 13. 在playbook中使用lnmp角色: ``` - hosts: webserver become: true roles: - lnmp ``` 这个playbook将在webserver主机上使用lnmp角色。 这就是一个简单的LNMP Ansible角色部署示例。当然,还有很多其他的配置选项和任务可以添加到这个角色中,以满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值