2016-05-28 2 views
3

У меня есть кластер Kubernetes на GKE. Я знаю, что Кубернетес будет распространять стручки с теми же ярлыками, но это не для меня. Вот описание моего узла.Kubernetes pods не распространяются на разные узлы

Name:     gke-pubnation-cluster-prod-high-cpu-14a766ad-node-dpob 
Conditions: 
    Type   Status LastHeartbeatTime      LastTransitionTime      Reason       Message 
    ----   ------ -----------------      ------------------      ------       ------- 
    OutOfDisk  False Fri, 27 May 2016 21:11:17 -0400   Thu, 26 May 2016 22:16:27 -0400   KubeletHasSufficientDisk  kubelet has sufficient disk space available 
    Ready   True Fri, 27 May 2016 21:11:17 -0400   Thu, 26 May 2016 22:17:02 -0400   KubeletReady     kubelet is posting ready status. WARNING: CPU hardcapping unsupported 
Capacity: 
cpu:   2 
memory:  1848660Ki 
pods:   110 
System Info: 
Machine ID: 
Kernel Version:    3.16.0-4-amd64 
OS Image:      Debian GNU/Linux 7 (wheezy) 
Container Runtime Version:  docker://1.9.1 
Kubelet Version:    v1.2.4 
Kube-Proxy Version:   v1.2.4 
Non-terminated Pods:   (2 in total) 
    Namespace      Name                     CPU Requests CPU Limits Memory Requests Memory Limits 
    ---------      ----                     ------------ ---------- --------------- ------------- 
    kube-system     fluentd-cloud-logging-gke-pubnation-cluster-prod-high-cpu-14a766ad-node-dpob   80m (4%)  0 (0%)    200Mi (11%)  200Mi (11%) 
    kube-system     kube-proxy-gke-pubnation-cluster-prod-high-cpu-14a766ad-node-dpob      20m (1%)  0 (0%)    0 (0%)   0 (0%) 
Allocated resources: 
    (Total limits may be over 100%, i.e., overcommitted. More info: http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md) 
    CPU Requests CPU Limits  Memory Requests Memory Limits 
    ------------ ----------  --------------- ------------- 
    100m (5%)  0 (0%)   200Mi (11%)  200Mi (11%) 
No events. 

Name:     gke-pubnation-cluster-prod-high-cpu-14a766ad-node-qhw2 
Conditions: 
    Type   Status LastHeartbeatTime      LastTransitionTime      Reason       Message 
    ----   ------ -----------------      ------------------      ------       ------- 
    OutOfDisk  False Fri, 27 May 2016 21:11:17 -0400   Fri, 27 May 2016 18:16:38 -0400   KubeletHasSufficientDisk  kubelet has sufficient disk space available 
    Ready   True Fri, 27 May 2016 21:11:17 -0400   Fri, 27 May 2016 18:17:12 -0400   KubeletReady     kubelet is posting ready status. WARNING: CPU hardcapping unsupported 
Capacity: 
pods:   110 
cpu:   2 
memory:  1848660Ki 
System Info: 
Machine ID: 
Kernel Version:    3.16.0-4-amd64 
OS Image:      Debian GNU/Linux 7 (wheezy) 
Container Runtime Version:  docker://1.9.1 
Kubelet Version:    v1.2.4 
Kube-Proxy Version:   v1.2.4 
Non-terminated Pods:   (10 in total) 
    Namespace      Name                     CPU Requests CPU Limits Memory Requests Memory Limits 
    ---------      ----                     ------------ ---------- --------------- ------------- 
    default      pn-minions-deployment-prod-3923308490-axucq            100m (5%)  0 (0%)    0 (0%)   0 (0%) 
    default      pn-minions-deployment-prod-3923308490-mvn54            100m (5%)  0 (0%)    0 (0%)   0 (0%) 
    default      pn-minions-deployment-staging-2522417973-8cq5p           100m (5%)  0 (0%)    0 (0%)   0 (0%) 
    default      pn-minions-deployment-staging-2522417973-9yatt           100m (5%)  0 (0%)    0 (0%)   0 (0%) 
    kube-system     fluentd-cloud-logging-gke-pubnation-cluster-prod-high-cpu-14a766ad-node-qhw2   80m (4%)  0 (0%)    200Mi (11%)  200Mi (11%) 
    kube-system     heapster-v1.0.2-1246684275-a8eab              150m (7%)  150m (7%) 308Mi (17%)  308Mi (17%) 
    kube-system     kube-dns-v11-uzl1h                  310m (15%)  310m (15%) 170Mi (9%)  920Mi (50%) 
    kube-system     kube-proxy-gke-pubnation-cluster-prod-high-cpu-14a766ad-node-qhw2      20m (1%)  0 (0%)    0 (0%)   0 (0%) 
    kube-system     kubernetes-dashboard-v1.0.1-3co2b              100m (5%)  100m (5%) 50Mi (2%)  50Mi (2%) 
    kube-system     l7-lb-controller-v0.6.0-o5ojv               110m (5%)  110m (5%) 70Mi (3%)  120Mi (6%) 
