我有一个停靠的symfony项目,我正试图在Kubernetes集群的GPC中对其进行delpoy。在开发中,我使用docker compose,我有两个用于php fpm和nginx的单独容器。
当我运行docker compose up--build时,一切都正常,但是当我尝试创建kubernetes集群时,在运行kubectl apply-f nginx之后,我遇到了这个错误。部署。亚马尔:
在 /etc/nginx/conf.d/default.conf:11的上游php-fpm中找不到主机
这是nginx的默认设置。配置文件:
server {
listen 80;
server_name localhost;
root /app/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass php-fpm:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
internal;
}
location ~ \.php$ {
return 404;
}
}
请注意
fastcgi_passphp-fpm: 9000;
它引用php-fpm容器。
nginx的Dockerfile:
ARG VERSION
# Dev image
FROM nginx:${VERSION}-alpine as dev
# Copy nginx config
COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf
# Prod image
FROM dev as prod
# Copy assets
COPY ./assets /app/public
这里是nginx.deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert -f ../docker-compose.yml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: nginx
strategy:
type: Recreate
template:
metadata:
annotations:
kompose.cmd: kompose convert -f ../docker-compose.yml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: nginx
spec:
containers:
- image: myDockerHubRegistry/symfony-nginx:0.2
name: nginx
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /app/public
name: nginx-claim
restartPolicy: Always
volumes:
- name: nginx-claim
persistentVolumeClaim:
claimName: nginx-claim
status: {}
我还尝试将nginx和phpfpm放在同一个部署上,但仍然得到相同的错误。
我错过了什么?
由于nginx
拒绝启动任何proxy\u pass
服务,因此需要首先启动php fpm
服务。您尚未共享php fpm
的部署yaml。随着php-fpm
的kubernetes部署,您需要在与nginx
相同的名称空间内为php-fpm
创建一个名为php-fpm
的kubernetes服务对象。
您还可以使用Nicolai建议的变量hack,这样就可以启动nginx,而不依赖于php fpm
。但无论哪种情况,您都需要为php fpm
创建kubernetes部署和服务对象,以便应用程序能够实际工作。
这里有2个问题:
>
主机名php fpm
未通过k8s中的DNS解析为服务的IP
如果无法解析代理通行证中使用的主机名,nginx/openresty将拒绝启动
nginx:[emerg]在上游“主机名”中找不到主机
解决方案:
>
使用在kubernetes中正确解析的主机名。
GKE中Core DNS使用的DNS方案为
首先在变量中存储php fpm服务的正确主机名。
然后使用这个变量作为(fastcgi-)代理传递的目标。
这将使nginx启动,无论是否能够解析目标主机名。
示例:
set $upstream php-fpm.your-namespace.svc.cluster.local:9000;
fastcgi_pass $upstream;
我打算有一个带有Jenkins的光盘管道,它接受我的应用程序,将码头工人映像发布到我的私人码头工人存储库。我想我知道怎么做。 我不确定的是库伯内特斯部分。我想把那个图像部署到我的私人库伯内特斯集群(目前是1个主集群) 问:安装了 kubectl 和 docker 的詹金斯从站是否需要成为 Kubernetes 集群的一部分才能触发部署?如何触发该部署?
我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他
我在Kubernetes是个新手。我想知道在kubernetes环境中最好的生产部署场景是什么。 在过去的学派中,我习惯于将Web服务器(例如Nginx或Apache)放在DMZ层,而将其放在其他层(我们称之为层)。这样,只有web服务器在DMZ上,恶意攻击只能在web服务器VM上进行。 据我所知,K8S部署不再需要这种方法;这是因为K8S自己处理网络、吊舱和流量。所以我在考虑最确定的部署方案。
据我所知,作业对象应该在一定时间后收获豆荚。但是在我的GKE集群(库伯内特斯1.1.8)上,“kubectl get pods-a”似乎可以列出几天前的豆荚。 所有这些都是使用乔布斯API创建的。 我确实注意到在使用 kubectl 删除作业后,pod 也被删除了。 我在这里主要担心的是,我将在批量作业中在集群上运行成千上万个pod,并且不想让内部待办系统过载。
我试图设置Kubernetes入口,将外部http流量路由到前端pod(路径/)和后端pod(路径/rest/*),但我总是得到400错误,而不是主nginx索引。html。 所以我在第https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer页尝试了谷歌库伯内特斯的例子,但我总是得到400个错误。有什么想法吗?
我是Kubernetes的新手,他们的概念我不太清楚:云提供商。 我已经使用RKE(Rancher引擎)安装了我的库伯内特斯集群。 我的集群设置在rancher2的顶部。 我的节点是托管OVH服务器的虚拟机。 我设法让运行中的应用程序具有L7入口和ClusterIP服务,但每次我尝试使用L4负载平衡器时,负载平衡器都处于挂起状态。根据https://github.com/rancher/ranch