1. Logs
- Components level logs
-
kubelet,kube-apiserver,kube-scheduler,kube-controller,etcd,kube-proxy…
-
- Pod level logs
- generate by container
1.1 Log files
The base path for logs is /var/log/
| Component | Log Path | Description |
|---|---|---|
| kubelet | /var/log/syslog |
Kubelet logs if not using journald. |
| kube-apiserver | /var/log/kube-apiserver.log |
API server logs (depends on setup). |
| kube-scheduler | /var/log/kube-scheduler.log |
Scheduler logs (depends on setup). |
| kube-controller-manager | /var/log/kube-controller-manager.log |
Controller manager logs. |
| Pod logs |
/var/log/pods/ /var/log/containers/
|
Logs for all containers running on the node. Docker: /var/lib/docker/containers/ and containerd: /var/log/pods/
|
| etcd | /var/log/etcd.log |
etcd logs, if configured |
1.2 CMD
kubelet logs:
grep kubelet /var/log/syslog
journalctl -u [kubectl|kube-controller-manager|kube-scheduler|kube-apiserver|etcd|docker|containerd]
#
kubectl describe pod -n kube-system
kubectl logs -c
kubectl logs -n kube-system
crictl ps
crictl logs
docker ps
docker logs # (in case when Docker is used)
2. Config
2.1 Config Files
The basic path for kubernetes config file store in /etc/kubernetes/ folder, for kubelet normaly
stores at /var/lib/kubelet/config.yaml
Default Paths:
-
/etc/kubernetes/: Central directory for most Kubernetes configuration files. -
/var/lib/kubelet/: Directory for kubelet-related data and configuration. -
/var/lib/etcd/: Directory for etcd data. -
/etc/systemd/system/: Directory for systemd service configuration files.
| Component | Config Path | Description | Params |
|---|---|---|---|
| kubelet | /var/lib/kubelet/config.yaml |
Main kubelet configuration file. | |
/etc/kubernetes/kubelet.conf |
Kubeconfig for API server communication. |
--config: Points to the kubelet’s configuration file (e.g., /var/lib/kubelet/config.yaml). --pod-manifest-path: Specifies the directory for static pod manifests (default: /etc/kubernetes/manifests). --kubeconfig: Path to the kubelet’s kubeconfig file for API server communication (default: /etc/kubernetes/kubelet.conf). |
|
| kube-apiserver | /etc/kubernetes/manifests/kube-apiserver.yaml |
Static pod manifest for API server. |
--etcd-servers: Specifies the etcd endpoints. --secure-port: Port for secure communication (default: 6443). --service-cluster-ip-range: Range of IPs for cluster services. --tls-cert-file and --tls-private-key-file: Certificates for secure |
| kube-scheduler | /etc/kubernetes/manifests/kube-scheduler.yaml |
Static pod manifest for scheduler. |
--kubeconfig: Path to the kubeconfig file for the scheduler. --leader-elect: Ensures only one active scheduler in HA setups. |
| kube-controller-manager | /etc/kubernetes/manifests/kube-controller-manager.yaml |
Static pod manifest. |
--kubeconfig: Path to the kubeconfig file for the controller manager. --service-account-private-key-file: Key for signing service account tokens. --cluster-signing-cert-file and --cluster-signing-key-file: Certificates for signing. |
| kubeconfig files | /etc/kubernetes/admin.conf |
Admin kubeconfig for kubectl. | |
/etc/kubernetes/controller-manager.conf |
Kubeconfig for controller manager. | ||
/etc/kubernetes/scheduler.conf |
Kubeconfig for scheduler. | ||
| CNI plugins | /etc/cni/net.d/ |
Directory for CNI plugin configurations. | |
| Static pods | /etc/kubernetes/manifests/ |
Directory for static pod definitions. | |
| etcd | /etc/kubernetes/manifests/etcd.yaml |
etcd configuration. |
--data-dir: Directory for storing etcd data. --advertise-client-urls: URLs advertised to clients. --listen-client-urls: URLs where etcd listens for client requests. |
| kube-proxy | /var/lib/kube-proxy/config.conf |
Often referenced in the kube-proxy pod or daemonset |
--cluster-cidr: Range of IPs for the cluster network. --kubeconfig: Path to the kubeconfig file for API server communication. |
2.1.1 /etc/kubernetes/manifests/ file
As kube-controller always monitor the manifests folder files, so we can directly edit in manifests file. But it’s better to backup first.
## always make a backup
cp /etc/kubernetes/manifests/kube-apiserver.yaml ~/kube-apiserver.yaml.bk
## make the change
vim /etc/kubernetes/manifests/kube-apiserver.yaml
## wait till container restarts
watch crictl ps
## check for apiserver pod
k -n kube-system get pod
2.2 CMD
# View the active kubeconfig settings.
kubectl config view
# check the corresponding pods
kubectl describe pod -n kube-system
# use systemctl cat
systemctl cat [kubectl|kube-controller-manager|kube-scheduler|kube-apiserver|etcd|docker|containerd]
# can even use find
find / | grep kubeadm
By understanding these logs, configurations and their purposes, we can better manage and troubleshoot our Kubernetes cluster.