在部署非常简单的Pod时,我看不到任何日志输出:
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
答案 0 :(得分:1)
我唯一想到的可能是导致它不输出日志的原因是,如果您在/etc/docker/docker.json
配置文件中为运行Pod的节点配置了default logging driver for Docker:
{
"log-driver": "anything-but-json-file",
}
从本质上讲,这将使Docker不再为kubectl logs <podid> -c <containerid>
之类的东西输出stdout / stderr日志。您可以查看节点(10.0.0.43
)中的pod的容器中配置了什么:
$ docker inspect -f '{{.HostConfig.LogConfig.Type}}' <container-id>
答案 1 :(得分:1)
我遵循了Seenickode的评论,并使其正常运行。
我发现1.10.11或1.11.5(aws中的当前版本)的新cloudformation模板与我的堆栈比较很有用。
这是我学到的东西:
然后,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
答案 2 :(得分:0)
使用此:
$ kubectl logs -f counter --namespace default
答案 3 :(得分:0)
您在注释中提到的错误表明您的kubelet进程未运行或正在重新启动。
ss -tnpl |grep 10250
LISTEN 0 128 :::10250 :::* users:(("kubelet",pid=1102,fd=21))
检查以上命令,看看pid是否在某个时间间隔内连续变化。
此外,检查/ var / log / messages是否存在任何与节点相关的问题。希望这会有所帮助。
答案 4 :(得分:0)
我发现了问题。此处的AWS教程docs.aws.amazon.com/eks/latest/userguide/getting-started.html引用了CloudFormation模板,这些模板未能设置所需的安全组,因此无法正确查看日志。我基本上为k8s工作者节点(EC2实例)打开了所有流量和端口,然后一切正常。