longhorn.yaml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: longhorn-system
  5. ---
  6. apiVersion: v1
  7. kind: ServiceAccount
  8. metadata:
  9. name: longhorn-service-account
  10. namespace: longhorn-system
  11. ---
  12. apiVersion: rbac.authorization.k8s.io/v1
  13. kind: ClusterRole
  14. metadata:
  15. name: longhorn-role
  16. rules:
  17. - apiGroups:
  18. - apiextensions.k8s.io
  19. resources:
  20. - customresourcedefinitions
  21. verbs:
  22. - "*"
  23. - apiGroups: [""]
  24. resources: ["pods", "events", "persistentvolumes", "persistentvolumeclaims", "nodes", "proxy/nodes", "pods/log", "secrets", "services", "endpoints", "configmaps"]
  25. verbs: ["*"]
  26. - apiGroups: [""]
  27. resources: ["namespaces"]
  28. verbs: ["get", "list"]
  29. - apiGroups: ["apps"]
  30. resources: ["daemonsets", "statefulsets", "deployments"]
  31. verbs: ["*"]
  32. - apiGroups: ["batch"]
  33. resources: ["jobs", "cronjobs"]
  34. verbs: ["*"]
  35. - apiGroups: ["storage.k8s.io"]
  36. resources: ["storageclasses", "volumeattachments", "csinodes", "csidrivers"]
  37. verbs: ["*"]
  38. - apiGroups: ["coordination.k8s.io"]
  39. resources: ["leases"]
  40. verbs: ["get", "watch", "list", "delete", "update", "create"]
  41. - apiGroups: ["longhorn.io"]
  42. resources: ["volumes", "volumes/status", "engines", "engines/status", "replicas", "replicas/status", "settings",
  43. "engineimages", "engineimages/status", "nodes", "nodes/status", "instancemanagers", "instancemanagers/status"]
  44. verbs: ["*"]
  45. - apiGroups: ["coordination.k8s.io"]
  46. resources: ["leases"]
  47. verbs: ["*"]
  48. # to be removed after v0.7.0
  49. - apiGroups: ["longhorn.rancher.io"]
  50. resources: ["volumes", "engines", "replicas", "settings", "engineimages", "nodes", "instancemanagers"]
  51. verbs: ["*"]
  52. ---
  53. apiVersion: rbac.authorization.k8s.io/v1
  54. kind: ClusterRoleBinding
  55. metadata:
  56. name: longhorn-bind
  57. roleRef:
  58. apiGroup: rbac.authorization.k8s.io
  59. kind: ClusterRole
  60. name: longhorn-role
  61. subjects:
  62. - kind: ServiceAccount
  63. name: longhorn-service-account
  64. namespace: longhorn-system
  65. ---
  66. apiVersion: apiextensions.k8s.io/v1beta1
  67. kind: CustomResourceDefinition
  68. metadata:
  69. labels:
  70. longhorn-manager: Engine
  71. name: engines.longhorn.io
  72. spec:
  73. group: longhorn.io
  74. names:
  75. kind: Engine
  76. listKind: EngineList
  77. plural: engines
  78. shortNames:
  79. - lhe
  80. singular: engine
  81. scope: Namespaced
  82. version: v1beta1
  83. subresources:
  84. status: {}
  85. ---
  86. apiVersion: apiextensions.k8s.io/v1beta1
  87. kind: CustomResourceDefinition
  88. metadata:
  89. labels:
  90. longhorn-manager: Replica
  91. name: replicas.longhorn.io
  92. spec:
  93. group: longhorn.io
  94. names:
  95. kind: Replica
  96. listKind: ReplicaList
  97. plural: replicas
  98. shortNames:
  99. - lhr
  100. singular: replica
  101. scope: Namespaced
  102. version: v1beta1
  103. subresources:
  104. status: {}
  105. ---
  106. apiVersion: apiextensions.k8s.io/v1beta1
  107. kind: CustomResourceDefinition
  108. metadata:
  109. labels:
  110. longhorn-manager: Setting
  111. name: settings.longhorn.io
  112. spec:
  113. group: longhorn.io
  114. names:
  115. kind: Setting
  116. listKind: SettingList
  117. plural: settings
  118. shortNames:
  119. - lhs
  120. singular: setting
  121. scope: Namespaced
  122. version: v1beta1
  123. ---
  124. apiVersion: apiextensions.k8s.io/v1beta1
  125. kind: CustomResourceDefinition
  126. metadata:
  127. labels:
  128. longhorn-manager: Volume
  129. name: volumes.longhorn.io
  130. spec:
  131. group: longhorn.io
  132. names:
  133. kind: Volume
  134. listKind: VolumeList
  135. plural: volumes
  136. shortNames:
  137. - lhv
  138. singular: volume
  139. scope: Namespaced
  140. version: v1beta1
  141. subresources:
  142. status: {}
  143. ---
  144. apiVersion: apiextensions.k8s.io/v1beta1
  145. kind: CustomResourceDefinition
  146. metadata:
  147. labels:
  148. longhorn-manager: EngineImage
  149. name: engineimages.longhorn.io
  150. spec:
  151. group: longhorn.io
  152. names:
  153. kind: EngineImage
  154. listKind: EngineImageList
  155. plural: engineimages
  156. shortNames:
  157. - lhei
  158. singular: engineimage
  159. scope: Namespaced
  160. version: v1beta1
  161. subresources:
  162. status: {}
  163. ---
  164. apiVersion: apiextensions.k8s.io/v1beta1
  165. kind: CustomResourceDefinition
  166. metadata:
  167. labels:
  168. longhorn-manager: Node
  169. name: nodes.longhorn.io
  170. spec:
  171. group: longhorn.io
  172. names:
  173. kind: Node
  174. listKind: NodeList
  175. plural: nodes
  176. shortNames:
  177. - lhn
  178. singular: node
  179. scope: Namespaced
  180. version: v1beta1
  181. subresources:
  182. status: {}
  183. ---
  184. apiVersion: apiextensions.k8s.io/v1beta1
  185. kind: CustomResourceDefinition
  186. metadata:
  187. labels:
  188. longhorn-manager: InstanceManager
  189. name: instancemanagers.longhorn.io
  190. spec:
  191. group: longhorn.io
  192. names:
  193. kind: InstanceManager
  194. listKind: InstanceManagerList
  195. plural: instancemanagers
  196. shortNames:
  197. - lhim
  198. singular: instancemanager
  199. scope: Namespaced
  200. version: v1beta1
  201. subresources:
  202. status: {}
  203. ---
  204. apiVersion: v1
  205. kind: ConfigMap
  206. metadata:
  207. name: longhorn-default-setting
  208. namespace: longhorn-system
  209. data:
  210. default-setting.yaml: |-
  211. backup-target:
  212. backup-target-credential-secret:
  213. create-default-disk-labeled-nodes:
  214. default-data-path:
  215. replica-soft-anti-affinity:
  216. storage-over-provisioning-percentage:
  217. storage-minimal-available-percentage:
  218. upgrade-checker:
  219. default-replica-count:
  220. guaranteed-engine-cpu:
  221. default-longhorn-static-storage-class:
  222. backupstore-poll-interval:
  223. taint-toleration:
  224. ---
  225. apiVersion: apps/v1
  226. kind: DaemonSet
  227. metadata:
  228. labels:
  229. app: longhorn-manager
  230. name: longhorn-manager
  231. namespace: longhorn-system
  232. spec:
  233. selector:
  234. matchLabels:
  235. app: longhorn-manager
  236. template:
  237. metadata:
  238. labels:
  239. app: longhorn-manager
  240. spec:
  241. containers:
  242. - name: longhorn-manager
  243. image: longhornio/longhorn-manager:v0.7.0
  244. imagePullPolicy: Always
  245. securityContext:
  246. privileged: true
  247. command:
  248. - longhorn-manager
  249. - -d
  250. - daemon
  251. - --engine-image
  252. - longhornio/longhorn-engine:v0.7.0
  253. - --manager-image
  254. - longhornio/longhorn-manager:v0.7.0
  255. - --service-account
  256. - longhorn-service-account
  257. ports:
  258. - containerPort: 9500
  259. volumeMounts:
  260. - name: dev
  261. mountPath: /host/dev/
  262. - name: proc
  263. mountPath: /host/proc/
  264. - name: varrun
  265. mountPath: /var/run/
  266. - name: longhorn
  267. mountPath: /var/lib/rancher/longhorn/
  268. mountPropagation: Bidirectional
  269. - name: longhorn-default-setting
  270. mountPath: /var/lib/longhorn-setting/
  271. env:
  272. - name: POD_NAMESPACE
  273. valueFrom:
  274. fieldRef:
  275. fieldPath: metadata.namespace
  276. - name: POD_IP
  277. valueFrom:
  278. fieldRef:
  279. fieldPath: status.podIP
  280. - name: NODE_NAME
  281. valueFrom:
  282. fieldRef:
  283. fieldPath: spec.nodeName
  284. # Should be: mount path of the volume longhorn-default-setting + the key of the configmap data in 04-default-setting.yaml
  285. - name: DEFAULT_SETTING_PATH
  286. value: /var/lib/longhorn-setting/default-setting.yaml
  287. volumes:
  288. - name: dev
  289. hostPath:
  290. path: /dev/
  291. - name: proc
  292. hostPath:
  293. path: /proc/
  294. - name: varrun
  295. hostPath:
  296. path: /var/run/
  297. - name: longhorn
  298. hostPath:
  299. path: /var/lib/rancher/longhorn/
  300. - name: longhorn-default-setting
  301. configMap:
  302. name: longhorn-default-setting
  303. serviceAccountName: longhorn-service-account
  304. ---
  305. kind: Service
  306. apiVersion: v1
  307. metadata:
  308. labels:
  309. app: longhorn-manager
  310. name: longhorn-backend
  311. namespace: longhorn-system
  312. spec:
  313. selector:
  314. app: longhorn-manager
  315. ports:
  316. - port: 9500
  317. targetPort: 9500
  318. sessionAffinity: ClientIP
  319. ---
  320. apiVersion: apps/v1
  321. kind: Deployment
  322. metadata:
  323. labels:
  324. app: longhorn-ui
  325. name: longhorn-ui
  326. namespace: longhorn-system
  327. spec:
  328. replicas: 1
  329. selector:
  330. matchLabels:
  331. app: longhorn-ui
  332. template:
  333. metadata:
  334. labels:
  335. app: longhorn-ui
  336. spec:
  337. containers:
  338. - name: longhorn-ui
  339. image: longhornio/longhorn-ui:v0.7.0
  340. ports:
  341. - containerPort: 8000
  342. env:
  343. - name: LONGHORN_MANAGER_IP
  344. value: "http://longhorn-backend:9500"
  345. serviceAccountName: longhorn-service-account
  346. ---
  347. kind: Service
  348. apiVersion: v1
  349. metadata:
  350. labels:
  351. app: longhorn-ui
  352. name: longhorn-frontend
  353. namespace: longhorn-system
  354. spec:
  355. selector:
  356. app: longhorn-ui
  357. ports:
  358. - port: 80
  359. targetPort: 8000
  360. type: LoadBalancer
  361. ---
  362. apiVersion: apps/v1
  363. kind: Deployment
  364. metadata:
  365. name: longhorn-driver-deployer
  366. namespace: longhorn-system
  367. spec:
  368. replicas: 1
  369. selector:
  370. matchLabels:
  371. app: longhorn-driver-deployer
  372. template:
  373. metadata:
  374. labels:
  375. app: longhorn-driver-deployer
  376. spec:
  377. initContainers:
  378. - name: wait-longhorn-manager
  379. image: longhornio/longhorn-manager:v0.7.0
  380. command: ['sh', '-c', 'while [ $(curl -m 1 -s -o /dev/null -w "%{http_code}" http://longhorn-backend:9500/v1) != "200" ]; do echo waiting; sleep 2; done']
  381. containers:
  382. - name: longhorn-driver-deployer
  383. image: longhornio/longhorn-manager:v0.7.0
  384. imagePullPolicy: Always
  385. command:
  386. - longhorn-manager
  387. - -d
  388. - deploy-driver
  389. - --manager-image
  390. - longhornio/longhorn-manager:v0.7.0
  391. - --manager-url
  392. - http://longhorn-backend:9500/v1
  393. # manually set root directory for csi
  394. #- --kubelet-root-dir
  395. #- /var/lib/rancher/k3s/agent/kubelet
  396. # manually specify number of CSI attacher replicas
  397. #- --csi-attacher-replica-count
  398. #- "3"
  399. # manually specify number of CSI provisioner replicas
  400. #- --csi-provisioner-replica-count
  401. #- "3"
  402. env:
  403. - name: POD_NAMESPACE
  404. valueFrom:
  405. fieldRef:
  406. fieldPath: metadata.namespace
  407. - name: NODE_NAME
  408. valueFrom:
  409. fieldRef:
  410. fieldPath: spec.nodeName
  411. - name: SERVICE_ACCOUNT
  412. valueFrom:
  413. fieldRef:
  414. fieldPath: spec.serviceAccountName
  415. serviceAccountName: longhorn-service-account
  416. ---
  417. kind: StorageClass
  418. apiVersion: storage.k8s.io/v1
  419. metadata:
  420. name: longhorn
  421. provisioner: driver.longhorn.io
  422. parameters:
  423. numberOfReplicas: "3"
  424. staleReplicaTimeout: "2880" # 48 hours in minutes
  425. fromBackup: ""
  426. # diskSelector: "ssd,fast"
  427. # nodeSelector: "storage,fast"
  428. # recurringJobs: '[{"name":"snap", "task":"snapshot", "cron":"*/1 * * * *", "retain":1},
  429. # {"name":"backup", "task":"backup", "cron":"*/2 * * * *", "retain":1,
  430. # "labels": {"interval":"2m"}}]'
  431. ---