我要在我的Kubernetes集群上部署多个Mediawiki实例。 在我的情况下,数据库(MySQL)的YAML部署文件可以正常工作,Mediawiki的部署文件可以按预期部署尽可能多的Pod,但是即使我为此创建了服务,也无法从集群外部访问它们情况。
如果我尝试创建一个MediaWiki pod以及一个从集群外部访问它的服务,它将正常工作。如果我尝试为Mediawiki创建一个与MySQL相等的部署文件,它会创建pod和所需的服务,但是不能从分配给它的externel-IP上访问它。
我的Mediawiki部署文件:
handleClickDialogOpen = userid => {
this.setState({
open: true,
UserID: userid,
},
() => console.log(this.state),
);
};
这是pod定义文件:
apiVersion: v1
kind: Service
metadata:
name: mediawiki-service
labels:
name: mediawiki-service
app: mediawiki
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
name: mediawiki-pod
app: mediawiki
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mediawiki
spec:
replicas: 6
selector:
matchLabels:
app: mediawiki
strategy:
type: Recreate
template:
metadata:
labels:
app: mediawiki
spec:
containers:
- image: mediawiki
name: mediawiki
ports:
- containerPort: 80
name: mediawiki
这是服务定义文件:
apiVersion: v1
kind: Pod
metadata:
name: mediawiki-pod
labels:
name: mediawiki-pod
app: mediawiki
spec:
containers:
- name: mediawiki
image: mediawiki
ports:
- containerPort: 80
准确的想法应该是我可以在群集上部署Mediawiki的多个实例,并可以使用externel-IP从外部访问它们。
答案 0 :(得分:0)
如果您想在Kubernetes集群上部署某个软件的多个实例,最好检查一下是否有一个helm图表。 对于您来说,答案是肯定的-有stable helm chart for Mediawiki。
创建多个实例与创建多个版本一样容易,例如:
helm install --name wiki1 stable/mediawiki
helm install --name wiki2 stable/mediawiki
helm install --name wiki3 stable/mediawiki
要使用Helm,您必须将其安装在本地计算机和k8s群集上-遵循quick start guide就足够了。
答案 1 :(得分:0)
如果您同时在两种情况下查看kubectl describe service mediawiki-service
,我希望您会看到在单容器情况下,有一个Endpoints:
列表,其中包含一个IP地址(容器的,但是实施细节),但在部署情况下则为<none>
。
您的服务仅匹配同时带有name
和app
标签的广告连播:
apiVersion: v1
kind: Service
spec:
selector:
name: mediawiki-pod
app: mediawiki
但是您的部署所部署的Pod仅带有app
标签:
apiVersion: apps/v1
kind: Deployment
spec:
template:
metadata:
labels:
app: mediawiki
因此,在该特定点(部署模板中的标签;也可以在顶层添加它们没有影响,但是这一嵌入点很重要),您需要添加第二个标签name: mediawiki-pod