Update README with more instructions
This commit is contained in:
		
							
								
								
									
										165
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										165
									
								
								README.md
									
									
									
									
									
								
							| @@ -45,14 +45,171 @@ The plugin uses a CNI configuration file (`10-mycelium.conflist`) that specifies | ||||
|  | ||||
| 2. **DEL Operation**: Cleans up the host-side veth interface when containers are destroyed. | ||||
|  | ||||
| ## Testing | ||||
| ## Usage with Kubernetes | ||||
|  | ||||
| ### 1. Setup Mycelium on all nodes | ||||
|  | ||||
| First, install Mycelium on all Kubernetes nodes: | ||||
|  | ||||
| Start Mycelium daemon first: | ||||
| ```bash | ||||
| sudo mycelium --peers tcp://188.40.132.242:9651 tcp://136.243.47.186:9651 | ||||
| # Download and install Mycelium | ||||
| MYCELIUM_VERSION="v0.5.6" | ||||
| wget https://github.com/threefoldtech/mycelium/releases/download/${MYCELIUM_VERSION}/mycelium-x86_64-unknown-linux-musl.tar.gz | ||||
| tar xf mycelium-x86_64-unknown-linux-musl.tar.gz | ||||
| sudo cp mycelium /usr/local/bin/ | ||||
|  | ||||
| # Create systemd service | ||||
| sudo tee /etc/systemd/system/mycelium.service > /dev/null <<EOF | ||||
| [Unit] | ||||
| Description=Mycelium Network | ||||
| After=network.target | ||||
|  | ||||
| [Service] | ||||
| ExecStart=/usr/local/bin/mycelium --peers tcp://188.40.132.242:9651 tcp://136.243.47.186:9651 tcp://185.69.166.7:9651 tcp://65.21.231.58:9651 tcp://209.159.146.190:9651 | ||||
| Restart=always | ||||
|  | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| EOF | ||||
|  | ||||
| # Enable IPv6 forwarding | ||||
| echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.conf | ||||
| sudo sysctl -p | ||||
|  | ||||
| # Start Mycelium | ||||
| sudo systemctl daemon-reload | ||||
| sudo systemctl enable --now mycelium | ||||
| ``` | ||||
|  | ||||
| Then use with Kubernetes or test directly with CNI tools. | ||||
| ### 2. Install the CNI plugin | ||||
|  | ||||
| On each Kubernetes node: | ||||
|  | ||||
| ```bash | ||||
| # Build and install the plugin | ||||
| make build | ||||
| sudo make install | ||||
|  | ||||
| # Verify installation | ||||
| ls -la /opt/cni/bin/mycelium-cni | ||||
| ls -la /etc/cni/net.d/10-mycelium.conflist | ||||
| ``` | ||||
|  | ||||
| ### 3. Configure Kubernetes | ||||
|  | ||||
| For **kubeadm** clusters, the CNI configuration is automatically picked up. For other setups, ensure the kubelet is configured to use CNI: | ||||
|  | ||||
| ```bash | ||||
| # Add to kubelet configuration | ||||
| --network-plugin=cni | ||||
| --cni-conf-dir=/etc/cni/net.d | ||||
| --cni-bin-dir=/opt/cni/bin | ||||
| ``` | ||||
|  | ||||
| ### 4. Test with a pod | ||||
|  | ||||
| Create a test pod to verify Mycelium connectivity: | ||||
|  | ||||
| ```yaml | ||||
| # test-pod.yaml | ||||
| apiVersion: v1 | ||||
| kind: Pod | ||||
| metadata: | ||||
|   name: mycelium-test | ||||
| spec: | ||||
|   containers: | ||||
|   - name: test | ||||
|     image: ubuntu:22.04 | ||||
|     command: ["/bin/sleep", "3600"] | ||||
| ``` | ||||
|  | ||||
| Deploy and test: | ||||
|  | ||||
| ```bash | ||||
| kubectl apply -f test-pod.yaml | ||||
|  | ||||
| # Check pod IP (should be IPv6 from Mycelium range) | ||||
| kubectl get pod mycelium-test -o wide | ||||
|  | ||||
| # Test connectivity from inside the pod | ||||
| kubectl exec -it mycelium-test -- ip -6 addr show | ||||
| kubectl exec -it mycelium-test -- ping6 -c 3 400::1  # Test Mycelium network access | ||||
| ``` | ||||
|  | ||||
| ### 5. Multi-node connectivity | ||||
|  | ||||
| Test communication between pods on different nodes: | ||||
|  | ||||
| ```yaml | ||||
| # multi-node-test.yaml | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   name: mycelium-deployment | ||||
| spec: | ||||
|   replicas: 3 | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: mycelium-test | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: mycelium-test | ||||
|     spec: | ||||
|       containers: | ||||
|       - name: test | ||||
|         image: ubuntu:22.04 | ||||
|         command: ["/bin/sleep", "3600"] | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| kubectl apply -f multi-node-test.yaml | ||||
|  | ||||
| # Get pod IPs and test inter-pod communication | ||||
| kubectl get pods -o wide | ||||
| kubectl exec -it <pod1> -- ping6 -c 3 <pod2-ipv6> | ||||
| ``` | ||||
|  | ||||
| ## Testing | ||||
|  | ||||
| ### Manual CNI Testing | ||||
|  | ||||
| You can test the plugin directly using CNI testing tools: | ||||
|  | ||||
| ```bash | ||||
| # Install CNI plugins for testing | ||||
| go install github.com/containernetworking/cni/cnitool@latest | ||||
|  | ||||
| # Set environment | ||||
| export CNI_PATH=/opt/cni/bin | ||||
| export NETCONFPATH=/etc/cni/net.d | ||||
|  | ||||
| # Test ADD operation | ||||
| echo '{}' | sudo cnitool add mycelium-network /var/run/netns/test | ||||
|  | ||||
| # Test DEL operation   | ||||
| echo '{}' | sudo cnitool del mycelium-network /var/run/netns/test | ||||
| ``` | ||||
|  | ||||
| ### Troubleshooting | ||||
|  | ||||
| Check common issues: | ||||
|  | ||||
| ```bash | ||||
| # Verify Mycelium is running | ||||
| sudo systemctl status mycelium | ||||
| ip -6 addr show mycelium | ||||
|  | ||||
| # Check CNI logs | ||||
| journalctl -u kubelet | grep -i cni | ||||
|  | ||||
| # Verify network namespaces | ||||
| sudo ip netns list | ||||
|  | ||||
| # Check container interfaces | ||||
| kubectl exec -it <pod> -- ip link show | ||||
| kubectl exec -it <pod> -- ip -6 route show | ||||
| ``` | ||||
|  | ||||
| ## Architecture | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user