`kubectl logs counter` не показывает никаких выходных данных по официальному примеру Kubernetes - PullRequest
0 голосов
/ 20 ноября 2018

Я не вижу никаких выходных данных журнала при развертывании очень простого модуля:

myconfig.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox
    args: [/bin/sh, -c,
            'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']

затем

kubectl apply -f myconfig.yaml

Это быловзято из этого официального руководства: https://kubernetes.io/docs/concepts/cluster-administration/logging/#basic-logging-in-kubernetes

Кажется, что модуль работает нормально:

kubectl describe pod counter
Name:         counter
Namespace:    default
Node:         ip-10-0-0-43.ec2.internal/10.0.0.43
Start Time:   Tue, 20 Nov 2018 12:05:07 -0500
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"counter","namespace":"default"},"spec":{"containers":[{"args":["/bin/sh","-c","i=0...
Status:       Running
IP:           10.0.0.81
Containers:
  count:
    Container ID:  docker://d2dfdb8644b5a6488d9d324c8c8c2d4637a460693012f35a14cfa135ab628303
    Image:         busybox
    Image ID:      docker-pullable://busybox@sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812
    Port:          <none>
    Host Port:     <none>
    Args:
      /bin/sh
      -c
      i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done
    State:          Running
      Started:      Tue, 20 Nov 2018 12:05:08 -0500
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-r6tr6 (ro)
Conditions:
  Type           Status
  Initialized    True 
  Ready          True 
  PodScheduled   True 
Volumes:
  default-token-r6tr6:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-r6tr6
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason                 Age   From                                Message
  ----    ------                 ----  ----                                -------
  Normal  Scheduled              16m   default-scheduler                   Successfully assigned counter to ip-10-0-0-43.ec2.internal
  Normal  SuccessfulMountVolume  16m   kubelet, ip-10-0-0-43.ec2.internal  MountVolume.SetUp succeeded for volume "default-token-r6tr6"
  Normal  Pulling                16m   kubelet, ip-10-0-0-43.ec2.internal  pulling image "busybox"
  Normal  Pulled                 16m   kubelet, ip-10-0-0-43.ec2.internal  Successfully pulled image "busybox"
  Normal  Created                16m   kubelet, ip-10-0-0-43.ec2.internal  Created container
  Normal  Started                16m   kubelet, ip-10-0-0-43.ec2.internal  Started container

При запуске ничего не появляется:

kubectl logs counter --follow=true

Ответы [ 5 ]

0 голосов
/ 27 января 2019

Я последовал комментарию Seenickode, и я получил его на работу.

Я нашел новый шаблон облачной информации для 1.10.11 или 1.11.5 (текущая версия в aws) полезным для сравнения со своим стеком.

Вот что я выучил:

  1. Разрешенные порты 1025 - 65535 от группы безопасности кластера до рабочих узлов.
  2. Разрешенный порт 443 Выход из плоскости управления в рабочие узлы.

Затем начали работать журналы kubectl.

Пример обновления шаблона Cloudformation здесь:

  NodeSecurityGroupFromControlPlaneIngress:
    Type: AWS::EC2::SecurityGroupIngress
    DependsOn: NodeSecurityGroup
    Properties:
      Description: Allow worker Kubelets and pods to receive communication from the cluster control plane
      GroupId: !Ref NodeSecurityGroup
      SourceSecurityGroupId: !Ref ControlPlaneSecurityGroup
      IpProtocol: tcp
      FromPort: 1025
      ToPort: 65535

Также

  ControlPlaneEgressToNodeSecurityGroupOn443:
    Type: AWS::EC2::SecurityGroupEgress
    DependsOn: NodeSecurityGroup
    Properties:
      Description: Allow the cluster control plane to communicate with pods running extension API servers on port 443
      GroupId:
        Ref: ControlPlaneSecurityGroup
      DestinationSecurityGroupId:
        Ref: NodeSecurityGroup
      IpProtocol: tcp
      FromPort: 443
      ToPort: 443
0 голосов
/ 21 ноября 2018

Я нашел проблему.В учебнике по AWS здесь docs.aws.amazon.com/eks/latest/userguide/getting-started.html приводятся шаблоны CloudFormation, в которых не могут быть заданы необходимые группы безопасности, чтобы можно было правильно просматривать журналы.Я в основном открыл весь трафик и порты для своих рабочих узлов k8s (экземпляры EC2), и теперь все работает.

0 голосов
/ 21 ноября 2018

Единственное, о чем я могу подумать, это то, что он не выводит журналы, если вы настроили драйвер ведения журнала по умолчанию для Docker в файле конфигурации /etc/docker/docker.json для узла, где находится ваш модуль.running:

{
  "log-driver": "anything-but-json-file",
}

Это, по сути, создает Docker, а не выводит журналы stdout / stderr для чего-то вроде kubectl logs <podid> -c <containerid>.Вы можете посмотреть, что настроено в контейнере в вашем модуле в вашем узле (10.0.0.43):

$ docker inspect -f '{{.HostConfig.LogConfig.Type}}' <container-id>
0 голосов
/ 21 ноября 2018

Ошибка, которую вы упомянули в комментарии, указывает на то, что процесс kubelet не запущен или перезапускается.

ss -tnpl |grep 10250
LISTEN     0      128         :::10250                   :::*                   users:(("kubelet",pid=1102,fd=21))

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

Кроме того, проверьте / var / log / messages на наличие проблем, связанных с узлами.Надеюсь, это поможет.

0 голосов
/ 20 ноября 2018

Используйте это:

$ kubectl logs -f counter --namespace default
...