Error while setting up a clucter unable to join the worker node please someone help me , im an intern help me to do this

Iam not to able to join the cluster when i enter the token kubeadm join 10.194.82.50:6443 --token uk7ka9.olo5nwpck8os5kh7 --discovery-token-ca-cert-hash sha256:f9cc69ec1c403b63a6be32985e060d277037d91472a8e7832d882f8a5548cf76

it is throwing the error like
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time=“2024-02-14T20:46:32+05:30” level=fatal msg=“validate service connection: CRI v1 runtime API is not implemented for endpoint "unix:///var/run/containerd/containerd.sock": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService”
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher

Cluster information:

Kubernetes version:
Cloud being used: private cloud
Installation method:kubeadm
Host OS: ubuntu
CNI and version: calico
CRI and version:

You can format your yaml by highlighting it and pressing Ctrl-Shift-C, it will make your output easier to read.

The error you’re encountering indicates a problem with the Container Runtime Interface (CRI) on the worker node you’re trying to join to the Kubernetes cluster. Specifically, the message:

luaCopy code

[ERROR CRI]: container runtime is not running: output: time=“2024-02-14T20:46:32+05:30” level=fatal msg=“validate service connection: CRI v1 runtime API is not implemented for endpoint "unix:///var/run/containerd/containerd.sock": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService”

suggests that the container runtime (in this case, containerd) is either not running or not properly configured to work with Kubernetes through the CRI.

Here’s a step-by-step guide to help you troubleshoot and resolve this issue:

1. Check Container Runtime Status

First, ensure containerd is installed and running on your worker node:

bashCopy code

sudo systemctl status containerd

If it’s not running, start it:

bashCopy code

sudo systemctl start containerd

And enable it to start on boot:

bashCopy code

sudo systemctl enable containerd

2. Validate containerd Configuration

Ensure that containerd is configured correctly for Kubernetes. Check the containerd configuration file, typically located at /etc/containerd/config.toml. Confirm that the containerd CRI plugin is enabled and correctly configured. Kubernetes requires certain settings, such as the SystemdCgroup for the runtime to work properly with kubeadm.

You might need to uncomment or add specific lines related to the CRI plugin, such as:

tomlCopy code

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  runtime_type = "io.containerd.runc.v2"

And for using systemd as the cgroup driver, which is recommended for Kubernetes:

tomlCopy code

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true

After making changes, restart containerd:

bashCopy code

sudo systemctl restart containerd

3. Verify Connectivity to the CRI Socket

Ensure that kubeadm can communicate with containerd via the CRI socket. The default socket path is /var/run/containerd/containerd.sock, but verify this in your containerd configuration.

You can test connectivity with crictl, which is a CLI tool for CRI-compatible container runtimes. Ensure it’s installed, and then run:

bashCopy code

crictl -r unix:///var/run/containerd/containerd.sock info

This command should return information about the container runtime without errors.

4. Retry Joining the Node

After ensuring the container runtime is correctly set up and running, try to join the cluster again with the kubeadm join command you initially used. Pay close attention to any output or errors to ensure they’re not related to the previous issue.

5. Check Firewall and Network Policies

If the problem persists, ensure that there are no firewall rules or network policies blocking communication between your worker node and the master node, especially the Kubernetes API server port (default 6443) and other necessary ports for etcd, kubelet, etc.

6. Review Logs

If joining the cluster still fails, review logs for more detailed error messages:

  • For kubeadm, add the --v=5 flag to the join command to increase verbosity.
  • Check containerd logs, typically found in /var/log/containerd/containerd.log or by using journalctl -u containerd.
  • Review kubelet logs on the worker node using journalctl -u kubelet.

These steps should help you identify and resolve the issue with joining the worker node to the Kubernetes cluster. If you continue to face difficulties, consider providing additional details such as the specific versions of Kubernetes and containerd you’re using, as well as any relevant configuration files or logs, for further assistance.