在 Kubernetes 集群上部署一个简单的 Laravel 网络应用

2024-04-26 渥太华微生活

168359acffec5180~tplv-t2oaga2asx-jj-mark_3024_0_0_0_q75.png

在 Kubernetes 集群上部署一个简单的 Laravel 网络应用。


一、下载 Laravel 源代码:

cd laravel-kubernetes-demo
git clone https://github.com/laravel/laravel.git .

二、通过 Dockerfile 构建应用镜像:

1、在根目录中创建mysql.conf配置文件:

<VirtualHost *:80>
  DocumentRoot /var/www/html/public

  <Directory "/var/www/html/public">
    AllowOverride all
    Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

2、在根目录中创建Dockerfile文件:

# install all the application's dependencies
FROM composer:2.7.4 as build
WORKDIR /var/www/html
COPY . .
COPY .env.example .env
RUN composer install && php artisan migrate --force && php artisan key:generate

# prepare the webserver with PHP-mod
FROM php:8.2.18-apache
EXPOSE 80
COPY --from=build /var/www/html /var/www/html
COPY mysql.conf /etc/apache2/sites-available/000-default.conf
RUN chown -R www-data:www-data /var/www/html && a2enmod rewrite

3、构建应用镜像:

docker build -t mydockerid/laravel-kubernetes-demo .

4、运行容器测试镜像:

docker run -it \
  -p 8080:80 \
  -e APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY= \
  mydockerid/laravel-kubernetes-demo

访问 http://localhost:8080 检查应用是否成功。


三、上传 docker 镜像到 docker hub 仓库

docker login
docker push mydockerid/laravel-kubernetes-demo

四、创建部署

1) 编写一个部署 YAML 文件 deployment.yaml。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: mydockerid/laravel-kubernetes-demo
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80

2) 使用以下命令创建部署。

kubectl apply -f deployment.yaml

3) 检查部署和pod是否创建成功。

kubectl get deployment
kubectl get pods

五、创建服务

在集群中运行的 Pod 有一个动态的 IP。如果你使用该 IP 并直接把流量路由到那里,在每次重启 Pod 的时候,你可能每次都要更新路由表。事实上,在每次部署或者容器重启的时候,一个新的 IP 会关联到这个 Pod 中。

为了避免需要手动的管理 IP 地址,你需要使用服务。服务在 Pods 集合中充当负载均衡器的角色。所以,尽管一个 Pod 的 IP 地址改变了,但是服务总是指向该 Pod。同时,由于服务总是拥有一个固定的 IP,因此你不需要手动更新任何东西。

168359ad0021cec6~tplv-t2oaga2asx-jj-mark_3024_0_0_0_q75.png

1) 编写一个服务 YAML 文件 service.yaml。

apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  selector:
    app: myapp
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 31234

2) 使用以下命令创建服务。

kubectl apply -f service.yaml

3) 检查服务是否创建成功。

kubectl get svc

NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
myservice        ClusterIP   10.108.173.67   <none>        80:31234/TCP         10s

六、访问网页

现在您可以访问:

http://<节点IP地址>:31234

如果是本地服务器,可以访问:

localhost:31234

下面是访问页面。

2024-05-07_174437.jpg

二维码 | 渥太华微生活

编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。

229
全部评论 (0)
展开快速发表评论

科技专栏