Skip to content

Instantly share code, notes, and snippets.

@BenTheElder
Created January 9, 2025 00:57
Show Gist options
  • Save BenTheElder/58e2b0c359a374cac10e529375fd70f2 to your computer and use it in GitHub Desktop.
Save BenTheElder/58e2b0c359a374cac10e529375fd70f2 to your computer and use it in GitHub Desktop.
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kindnet
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- patch
- apiGroups:
- ""
resources:
- configmaps
verbs:
- get
- apiGroups:
- ""
resources:
- pods
- namespaces
verbs:
- list
- watch
- apiGroups:
- "networking.k8s.io"
resources:
- networkpolicies
verbs:
- list
- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kindnet
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kindnet
subjects:
- kind: ServiceAccount
name: kindnet
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kindnet
namespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: kindnet
namespace: kube-system
labels:
tier: node
app: kindnet
k8s-app: kindnet
spec:
selector:
matchLabels:
app: kindnet
template:
metadata:
labels:
tier: node
app: kindnet
k8s-app: kindnet
spec:
hostNetwork: true
tolerations:
- operator: Exists
effect: NoSchedule
serviceAccountName: kindnet
initContainers:
- name: mount-cni-bin
image: busybox:stable
command:
- /bin/sh
- -c
- |
mkdir -p /tmp/opt/cni
mount --bind /tmp/opt/cni /opt/cni/bin/
# required by containerd but kindnet already provides this functionality
touch /opt/cni/bin/localhost
chmod +x /opt/cni/bin/localhost
volumeMounts:
- name: opt-cni
mountPath: /opt/cni/
mountPropagation: Bidirectional
securityContext:
runAsUser: 0
privileged: true
- name: install-cni-bin
image: ghcr.io/aojea/kindnetd:stable
command: ['sh', '-c', 'cat /opt/cni/bin/cni-kindnet > /cni/cni-kindnet ; chmod +x /cni/cni-kindnet']
volumeMounts:
- name: cni-bin
mountPath: /cni
containers:
- name: kindnet-cni
image: ghcr.io/aojea/kindnetd:stable
args:
- /bin/kindnetd
- --hostname-override=$(NODE_NAME)
- --v=2
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
volumeMounts:
- name: cni-cfg
mountPath: /etc/cni/net.d
- name: var-lib-kindnet
mountPath: /var/lib/cni-kindnet
resources:
requests:
cpu: "100m"
memory: "50Mi"
securityContext:
privileged: true
volumes:
- name: opt-cni
hostPath:
path: /opt/cni
type: DirectoryOrCreate
- name: cni-bin
hostPath:
path: /opt/cni/bin
type: DirectoryOrCreate
- name: cni-cfg
hostPath:
path: /etc/cni/net.d
type: DirectoryOrCreate
- name: var-lib-kindnet
hostPath:
path: /var/lib/cni-kindnet
type: DirectoryOrCreate
- name: tmp
hostPath:
path: /tmp
type: DirectoryOrCreate
---
@BenTheElder
Copy link
Author

Install like:

# only for dpv2 clusters
kubectl -n kube-system patch ds anetd --type='json' \
  -p='[{"op": "add", "path": "/spec/template/spec/nodeSelector/do-not-run-here", "value": "donotexist"}]'

kubectl -n kube-system patch ds netd --type='json' \
  -p='[{"op": "add", "path": "/spec/template/spec/nodeSelector/do-not-run-here", "value": "donotexist"}]'

kubectl apply -f https://gist.github.com/BenTheElder/58e2b0c359a374cac10e529375fd70f2/raw/abe2787d335589be8a9192ba0b0db9c1ede8295d/kindnet-gke.yaml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment