Update README with more instructions

This commit is contained in:
Scott Yeager 2025-06-19 22:30:44 -07:00
parent 9b7dbf733d
commit 185c41425b

165
README.md
View File

@ -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. 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 ```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 ## Architecture