如何在 Kubernetes 集群中创建多个 Mediawiki 实例
How to create multiple instances of Mediawiki in a Kubernetes Cluster
我即将在我的 Kubernetes 集群上部署多个 Mediawiki 实例。
在我的例子中,数据库的 YAML 部署文件(MySQL)按预期工作,Mediawiki 的部署文件部署了与预期一样多的 pods,但我无法从集群外部访问它们即使我为这种情况创建服务。
如果我尝试创建一个 Mediawiki pod 和一项服务以从集群外部访问它,它会正常工作。如果我尝试为 Mediawiki 创建一个与 MySQL 相同的部署文件,它会创建 pods 和所需的服务,但无法从分配给它的外部 IP 访问它。
我的 Mediawiki 部署文件:
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
这是 pod 定义文件:
apiVersion: v1
kind: Pod
metadata:
name: mediawiki-pod
labels:
name: mediawiki-pod
app: mediawiki
spec:
containers:
- name: mediawiki
image: mediawiki
ports:
- containerPort: 80
这是服务定义文件:
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
实际结果应该是我可以在我的集群上部署多个Mediawiki实例,并且可以使用externel-IP从外部访问它们。
如果您想在 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 就足够了。
如果您在这两种情况下查看 kubectl describe service mediawiki-service
,我希望您会看到在 single-pod 情况下,有一个 Endpoints:
列表包含一个 IP 地址( pod 的,但这是一个实现细节)但在部署案例中,它表示 <none>
.
您的服务仅匹配具有 name
和 app
标签的 pods:
apiVersion: v1
kind: Service
spec:
selector:
name: mediawiki-pod
app: mediawiki
但是你部署的pods只有app
个标签:
apiVersion: apps/v1
kind: Deployment
spec:
template:
metadata:
labels:
app: mediawiki
所以在那个特定点(部署模板内的标签;在顶层添加它们也没有坏处,但这个嵌入点很重要)你需要添加第二个标签name: mediawiki-pod
.
我即将在我的 Kubernetes 集群上部署多个 Mediawiki 实例。 在我的例子中,数据库的 YAML 部署文件(MySQL)按预期工作,Mediawiki 的部署文件部署了与预期一样多的 pods,但我无法从集群外部访问它们即使我为这种情况创建服务。
如果我尝试创建一个 Mediawiki pod 和一项服务以从集群外部访问它,它会正常工作。如果我尝试为 Mediawiki 创建一个与 MySQL 相同的部署文件,它会创建 pods 和所需的服务,但无法从分配给它的外部 IP 访问它。
我的 Mediawiki 部署文件:
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
这是 pod 定义文件:
apiVersion: v1
kind: Pod
metadata:
name: mediawiki-pod
labels:
name: mediawiki-pod
app: mediawiki
spec:
containers:
- name: mediawiki
image: mediawiki
ports:
- containerPort: 80
这是服务定义文件:
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
实际结果应该是我可以在我的集群上部署多个Mediawiki实例,并且可以使用externel-IP从外部访问它们。
如果您想在 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 就足够了。
如果您在这两种情况下查看 kubectl describe service mediawiki-service
,我希望您会看到在 single-pod 情况下,有一个 Endpoints:
列表包含一个 IP 地址( pod 的,但这是一个实现细节)但在部署案例中,它表示 <none>
.
您的服务仅匹配具有 name
和 app
标签的 pods:
apiVersion: v1
kind: Service
spec:
selector:
name: mediawiki-pod
app: mediawiki
但是你部署的pods只有app
个标签:
apiVersion: apps/v1
kind: Deployment
spec:
template:
metadata:
labels:
app: mediawiki
所以在那个特定点(部署模板内的标签;在顶层添加它们也没有坏处,但这个嵌入点很重要)你需要添加第二个标签name: mediawiki-pod
.