Pod部署问题和Kubernetes集群上的查询

时间:2019-10-01 11:15:38

标签: docker kubernetes kubernetes-pod

我使用1个主节点和2个节点创建了k8s集群和网络。但是,在pod(nginx)部署期间,部署仅在一个服务器(即node1)上发生,而不在另一台服务器(即node2)上发生,结果显示在o / p

[root@controller Kubernetes]# kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          10m   192.168.1.2   node1   <none>           <none>
[root@controller Kubernetes]#

这意味着nginx仅部署在node1上,而不部署在node2上

节点加入主节点的结果

NAME         STATUS   ROLES    AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
controller   Ready    master   142m   v1.16.0   192.168.33.20   <none>        CentOS Linux 7 (Core)   3.10.0-1062.1.1.el7.x86_64   docker://1.13.1
node1        Ready    <none>   134m   v1.16.0   192.168.33.10   <none>        CentOS Linux 7 (Core)   3.10.0-1062.1.1.el7.x86_64   docker://1.13.1
node2        Ready    <none>   46m    v1.16.0   192.168.33.30   <none>        CentOS Linux 7 (Core)   3.10.0-1062.1.1.el7.x86_64   docker://1.13.1
[root@controller Kubernetes]#

Pod文件:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
     name: nginx-web-application

spec:
  containers:
    - name: nginx-container
      image: nginx

当我使用以下命令运行时,我也想在node2上看到部署的发生,你能告诉我为什么在两个节点上都没有发生吗?

kubectl create -f pod.yml

2 个答案:

答案 0 :(得分:2)

您的设置创建了一个在一个节点上带有一个容器的Pod(哪个容器由kube-scheduler决定)。

如果要在每个节点上运行该容器,请使用DaemonSet,以确保在每个节点上运行容器的副本。

具有两个或多个副本的

Deployment应该可以工作,因为如果两个节点都可以运行该pod,则您有两个节点(请查看kube-scheduler)。

最后一件事-您可以使用Taints and Tolerations。最简单的方法是污染您的node1,以免在其上切碎豆荚(来自文档的示例):

kubectl taint nodes node1 key:NoSchedule-

答案 1 :(得分:1)

Pod恰好是一个容器的副本(很少有,多个紧密耦合的容器)。它将仅在一个节点上运行。

您几乎永远不想直接使用Pod;而是选择一个更高级别的控制器对象。大多数情况下,您会使用Deployment,它可以告诉您想要例如 3个在集群中某处运行的Pod的副本。如果您实际上需要在每个节点上运行一个副本(通常只有基础架构类型的Pod才需要),那么这就是DaemonSet的模型。