apiVersion: apps/v1 kind: Deployment metadata: name: tailscale-operator namespace: tailscale labels: app.kubernetes.io/name: tailscale app.kubernetes.io/component: operator spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: tailscale app.kubernetes.io/component: operator template: metadata: labels: app.kubernetes.io/name: tailscale app.kubernetes.io/component: operator spec: serviceAccountName: tailscale-operator securityContext: runAsNonRoot: true containers: - name: operator image: ghcr.io/tailscale/operator:v1.76.0 args: - --hostname=$(POD_NAME) env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace envFrom: - secretRef: name: tailscale-operator-secret ports: - containerPort: 8080 name: metrics protocol: TCP resources: requests: cpu: 10m memory: 64Mi limits: cpu: 100m memory: 128Mi securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1000 runAsGroup: 1000 capabilities: drop: - ALL affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists