bit*_*ker 2 service docker kubernetes kubernetes-pod
我有一个简单的kubernetes集群,有一个主人和3个小兵.在这种情况下,如果我运行一个简单的nginx或一个mysql的pod它工作正常,但是,如果我将KIND的类型更改为yaml文件,我尝试运行一个复制的服务,pods将启动但我无法访问服务.
这是我的nginx的yaml文件,包含3个副本:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
这是服务yaml配置文件:
apiVersion: v1
kind: Service
metadata:
labels:
name: nginx
name: nginx
spec:
ports:
- port: 80
selector:
name: nginx
Run Code Online (Sandbox Code Playgroud)
我运行它:
# kubectl create -f nginx-rc.yaml
# kubectl create -f nginx-rc-service.yaml
Run Code Online (Sandbox Code Playgroud)
如果我跑:
# kubectl get pod,svc,rc -o wide
Run Code Online (Sandbox Code Playgroud)
我知道了:
NAME READY STATUS RESTARTS AGE NODE
nginx-kgq1s 1/1 Running 0 1m node01
nginx-pomx3 1/1 Running 0 1m node02
nginx-xi54i 1/1 Running 0 1m node03
NAME LABELS SELECTOR IP(S) PORT(S)
kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.1 443/TCP
nginx name=nginx name=nginx 10.254.47.150 80/TCP
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
nginx nginx nginx app=nginx 3
Run Code Online (Sandbox Code Playgroud)
我可以看到pod的描述:
Name: nginx-kgq1s
Namespace: default
Image(s): nginx
Node: node01/node01
Labels: app=nginx
Status: Running
Reason:
Message:
IP: 172.17.52.3
Replication Controllers: nginx (3/3 replicas created)
Containers:
nginx:
Image: nginx
State: Running
Started: Thu, 11 Feb 2016 16:28:08 +0100
Ready: True
Restart Count: 0
Conditions:
Type Status
Ready True
Events:
FirstSeen LastSeen Count From SubobjectPath Reason Message
Thu, 11 Feb 2016 16:27:47 +0100 Thu, 11 Feb 2016 16:27:47 +0100 1 {scheduler } scheduled Successfully assigned nginx-kgq1s to node01
Thu, 11 Feb 2016 16:27:57 +0100 Thu, 11 Feb 2016 16:27:57 +0100 1 {kubelet node01} implicitly required container POD pulled Pod container image "gcr.io/google_containers/pause:0.8.0" already present on machine
Thu, 11 Feb 2016 16:28:02 +0100 Thu, 11 Feb 2016 16:28:02 +0100 1 {kubelet node01} implicitly required container POD created Created with docker id bed30a90c6eb
Thu, 11 Feb 2016 16:28:02 +0100 Thu, 11 Feb 2016 16:28:02 +0100 1 {kubelet node01} implicitly required container POD started Started with docker id bed30a90c6eb
Thu, 11 Feb 2016 16:28:07 +0100 Thu, 11 Feb 2016 16:28:07 +0100 1 {kubelet node01} spec.containers{nginx} created Created with docker id 0a5c69cd0481
Thu, 11 Feb 2016 16:28:08 +0100 Thu, 11 Feb 2016 16:28:08 +0100 1 {kubelet node01} spec.containers{nginx} started Started with docker id 0a5c69cd0481
Run Code Online (Sandbox Code Playgroud)
如果我得到rc的描述,这就是我所看到的:
Name: nginx
Namespace: default
Image(s): nginx
Selector: app=nginx
Labels: app=nginx
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Events:
FirstSeen LastSeen Count From SubobjectPath Reason Message
Thu, 11 Feb 2016 16:27:47 +0100 Thu, 11 Feb 2016 16:27:47 +0100 1 {replication-controller } successfulCreate Created pod: nginx-kgq1s
Thu, 11 Feb 2016 16:27:47 +0100 Thu, 11 Feb 2016 16:27:47 +0100 1 {replication-controller } successfulCreate Created pod: nginx-pomx3
Thu, 11 Feb 2016 16:27:47 +0100 Thu, 11 Feb 2016 16:27:47 +0100 1 {replication-controller } successfulCreate Created pod: nginx-xi54i
Run Code Online (Sandbox Code Playgroud)
如果我得到服务描述,这就是我所看到的:
Name: nginx
Namespace: default
Labels: name=nginx
Selector: name=nginx
Type: ClusterIP
IP: 10.254.47.150
Port: <unnamed> 80/TCP
Endpoints: <none>
Session Affinity: None
No events.
Run Code Online (Sandbox Code Playgroud)
正如我所看到的,问题可能是我没有ENDPOINT,但我不知道如何解决.
它看起来像你的服务选择器是错误的.它正在寻找一个标签name: nginx,但你的豆荚实际上有app: nginx.
尝试将您的服务文件更改为:
apiVersion: v1
kind: Service
metadata:
labels:
name: nginx
name: nginx
spec:
ports:
- port: 80
selector:
app: nginx
Run Code Online (Sandbox Code Playgroud)
...或更改复制控制器模板以使用name: nginx而不是app: nginx标签.基本上,标签必须匹配,以便服务知道如何在您的pod上呈现统一的外观.
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |