2024-04-26 渥太华微生活
在 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= \ 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 create -f deployment.yaml
3) 检查部署和pod是否创建成功。
kubectl get deployment kubectl get pods
五、创建服务
在集群中运行的 Pod 有一个动态的 IP。如果你使用该 IP 并直接把流量路由到那里,在每次重启 Pod 的时候,你可能每次都要更新路由表。事实上,在每次部署或者容器重启的时候,一个新的 IP 会关联到这个 Pod 中。
为了避免需要手动的管理 IP 地址,你需要使用服务。服务在 Pods 集合中充当负载均衡器的角色。所以,尽管一个 Pod 的 IP 地址改变了,但是服务总是指向该 Pod。同时,由于服务总是拥有一个固定的 IP,因此你不需要手动更新任何东西。
1) 编写一个服务 YAML 文件 service.yaml。
apiVersion: v1 kind: Service metadata: name: myservice spec: selector: app: myapp ports: - port: 80 targetPort: 80
2) 使用以下命令创建服务。
kubectl create -f service.yaml
3) 检查服务是否创建成功。
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE myservice ClusterIP 10.108.173.67 <none> 80/TCP 10s
六、创建 Ingress
为了在 Kubernetes 中使用 URL,你需要一个 Ingress。Ingress 是一组允许入站连接到达 Kubernetes 集群的规则。
Ingress 是非常必要的,因为在 Kubernetes 中,诸如 Pod 之类的资源仅具有可在集群内和集群内路由的IP地址。也就是说它们是无法进出外部环境的。
1) 创建 Ingress-nginx 控制器
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml
检查状态:
kubectl -n ingress-nginx get pod NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-6f9w5 0/1 Completed 0 2m20s ingress-nginx-admission-patch-vsk2j 0/1 Completed 1 2m20s ingress-nginx-controller-5f4d7b5f5c-6pnx5 1/1 Running 0 2m20s
2) 编写一个服务 YAML 文件 ingress.yaml。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myingress labels: name: myingress spec: rules: - host: laravel-kubernetes.demo http: paths: - pathType: Prefix path: "/" backend: service: name: myservice port: number: 80
3) 使用以下命令创建服务。
kubectl create -f ingress.yaml
4) 检查服务是否创建成功。
kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE myingress <none> laravel-kubernetes.demo 80 15s
七、访问网页
现在您可以访问:
http://<节点IP地址>:31871
如果是本地服务器,可以访问:
localhost:31871
下面是访问页面。
编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。
全部评论 (0) |
---|