Allocated resources: 
    (Total limits may be over 100%, i.e., overcommitted. More info: http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md) 
    CPU Requests CPU Limits  Memory Requests Memory Limits 
    ------------ ----------  --------------- ------------- 
    1170m (58%) 670m (33%)  798Mi (44%)  1598Mi (88%) 
No events. 

Вот описание для развертывания:

Name:     pn-minions-deployment-prod 
Namespace:    default 
Labels:     app=pn-minions,environment=production 
Selector:    app=pn-minions,environment=production 
Replicas:    2 updated | 2 total | 2 available | 0 unavailable 
OldReplicaSets:   <none> 
NewReplicaSet:   pn-minions-deployment-prod-3923308490 (2/2 replicas created) 

Name:     pn-minions-deployment-staging 
Namespace:    default 
Labels:     app=pn-minions,environment=staging 
Selector:    app=pn-minions,environment=staging 
Replicas:    2 updated | 2 total | 2 available | 0 unavailable 
OldReplicaSets:   <none> 
NewReplicaSet:   pn-minions-deployment-staging-2522417973 (2/2 replicas created) 

Как вы можете видеть, все четыре стручки находятся на одном узле. Должен ли я что-то делать в дополнение к этой работе?

ответ

1

По умолчанию контейнеры работают с неограниченными пределами ЦП и памяти. Это означает, что любой блок в системе сможет потреблять столько же ЦП и памяти на узле, который выполняет модуль. http://kubernetes.io/docs/admin/limitrange/

Если вы не указали ограничение ЦП, кубернеты не будут знать, сколько ресурсов ЦП требуется, и попытается создать контейнеры в одном узле.

Ниже приведен пример Deployment

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: jenkins 
spec: 
    replicas: 4 
    template: 
    metadata: 
     labels: 
     app: jenkins 
    spec: 
     containers: 
     - name: jenkins 
      image: quay.io/naveensrinivasan/jenkins:0.4 
      ports: 
      - containerPort: 8080 
      resources: 
      limits: 
       cpu: "400m" 
#   volumeMounts: 
#   - mountPath: /var/jenkins_home 
#    name: jenkins-volume 
#  volumes: 
#   - name: jenkins-volume 
#   awsElasticBlockStore: 
#   volumeID: vol-29c4b99f 
#   fsType: ext4 
     imagePullSecrets: 
     - name: registrypullsecret 

Здесь выход kubectl describe po | grep Node после создания развертывания.

~ aws_kubernetes [email protected]  ~/revature/devops/jenkins   jenkins ● k describe po | grep Node 
Node:  ip-172-20-0-26.us-west-2.compute.internal/172.20.0.26 
Node:  ip-172-20-0-29.us-west-2.compute.internal/172.20.0.29 
Node:  ip-172-20-0-27.us-west-2.compute.internal/172.20.0.27 
Node:  ip-172-20-0-29.us-west-2.compute.internal/172.20.0.29 

В настоящее время он создан в 4 разных точках. Он основан на ограничениях в вашем кластере. Вы можете увеличить/уменьшить replicas, чтобы увидеть его развертывание в разных узлах.

Это не GKE или AWS.

+0

«не будет знать, сколько ресурсов процессора требуется» -> должно ли это быть заданием ресурса? http://kubernetes.io/docs/user-guide/compute-resources/ – Daiwei

+1

Да, это задание запроса ресурса – Naveen

+0

У меня есть ограничение по умолчанию в кластере. В моем вопросе вы можете увидеть, что контейнеры унаследовали от запроса процессора по умолчанию. Означает ли это, что этого недостаточно? – Daiwei

Смежные вопросы