forked from k-space/kube
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
910f2c56d0 | ||
|
|
e17b0e0b41 | ||
|
|
18034b7cd9 | ||
|
|
bcb637685a | ||
|
|
c525300036 | ||
|
|
8a76219544 | ||
|
|
eb3ff2dfb5 | ||
|
|
50887550e0 | ||
|
|
ae7b3fe8ff | ||
|
|
bdfc82633f | ||
|
|
ccb361a0b1 | ||
|
|
9c72de9a8d | ||
|
|
9ad15aa58f | ||
|
|
fa78dba6a9 | ||
|
|
7216e85889 | ||
|
|
31f3ea0376 | ||
|
|
0307fca109 | ||
|
|
f1b601b0c1 | ||
|
|
20df574678 | ||
|
|
825d4cf602 | ||
|
|
47f92fd058 | ||
|
|
64ece67ed7 | ||
|
|
aed9fb1c29 | ||
|
|
b5c36cecd0 | ||
|
|
6979641e97 | ||
|
|
0636c40094 | ||
|
|
aec42eb2aa | ||
|
|
559f463739 | ||
|
|
636e0f72cc | ||
|
|
edceeabd31 | ||
|
|
c20bb80915 | ||
|
|
3184462ceb | ||
|
|
2d891c42e9 | ||
|
|
2cdea27b74 | ||
|
|
3ebacea720 | ||
|
|
2e611270ed | ||
|
|
b844015d22 | ||
|
|
64891fd0b5 | ||
|
|
79d18e1b6f | ||
|
|
1d2edd3ae9 | ||
|
|
f0c3df9fe8 | ||
|
|
1badb4b255 | ||
|
|
dd5d2b79ab | ||
|
|
9410b25e3e | ||
|
|
fc0ab4a7c8 | ||
|
|
97f7d68459 | ||
|
|
d546168982 | ||
|
|
20b0852c4a | ||
|
|
bd4ed21e25 | ||
|
|
54ff82a3f5 | ||
|
|
c8262cec6a | ||
|
|
dab8b990a8 | ||
|
|
0288a360c7 | ||
|
|
676f0bab4f | ||
|
|
9f08dc67e8 | ||
|
|
109abf5788 | ||
|
|
015469d5ef | ||
|
|
98ec867e3a | ||
|
|
ea02208b0c | ||
|
|
bc349f9b78 | ||
|
|
db0464c1b0 | ||
|
|
00dced3730 | ||
|
|
872e80a5eb | ||
|
|
f22625bc61 | ||
|
|
20fd9479c3 | ||
|
|
2e865d0379 | ||
|
|
1f64bcd046 | ||
|
|
ae95eb7158 | ||
|
|
4b564e2366 | ||
|
|
6bdfdaed5f | ||
|
|
9b678b7ab5 | ||
|
|
4590b2b2d0 | ||
|
|
67423994a1 | ||
|
|
ba66005ace | ||
|
|
24a2d8de2a | ||
|
|
777e167893 | ||
|
|
8844d67643 | ||
|
|
9b13c42fbc | ||
|
|
5769c84a2c | ||
|
|
55cb996313 | ||
|
|
dcb5f74b26 | ||
|
|
24d480b9f6 | ||
|
|
7ad915fc58 | ||
|
|
8fe0356599 | ||
|
|
fe1e7f015f | ||
|
|
eaf2d552ba | ||
|
|
3becc7f34b | ||
|
|
12cde25593 | ||
|
|
925a08cd68 | ||
|
|
5136e5cfaf | ||
|
|
5920222e89 | ||
|
|
d05b92cc92 | ||
|
|
574cf9fc87 | ||
|
|
a303146c5d | ||
|
|
813ee0b629 | ||
|
|
b2d816de46 | ||
|
|
3ce56bc860 | ||
|
|
dc31b51e9d | ||
|
|
c88abafeb5 | ||
|
|
d9183ec8c5 | ||
|
|
4f7c595a2d | ||
|
|
ec0c616b82 | ||
|
|
f4612d96b3 | ||
|
|
2a62eb67f2 | ||
|
|
c4a361a426 | ||
|
|
a895efd44c | ||
|
|
61212eed98 | ||
|
|
e151e0f92e | ||
|
|
676cd6890d | ||
|
|
7183690873 | ||
|
|
c74041cffc | ||
|
|
d174b12e73 | ||
|
|
aed0f55e3f | ||
|
|
2590e2f35f | ||
|
|
ea6f111fc3 | ||
|
|
2732baca95 | ||
|
|
8efd07940e | ||
|
|
71d1c5f820 | ||
|
|
6f2aa0e907 | ||
|
|
b23a007672 | ||
|
|
8cec50226a | ||
|
|
6e9240328e | ||
|
|
ab57c3cd7b | ||
|
|
aace0ff288 | ||
|
|
36cd4f7fc0 | ||
|
|
40eabdf9f8 | ||
|
|
e08abcf3fe | ||
|
|
20889f093e | ||
|
|
98f934b705 | ||
|
|
200086a3c7 | ||
|
|
f9074ba60d | ||
|
|
ffbef05bce | ||
|
|
46a4d3bd2b | ||
|
|
e0e7a4ab21 | ||
|
|
75dacabc72 | ||
|
|
42383a8009 | ||
|
|
e75272c5ff | ||
|
|
25531431f7 | ||
|
|
0c073d4ef2 | ||
|
|
ae0b3d3939 | ||
|
|
addf02c355 | ||
|
|
d123517e63 | ||
|
|
a491e5961b | ||
|
|
f9601bf5a5 | ||
|
|
ae16e4c83f | ||
|
|
5961739b07 | ||
|
|
cd633fed02 | ||
|
|
eb475b6cb0 | ||
|
|
f0294a74fa | ||
|
|
9b07f8885e | ||
|
|
c1df0fd9be | ||
|
|
fd58faeccb | ||
|
|
4b7073997c | ||
|
|
f27a92a545 | ||
|
|
f823300169 | ||
|
|
c0f79a229c | ||
|
|
d8120a3b0d | ||
|
|
07c04bf216 | ||
|
|
16fd71d6f0 | ||
|
|
da0f3ea05f | ||
|
|
1204039ba3 | ||
|
|
a85367da34 | ||
|
|
9a02fcdef0 | ||
|
|
b6d4ee2b05 | ||
|
|
9c66882d83 | ||
|
|
07d4039ffe | ||
|
|
aff54f33e1 | ||
|
|
c65a2330af | ||
|
|
9ef252c8ec | ||
|
|
c29de936af | ||
|
|
511f6f4ca1 | ||
|
|
9be8fc3a95 | ||
|
|
18d181f36a | ||
|
|
88eae1c35c | ||
|
|
79ebad6730 | ||
|
|
24229639b4 | ||
|
|
71d0667009 | ||
|
|
ad35fc4828 | ||
|
|
3e3814efbe | ||
|
|
b6ea5d3393 | ||
|
|
c5fd94c41b | ||
|
|
f5560f812b | ||
|
|
bbf454f33d | ||
|
|
7af3a2f751 | ||
|
|
ad865ad8b3 | ||
|
|
835ed59970 | ||
|
|
872469f1c6 | ||
|
|
6bbe84ecbb | ||
|
|
86668b80a3 | ||
|
|
b74a9682d6 | ||
|
|
fb4eb6e285 | ||
|
|
d74e4fd76f | ||
|
|
605ad868bb | ||
|
|
73ecae479b | ||
|
|
82311c86ff | ||
|
|
42aef1e928 | ||
|
|
f3ef2facdf | ||
|
|
796e9394ca | ||
|
|
5f90a41009 | ||
|
|
c32c84f6ed | ||
|
|
20704e3a24 | ||
|
|
882ffdd92a | ||
|
|
f88d4bb8e2 | ||
|
|
c2bb1cc5ac | ||
|
|
4dc45594f1 | ||
|
|
103c4deff4 | ||
|
|
6b753d4bf1 | ||
|
|
f54b5469f8 | ||
|
|
6543c61f81 | ||
|
|
5232edc303 | ||
|
|
995360f105 | ||
|
|
159a41d782 | ||
|
|
1acaa04123 | ||
|
|
2526bb5516 | ||
|
|
7e2acf3e94 | ||
|
|
ee72ba4db2 | ||
|
|
6c6e396db1 | ||
|
|
a675ad127b | ||
|
|
0029a7e709 | ||
|
|
e5c914b302 | ||
|
|
316fbde6e6 | ||
|
|
2ae8c5b99e | ||
|
|
4f3a9058f9 | ||
|
|
a86f5bb250 | ||
|
|
2754b4e2f7 | ||
|
|
28d50548bf | ||
|
|
c65a75ee0e | ||
|
|
2a79309842 | ||
|
|
0fc47cab2a | ||
|
|
02b7cde355 | ||
|
|
ea358b3883 | ||
|
|
b4ae5d3f1f | ||
|
|
4dddb9622c | ||
|
|
c51f7368e2 | ||
|
|
7adbf2476d | ||
|
|
c71be24984 | ||
|
|
67c97adc96 | ||
|
|
ca4de329f7 | ||
|
|
b6098f92b0 | ||
|
|
02bfe1dfa2 | ||
|
|
541a060b6f | ||
|
|
af3bd7bb41 | ||
|
|
31800f8ffb | ||
|
|
24b57de126 | ||
|
|
6317daefa1 | ||
|
|
31558db1d4 | ||
|
|
efb467e425 | ||
|
|
130839ff7f | ||
|
|
6e6b3743a0 | ||
|
|
6f2220445d | ||
|
|
bc731d98ec | ||
|
|
3a0747d9b8 | ||
|
|
792a0864a4 | ||
|
|
17f95e14cc | ||
|
|
d3b85e4f24 | ||
|
|
8525cef4fc | ||
|
|
c519fd3d6c | ||
|
|
4408c22c5b | ||
|
|
2041f5f80a | ||
|
|
84b259ace4 | ||
|
|
f9fe0379da | ||
|
|
0359eedcb5 | ||
|
|
a03ea7d208 | ||
|
|
c7cb495451 | ||
|
|
a6439a3bd1 | ||
|
|
754b2180fd | ||
|
|
4f35c87a6c | ||
|
|
266b8ee6aa | ||
|
|
f726f8886a | ||
|
|
fe128cf65e | ||
|
|
7232957a04 | ||
|
|
43ad7586ce | ||
|
|
1b34a48e81 | ||
|
|
0d18bfd7cc | ||
|
|
94751c44f9 | ||
|
|
de36d70e68 | ||
|
|
efc2598160 | ||
|
|
db935de1a5 | ||
|
|
885f4b505e | ||
|
|
aab40b012d | ||
|
|
28daa56bad | ||
|
|
a1e1dcf827 | ||
|
|
bb1c313a37 | ||
|
|
d7d83b37f4 | ||
|
|
0ac4364157 | ||
|
|
b8e525c3e0 | ||
|
|
92db22fd09 | ||
|
|
4466878b54 | ||
|
|
9b93075543 | ||
|
|
ce2e6568b1 | ||
|
|
f82caf1751 | ||
|
|
d9877a9fc5 | ||
|
|
13cfeeff2b | ||
|
|
21e70685f3 | ||
|
|
6d7cdbd9c6 | ||
|
|
10585c7aff | ||
|
|
bc301104fe | ||
|
|
853c9717a9 | ||
|
|
ec81c34086 | ||
|
|
0b713ab321 | ||
|
|
541607a7bd | ||
|
|
d9dce6cadf | ||
|
|
0447abecdc | ||
|
|
61f7d724b5 | ||
|
|
f899283fdb | ||
|
|
fb3123966e | ||
|
|
5b29fbe7cd | ||
|
|
9fb356b5a6 | ||
|
|
908f482396 | ||
|
|
715cb5ce4b | ||
|
|
48915ec26c | ||
|
|
06324bb583 | ||
|
|
877662445a | ||
|
|
22b67fa4fc | ||
|
|
006240ee1a | ||
|
|
2a26b4e94c | ||
|
|
4e59984fe4 | ||
|
|
7eadbee7a2 | ||
|
|
a94fddff1e | ||
|
|
bf44e4fa9b | ||
|
|
f7f7d52e70 | ||
|
|
cf9d686882 | ||
|
|
5bd0a57417 | ||
|
|
e22713b282 | ||
|
|
37a8031bc4 | ||
|
|
095e00b516 | ||
|
|
4d84a0a5ca | ||
|
|
73f03dbb2a | ||
|
|
0c5d2bc792 | ||
|
|
6cf53505ad | ||
|
|
a694463fad | ||
|
|
d1eeba377d | ||
|
|
0628cb94e4 | ||
|
|
376e74a985 | ||
|
|
6eb0c20175 | ||
|
|
4bf08fdc7f | ||
|
|
f05b1f1324 | ||
|
|
5fa3144e23 | ||
|
|
48054078e2 | ||
|
|
4cf4aecea9 | ||
|
|
8d1c24b80f | ||
|
|
0dcd26fe4f | ||
|
|
e33053bf79 | ||
|
|
e632b90d2b | ||
|
|
3b5df4cd43 | ||
|
|
a280a19772 | ||
|
|
19e6f53d96 | ||
|
|
e9efee4853 | ||
|
|
a33d0d12b0 | ||
|
|
dc42a9612a | ||
|
|
6f48e3a53a | ||
|
|
09423ace42 | ||
|
|
bb802882ae | ||
|
|
4a7dfd6435 | ||
|
|
fb7504cfee | ||
|
|
a4b9bdf89d | ||
|
|
602b4a03f6 | ||
|
|
f9ad582136 | ||
|
|
305b8ec038 | ||
|
|
7d71f1b29c | ||
|
|
0e79aa8f4e | ||
|
|
a784f00c71 | ||
|
|
b71a872c09 | ||
|
|
21beb2332c | ||
|
|
8eed4f66c1 | ||
|
|
75b9948997 | ||
|
|
e4dfde9562 | ||
|
|
a82193f059 | ||
|
|
68a75b8389 | ||
|
|
5368fe90eb | ||
|
|
cded6fde3f | ||
|
|
402ff86fde | ||
|
|
272f60ab73 | ||
|
|
9bcad2481b | ||
|
|
c04a7b7f67 | ||
|
|
c23fa07c5e | ||
|
|
c1822888ec | ||
|
|
e26cac6d86 | ||
|
|
d7ba4bc90e | ||
|
|
da4df6c21d | ||
|
|
2964034cd3 | ||
|
|
ae525380b1 | ||
|
|
4b9c3ad394 | ||
|
|
dbebb39749 | ||
|
|
6f15e45402 | ||
|
|
36bf431259 | ||
|
|
c14a313c57 | ||
|
|
15a2fd9375 | ||
|
|
5bd6cf2317 | ||
|
|
407f691152 | ||
|
|
e931f490c2 | ||
|
|
b96e8d16a6 | ||
|
|
15d4d44be7 | ||
|
|
52ce6eab0a | ||
|
|
e89d045f38 | ||
|
|
7e70315514 | ||
|
|
af5a048bcd | ||
|
|
0005219f81 | ||
|
|
813bb32e48 | ||
|
|
0efae7baf9 | ||
|
|
be90b4e266 | ||
|
|
999d17c384 | ||
|
|
bacef8d438 | ||
|
|
60d1ba9b18 | ||
|
|
dcb80e6638 | ||
|
|
95e0f97db2 | ||
|
|
f5a7b44ae6 | ||
|
|
be7e1d9459 | ||
|
|
cd807ebcde | ||
|
|
eaac7f61a7 | ||
|
|
a0d5a585e4 | ||
|
|
1f8f288f95 | ||
|
|
9de1881647 | ||
|
|
28904cdd63 | ||
|
|
0df188db36 | ||
|
|
a42b79b5ac | ||
|
|
89875a66f8 | ||
|
|
927366a3d5 | ||
|
|
29212d7f14 | ||
|
|
1d8528b312 | ||
|
|
566beecb6a | ||
|
|
4c52ca88ef | ||
|
|
b5fceb0f35 | ||
|
|
c609b1df04 | ||
|
|
22d65664b2 | ||
|
|
59db08e891 | ||
|
|
d8402bdec5 | ||
|
|
a71bd5de37 | ||
|
|
ce9891046f | ||
|
|
fea3e8ce66 | ||
|
|
bfeba4017b | ||
|
|
4b00d876ad | ||
|
|
d1e8d8e356 | ||
|
|
22c6fe1979 | ||
|
|
f53b31e030 | ||
|
|
cb41b739cc | ||
|
|
91af1911c4 | ||
|
|
4532eccd6d | ||
|
|
d4913aacbf | ||
|
|
abe022eecc | ||
|
|
4bcb0a8856 | ||
|
|
b849ac340e | ||
|
|
b922412417 | ||
|
|
2661fe211e | ||
|
|
a9406748c5 | ||
|
|
cc92ea67f4 | ||
|
|
222d902ec2 | ||
|
|
65e30d5dec | ||
|
|
4210855827 | ||
|
|
d7287018ac | ||
|
|
3fbecab179 | ||
|
|
024edc1c9b | ||
|
|
a94a3f829c | ||
|
|
36055cc869 | ||
|
|
aa91322ec6 | ||
|
|
c6c94b1901 | ||
|
|
67fb6c3727 | ||
|
|
18483197c9 | ||
|
|
a37d268574 | ||
|
|
4b5e30f51f | ||
|
|
78b0f1534a | ||
|
|
0b03a720b3 | ||
|
|
f1a2051838 | ||
|
|
3280b25a83 | ||
|
|
0eec1fde8b | ||
|
|
ede08c205b | ||
|
|
666d900128 | ||
|
|
bc31357d5b | ||
|
|
f3244afb20 | ||
|
|
384a60244d | ||
|
|
ed25720003 | ||
|
|
5c1a894a43 | ||
|
|
0a9237fae9 | ||
|
|
69dca7e1f2 | ||
|
|
4d5c47e21b | ||
|
|
b3f1eb069f | ||
|
|
bbf421df63 | ||
|
|
9bf5e2408a | ||
|
|
351f0ae746 | ||
|
|
84bb476812 | ||
|
|
07a132748b | ||
|
|
656f28a34c | ||
|
|
12466b19b1 | ||
|
|
1d39827375 | ||
|
|
3f4d89b4b1 | ||
|
|
474ae64156 | ||
|
|
1fa0577ce4 | ||
|
|
f8cd93aa9c | ||
|
|
e22bf78b2e | ||
|
|
be5b036ab8 | ||
|
|
a75f703eaa | ||
|
|
2708e48850 | ||
|
|
cfc5a739a1 | ||
|
|
e5e4a07d01 | ||
|
|
f902bbfe02 | ||
|
|
70e589ef45 | ||
|
|
b0befbcd69 | ||
|
|
a09f7d4f7e | ||
|
|
2f2fa1a99f | ||
|
|
66fbf32088 | ||
|
|
9b698ea197 | ||
|
|
7aa26ea236 | ||
|
|
7c16f84200 | ||
|
|
c2d08d8a80 | ||
|
|
7c2b862ca8 | ||
|
|
68e936463b | ||
|
|
8a1b0b52af | ||
|
|
6b24ede7ac | ||
|
|
e0cf532e42 | ||
|
|
59373041cc | ||
|
|
4e80899c77 | ||
|
|
9c2b5c39ee | ||
|
|
d3eb888d58 | ||
|
|
3714b174e7 | ||
|
|
a1acb06e12 | ||
|
|
0b6ab650a2 | ||
|
|
35404464f4 | ||
|
|
41da5931f9 | ||
|
|
6879a4e5a5 | ||
|
|
9b2c655a02 | ||
|
|
8876300dc4 | ||
|
|
8199b3b732 | ||
|
|
43c9b3aa93 | ||
|
|
504bd3012e | ||
|
|
75b5d39880 | ||
|
|
7377b62b3f | ||
|
|
cd13de6cee | ||
|
|
13da9a8877 | ||
|
|
490770485d | ||
|
|
ba48643a37 | ||
|
|
18a0079a21 | ||
|
|
885b13ecd7 | ||
|
|
e17caa9c2d | ||
|
|
336ab2efa2 | ||
|
|
27a5fe14c7 | ||
|
|
66034d2463 | ||
|
|
186ea5d947 | ||
|
|
470d4f3459 | ||
|
|
8ad6b989e5 | ||
|
|
b6bf3ab225 | ||
|
|
7cac31964d | ||
|
|
a250363bb0 | ||
|
|
480ff4f426 | ||
|
|
b737d37b9c | ||
|
|
b4ad080e95 | ||
|
|
a5ad80d8cd | ||
|
|
62be47c2e1 | ||
|
|
249ad2e9ed | ||
|
|
0c38d2369b | ||
|
|
b07a5b9bc0 | ||
|
|
2d25377090 | ||
|
|
73d185b2ee | ||
|
|
0eb2dc6503 | ||
|
|
34f1b53544 | ||
|
|
fd1aeaa1a3 | ||
|
|
b8477de6a8 | ||
|
|
2f712a935e | ||
|
|
792ff38bea | ||
|
|
e929b52e6d | ||
|
|
b2b93879c2 | ||
|
|
c222f22768 | ||
|
|
28ed62c40e | ||
|
|
74600efb4c | ||
|
|
79aaaf7498 | ||
|
|
f0b78f7b17 | ||
|
|
ba520da57e | ||
|
|
30503ad121 | ||
|
|
fbe4a55251 | ||
|
|
37567eccf9 | ||
|
|
d3ba1cc05f | ||
|
|
61b1b1d6ef | ||
|
|
1e8bccbfa3 | ||
|
|
e89edca340 | ||
|
|
2bb13ef505 | ||
|
|
c44cfb8bc8 | ||
|
|
417f3ddcb8 | ||
|
|
32fbd498cf | ||
|
|
97563e8092 | ||
|
|
4141c6b8ae | ||
|
|
bd26aa46b4 | ||
|
|
92459ed68b | ||
|
|
9cf57d8bc6 | ||
|
|
af1c78dea6 | ||
|
|
2e77813162 | ||
|
|
ca623c11fd | ||
|
|
047cbb5c6b | ||
|
|
3e52f37cde | ||
|
|
b955369e2a | ||
|
|
5e765e9788 | ||
|
|
5d4f49409c | ||
|
|
de573721bd | ||
|
|
c868a62ab7 | ||
|
|
7b6f6252a5 | ||
|
|
9223c956c0 | ||
|
|
1d4e5051d8 | ||
|
|
56bb5be8a9 | ||
|
|
d895360510 | ||
|
|
bc8de58ca8 | ||
|
|
8d355ff9dc | ||
|
|
dc2a08dc78 | ||
|
|
19a0b70b9e | ||
|
|
9c656b0ef9 | ||
|
|
278817249e | ||
|
|
cb5644c7f3 | ||
|
|
78ef148f83 | ||
|
|
c2b9ed0368 | ||
|
|
43abf125a9 | ||
|
|
71d968a815 | ||
|
|
9b4976450f | ||
|
|
27eb0aa6cc | ||
|
|
f97a77e5aa |
-10
@@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: kubernetes
|
|
||||||
name: gitleaks
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: gitleaks
|
|
||||||
image: zricethezav/gitleaks
|
|
||||||
commands:
|
|
||||||
- gitleaks detect --source=/drone/src
|
|
||||||
@@ -1,9 +1,14 @@
|
|||||||
|
*.keys
|
||||||
*secrets.yml
|
*secrets.yml
|
||||||
*secret.yml
|
*secret.yml
|
||||||
*.swp
|
*.swp
|
||||||
*.save
|
*.save
|
||||||
*.1
|
*.1
|
||||||
|
|
||||||
|
# Kustomize with Helm and secrets:
|
||||||
|
charts/
|
||||||
|
*.env
|
||||||
|
|
||||||
### IntelliJ IDEA ###
|
### IntelliJ IDEA ###
|
||||||
.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
extends: default
|
||||||
|
ignore-from-file: .gitignore
|
||||||
|
rules:
|
||||||
|
line-length: disable
|
||||||
+137
@@ -0,0 +1,137 @@
|
|||||||
|
# Kubernetes cluster
|
||||||
|
Kubernetes hosts run on [PVE Cluster](https://wiki.k-space.ee/en/hosting/proxmox). Hosts are listed in Ansible [inventory](ansible/inventory.yml).
|
||||||
|
|
||||||
|
## `kubectl`
|
||||||
|
- Authorization [ACLs](cluster-role-bindings.yml)
|
||||||
|
- [Troubleshooting `no such host`](#systemd-resolved-issues)
|
||||||
|
|
||||||
|
Authenticate to auth.k-space.ee:
|
||||||
|
```bash
|
||||||
|
kubectl krew install oidc-login
|
||||||
|
mkdir -p ~/.kube
|
||||||
|
|
||||||
|
cat << EOF > ~/.kube/config
|
||||||
|
apiVersion: v1
|
||||||
|
clusters:
|
||||||
|
- cluster:
|
||||||
|
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EVXdNakEzTXpVMU1Wb1hEVE15TURReU9UQTNNelUxTVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2J2CjY3UFlXVHJMc3ZCQTZuWHUvcm55SlVhNnppTnNWTVN6N2w4ekhxM2JuQnhqWVNPUDJhN1RXTnpUTmZDanZBWngKTmlNbXJya1hpb2dYQWpVVkhSUWZlYm81TFIrb0JBOTdLWlcrN01UMFVJRXBuWVVaaTdBRHlaS01vcEJFUXlMNwp1SlU5UDhnNUR1T29FRHZieGJSMXFuV1JZRXpteFNmSFpocllpMVA3bFd4emkxR243eGRETFZaMjZjNm0xR3Y1CnViRjZyaFBXK1JSVkhiQzFKakJGeTBwRXdhYlUvUTd0Z2dic0JQUjk5NVZvMktCeElBelRmbHhVanlYVkJ3MjEKU2d3ZGI1amlpemxEM0NSbVdZZ0ZrRzd0NTVZeGF3ZmpaQjh5bW4xYjhUVjkwN3dRcG8veU8zM3RaaEE3L3BFUwpBSDJYeDk5bkpMbFVGVUtSY1A4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZKNnZKeVk1UlJ1aklQWGxIK2ZvU3g2QzFRT2RNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQ04zcGtCTVM3ekkrbUhvOWdTZQp6SzdXdjl3bXlCTVE5Q3crQXBSNnRBQXg2T1VIN0d1enc5TTV2bXNkYjkrYXBKMHBlZFB4SUg3YXZ1aG9SUXNMCkxqTzRSVm9BMG9aNDBZV3J3UStBR0dvdkZuaWNleXRNcFVSNEZjRXc0ZDRmcGl6V3d0TVNlRlRIUXR6WG84V2MKNFJGWC9xUXNVR1NWa01PaUcvcVVrSFpXQVgyckdhWXZ1Tkw2eHdSRnh5ZHpsRTFSUk56TkNvQzVpTXhjaVRNagpackEvK0pqVEFWU2FuNXZnODFOSmthZEphbmNPWmEwS3JEdkZzd1JJSG5CMGpMLzh3VmZXSTV6czZURU1VZUk1ClF6dU01QXUxUFZ4VXZJUGhlMHl6UXZjWDV5RlhnMkJGU3MzKzJBajlNcENWVTZNY2dSSTl5TTRicitFTUlHL0kKY0pjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
||||||
|
server: https://master.kube.k-space.ee:6443
|
||||||
|
name: kubernetes
|
||||||
|
contexts:
|
||||||
|
- context:
|
||||||
|
cluster: kubernetes
|
||||||
|
user: oidc
|
||||||
|
name: default
|
||||||
|
current-context: default
|
||||||
|
kind: Config
|
||||||
|
preferences: {}
|
||||||
|
users:
|
||||||
|
- name: oidc
|
||||||
|
user:
|
||||||
|
exec:
|
||||||
|
apiVersion: client.authentication.k8s.io/v1beta1
|
||||||
|
args:
|
||||||
|
- oidc-login
|
||||||
|
- get-token
|
||||||
|
- --oidc-issuer-url=https://auth.k-space.ee/
|
||||||
|
- --oidc-client-id=passmower.kubelogin
|
||||||
|
- --oidc-extra-scope=profile,email,groups
|
||||||
|
- --listen-address=127.0.0.1:27890
|
||||||
|
command: kubectl
|
||||||
|
env: null
|
||||||
|
provideClusterInfo: false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Test it:
|
||||||
|
kubectl get nodes # opens browser for authentication
|
||||||
|
```
|
||||||
|
|
||||||
|
### systemd-resolved issues
|
||||||
|
```sh
|
||||||
|
Unable to connect to the server: dial tcp: lookup master.kube.k-space.ee on 127.0.0.53:53: no such host
|
||||||
|
```
|
||||||
|
```
|
||||||
|
Network → VPN → `IPv4` → Other nameservers (Muud nimeserverid): `172.21.0.1`
|
||||||
|
Network → VPN → `IPv6` → Other nameservers (Muud nimeserverid): `2001:bb8:4008:21::1`
|
||||||
|
Network → VPN → `IPv4` → Search domains (Otsingudomeenid): `kube.k-space.ee`
|
||||||
|
Network → VPN → `IPv6` → Search domains (Otsingudomeenid): `kube.k-space.ee`
|
||||||
|
```
|
||||||
|
|
||||||
|
## Cluster formation
|
||||||
|
Created Ubuntu 22.04 VM-s on Proxmox with local storage.
|
||||||
|
Added some ARM64 workers by using Ubuntu 22.04 server on Raspberry Pi.
|
||||||
|
|
||||||
|
First master:
|
||||||
|
```
|
||||||
|
kubeadm init --token-ttl=120m --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint "master.kube.k-space.ee:6443" --upload-certs --apiserver-cert-extra-sans master.kube.k-space.ee --node-name master1.kube.k-space.ee
|
||||||
|
```
|
||||||
|
|
||||||
|
Joining nodes:
|
||||||
|
```
|
||||||
|
# On a master:
|
||||||
|
kubeadm token create --print-join-command
|
||||||
|
|
||||||
|
# Joining node:
|
||||||
|
<printed join command --node-name "$(hostname -f)"
|
||||||
|
```
|
||||||
|
|
||||||
|
Set AZ labels:
|
||||||
|
```
|
||||||
|
for j in $(seq 1 9); do
|
||||||
|
for t in master mon worker; do
|
||||||
|
kubectl label nodes ${t}${j}.kube.k-space.ee topology.kubernetes.io/zone=node${j}
|
||||||
|
done
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
After forming the cluster add taints:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
for j in $(seq 1 9); do
|
||||||
|
kubectl label nodes worker${j}.kube.k-space.ee node-role.kubernetes.io/worker=''
|
||||||
|
done
|
||||||
|
|
||||||
|
for j in $(seq 1 4); do
|
||||||
|
kubectl taint nodes mon${j}.kube.k-space.ee dedicated=monitoring:NoSchedule
|
||||||
|
kubectl label nodes mon${j}.kube.k-space.ee dedicated=monitoring
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
For `arm64` nodes add suitable taint to prevent scheduling non-multiarch images on them:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl taint nodes worker9.kube.k-space.ee arch=arm64:NoSchedule
|
||||||
|
```
|
||||||
|
|
||||||
|
For door controllers:
|
||||||
|
```
|
||||||
|
for j in ground front back; do
|
||||||
|
kubectl taint nodes door-${j}.kube.k-space.ee dedicated=door:NoSchedule
|
||||||
|
kubectl label nodes door-${j}.kube.k-space.ee dedicated=door
|
||||||
|
kubectl taint nodes door-${j}.kube.k-space.ee arch=arm64:NoSchedule
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
## Technology mapping
|
||||||
|
Our self-hosted Kubernetes stack compared to AWS based deployments:
|
||||||
|
|
||||||
|
| Hipster startup | Self-hosted hackerspace | Purpose |
|
||||||
|
|-------------------|-------------------------------------|---------------------------------------------------------------------|
|
||||||
|
| AWS ALB | Traefik | Reverse proxy also known as ingress controller in Kubernetes jargon |
|
||||||
|
| AWS AMP | Prometheus Operator | Monitoring and alerting |
|
||||||
|
| AWS CloudTrail | ECK Operator | Log aggregation |
|
||||||
|
| AWS DocumentDB | MongoDB Community Operator | Highly available NoSQL database |
|
||||||
|
| AWS EBS | Longhorn | Block storage for arbitrary applications needing persistent storage |
|
||||||
|
| AWS EC2 | Proxmox | Virtualization layer |
|
||||||
|
| AWS ECR | Harbor | Docker registry |
|
||||||
|
| AWS EKS | kubeadm | Provision Kubernetes master nodes |
|
||||||
|
| AWS NLB | MetalLB | L2/L3 level load balancing |
|
||||||
|
| AWS RDS for MySQL | MySQL Operator | Provision highly available relational databases |
|
||||||
|
| AWS Route53 | Bind and RFC2136 | DNS records and Let's Encrypt DNS validation |
|
||||||
|
| AWS S3 | Garage | Highly available object storage |
|
||||||
|
| AWS VPC | Calico | Overlay network |
|
||||||
|
| Dex | Passmower | ACL mapping and OIDC provider which integrates with GitHub/Samba |
|
||||||
|
| GitHub Actions | Woodpecker | Build Docker images |
|
||||||
|
| GitHub | Gitea | Source code management, issue tracking |
|
||||||
|
| GitHub OAuth2 | Samba (Active Directory compatible) | Source of truth for authentication and authorization |
|
||||||
|
| Gmail | Wildduck | E-mail |
|
||||||
@@ -10,3 +10,4 @@ this Git repository happen:
|
|||||||
* Song Meo <songmeo@k-space.ee>
|
* Song Meo <songmeo@k-space.ee>
|
||||||
* Rasmus Kallas <rasmus@k-space.ee>
|
* Rasmus Kallas <rasmus@k-space.ee>
|
||||||
* Kristjan Kuusk <kkuusk@k-space.ee>
|
* Kristjan Kuusk <kkuusk@k-space.ee>
|
||||||
|
* Erki Aas <eaas@k-space.ee>
|
||||||
|
|||||||
@@ -1,230 +1,61 @@
|
|||||||
# Kubernetes cluster manifests
|
# k-space.ee infrastructure
|
||||||
|
Kubernetes manifests, Ansible [playbooks](ansible/README.md), and documentation for K-SPACE services.
|
||||||
|
|
||||||
## Introduction
|
<!-- TODO: Docs for adding to ArgoCD (auto-)sync -->
|
||||||
|
- Repo is deployed with [ArgoCD](https://argocd.k-space.ee). For `kubectl` access, see [CLUSTER.md](CLUSTER.md#kubectl).
|
||||||
|
- Debugging Kubernetes [on Wiki](https://wiki.k-space.ee/en/hosting/debugging-kubernetes)
|
||||||
|
- Need help? → [`#kube`](https://k-space-ee.slack.com/archives/C02EYV1NTM2)
|
||||||
|
|
||||||
This is the Kubernetes manifests of services running on k-space.ee domains.
|
Jump to docs: [inventory-app](hackerspace/README.md) / [cameras](_disabled/camtiler/README.md) / [doors](https://wiki.k-space.ee/en/hosting/doors) / [list of apps](https://auth.k-space.ee) // [all infra](ansible/inventory.yml) / [network](https://wiki.k-space.ee/en/hosting/network) / [retro](https://wiki.k-space.ee/en/hosting/retro) / [non-infra](https://wiki.k-space.ee)
|
||||||
The applications are listed on https://auth2.k-space.ee for authenticated users.
|
|
||||||
|
|
||||||
|
Tip: Search the repo for `kind: xyz` for examples.
|
||||||
|
|
||||||
## Cluster access
|
## Supporting services
|
||||||
|
- Build [Git](https://git.k-space.ee) repositories with [Woodpecker](https://woodpecker.k-space.ee)[^nodrone].
|
||||||
|
- Passmower: Authz with `kind: OIDCClient` (or `kind: OIDCMiddlewareClient`[^authz]).
|
||||||
|
- Traefik[^nonginx]: Expose services with `kind: Service` + `kind: Ingress` (TLS and DNS **included**).
|
||||||
|
|
||||||
General discussion is happening in the `#kube` Slack channel.
|
[^nodrone]: Replaces Drone CI.
|
||||||
|
|
||||||
<details><summary>Bootstrapping access</summary>
|
### Additional
|
||||||
For bootstrap access obtain `/etc/kubernetes/admin.conf` from one of the master
|
- bind: Manage _additional_ DNS records with `kind: DNSEndpoint`.
|
||||||
nodes and place it under `~/.kube/config` on your machine.
|
- [Prometheus](https://wiki.k-space.ee/en/hosting/monitoring): Collect metrics with `kind: PodMonitor` (alerts with `kind: PrometheusRule`).
|
||||||
|
- [Slack bots](SLACK.md) and Kubernetes [CLUSTER.md](CLUSTER.md) itself.
|
||||||
|
<!-- TODO: Redirects: external-dns.alpha.kubernetes.io/hostname + in -extras.yaml: IngressRoute and Middleware -->
|
||||||
|
|
||||||
Once Passmower is working, OIDC access for others can be enabled with
|
[^nonginx]: No nginx annotations! Use `kind: Ingress` instead. `IngressRoute` is not used as it doesn't support [`external-dns`](bind/README.md) out of the box.
|
||||||
running following on Kubernetes masters:
|
[^authz]: Applications should use OpenID Connect (`kind: OIDCClient`) for authentication, whereever possible. If not possible, use `kind: OIDCMiddlewareClient` client, which will provide authentication via a Traefik middleware (`traefik.ingress.kubernetes.io/router.middlewares: passmower-proxmox@kubernetescrd`). Sometimes you might use both for extra security.
|
||||||
|
|
||||||
```bash
|
### Network
|
||||||
patch /etc/kubernetes/manifests/kube-apiserver.yaml - << EOF
|
|
||||||
@@ -23,6 +23,10 @@
|
|
||||||
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
|
|
||||||
- --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
|
|
||||||
- --etcd-servers=https://127.0.0.1:2379
|
|
||||||
+ - --oidc-issuer-url=https://auth2.k-space.ee/
|
|
||||||
+ - --oidc-client-id=oidc-gateway.kubelogin
|
|
||||||
+ - --oidc-username-claim=sub
|
|
||||||
+ - --oidc-groups-claim=groups
|
|
||||||
- --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
|
|
||||||
- --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
|
|
||||||
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
|
|
||||||
EOF
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
systemctl restart kubelet
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
The following can be used to talk to the Kubernetes cluster using OIDC credentials:
|
All nodes are in Infra VLAN 21. Routing is implemented with BGP, all nodes and the router make a full-mesh. Both Serice LB IPs and Pod IPs are advertised to the router. Router does NAT for outbound pod traffic.
|
||||||
|
See the [Calico installation](tigera-operator/application.yml) for Kube side and Routing / BGP in the router.
|
||||||
|
Static routes for 193.40.103.36/30 have been added in pve nodes to make them communicating with Passmower via Traefik more stable - otherwise packets coming back to the PVE are routed directly via VLAN 21 internal IPs by the worker nodes, breaking TCP.
|
||||||
|
|
||||||
```bash
|
#### Regenerate networkpolicy-base.yml
|
||||||
kubectl krew install oidc-login
|
It's quite odd there is no better way to generate these.
|
||||||
mkdir -p ~/.kube
|
|
||||||
cat << EOF > ~/.kube/config
|
|
||||||
apiVersion: v1
|
|
||||||
clusters:
|
|
||||||
- cluster:
|
|
||||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EVXdNakEzTXpVMU1Wb1hEVE15TURReU9UQTNNelUxTVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2J2CjY3UFlXVHJMc3ZCQTZuWHUvcm55SlVhNnppTnNWTVN6N2w4ekhxM2JuQnhqWVNPUDJhN1RXTnpUTmZDanZBWngKTmlNbXJya1hpb2dYQWpVVkhSUWZlYm81TFIrb0JBOTdLWlcrN01UMFVJRXBuWVVaaTdBRHlaS01vcEJFUXlMNwp1SlU5UDhnNUR1T29FRHZieGJSMXFuV1JZRXpteFNmSFpocllpMVA3bFd4emkxR243eGRETFZaMjZjNm0xR3Y1CnViRjZyaFBXK1JSVkhiQzFKakJGeTBwRXdhYlUvUTd0Z2dic0JQUjk5NVZvMktCeElBelRmbHhVanlYVkJ3MjEKU2d3ZGI1amlpemxEM0NSbVdZZ0ZrRzd0NTVZeGF3ZmpaQjh5bW4xYjhUVjkwN3dRcG8veU8zM3RaaEE3L3BFUwpBSDJYeDk5bkpMbFVGVUtSY1A4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZKNnZKeVk1UlJ1aklQWGxIK2ZvU3g2QzFRT2RNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQ04zcGtCTVM3ekkrbUhvOWdTZQp6SzdXdjl3bXlCTVE5Q3crQXBSNnRBQXg2T1VIN0d1enc5TTV2bXNkYjkrYXBKMHBlZFB4SUg3YXZ1aG9SUXNMCkxqTzRSVm9BMG9aNDBZV3J3UStBR0dvdkZuaWNleXRNcFVSNEZjRXc0ZDRmcGl6V3d0TVNlRlRIUXR6WG84V2MKNFJGWC9xUXNVR1NWa01PaUcvcVVrSFpXQVgyckdhWXZ1Tkw2eHdSRnh5ZHpsRTFSUk56TkNvQzVpTXhjaVRNagpackEvK0pqVEFWU2FuNXZnODFOSmthZEphbmNPWmEwS3JEdkZzd1JJSG5CMGpMLzh3VmZXSTV6czZURU1VZUk1ClF6dU01QXUxUFZ4VXZJUGhlMHl6UXZjWDV5RlhnMkJGU3MzKzJBajlNcENWVTZNY2dSSTl5TTRicitFTUlHL0kKY0pjPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
|
||||||
server: https://master.kube.k-space.ee:6443
|
|
||||||
name: kubernetes
|
|
||||||
contexts:
|
|
||||||
- context:
|
|
||||||
cluster: kubernetes
|
|
||||||
user: oidc
|
|
||||||
name: default
|
|
||||||
current-context: default
|
|
||||||
kind: Config
|
|
||||||
preferences: {}
|
|
||||||
users:
|
|
||||||
- name: oidc
|
|
||||||
user:
|
|
||||||
exec:
|
|
||||||
apiVersion: client.authentication.k8s.io/v1beta1
|
|
||||||
args:
|
|
||||||
- oidc-login
|
|
||||||
- get-token
|
|
||||||
- --oidc-issuer-url=https://auth2.k-space.ee/
|
|
||||||
- --oidc-client-id=oidc-gateway.kubelogin
|
|
||||||
- --oidc-use-pkce
|
|
||||||
- --oidc-extra-scope=profile,email,groups
|
|
||||||
- --listen-address=127.0.0.1:27890
|
|
||||||
command: kubectl
|
|
||||||
env: null
|
|
||||||
provideClusterInfo: false
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
For access control mapping see [cluster-role-bindings.yml](cluster-role-bindings.yml)
|
[regenerate-networkpolicy-base.sh](regenerate-networkpolicy-base.sh)
|
||||||
|
|
||||||
### systemd-resolved issues on access
|
<!-- Linked to by https://wiki.k-space.ee/e/en/hosting/storage -->
|
||||||
```sh
|
### Databases / -stores:
|
||||||
Unable to connect to the server: dial tcp: lookup master.kube.k-space.ee on 127.0.0.53:53: no such host
|
- Dragonfly: `kind: Dragonfly` (replaces Redis[^redisdead])
|
||||||
```
|
- External (hyperconverged Proxmox) Rook/Ceph: `rook-ceph/storage-classes.yaml` (filesystem storage)[^fs]
|
||||||
```
|
- Mongo[^mongoproblems]: `kind: MongoDBCommunity` (NAS* `inventory-mongodb`)
|
||||||
Network → VPN → `IPv4` → Other nameservers (Muud nimeserverid): `172.21.0.1`
|
- Garage S3[^nominio]: buckets/credentials created with CLI and usually stored in secretspace/kube #TODO: link to docs, kube claim instead?
|
||||||
Network → VPN → `IPv6` → Other nameservers (Muud nimeserverid): `2001:bb8:4008:21::1`
|
- MariaDB*: search for `mysql`, `mariadb`[^mariadb] (replaces MySQL)
|
||||||
Network → VPN → `IPv4` → Search domains (Otsingudomeenid): `kube.k-space.ee`
|
- Postgres*: hardcoded to [harbor/application.yml](harbor/application.yml)
|
||||||
Network → VPN → `IPv6` → Search domains (Otsingudomeenid): `kube.k-space.ee`
|
- Seeded secrets: `kind: SecretClaim` (generates random secret in templated format)
|
||||||
```
|
- Secrets in git: https://git.k-space.ee/secretspace (members personal info, API credentials, see argocd/deploy_key.pub comment)
|
||||||
|
|
||||||
# Technology mapping
|
[^mariadb]: As of 2024-07-30 used by auth, authelia, bitwarden, etherpad, freescout, git, grafana, nextcloud, wiki, woodpecker
|
||||||
|
|
||||||
Our self-hosted Kubernetes stack compared to AWS based deployments:
|
[^redisdead]: Redis has been replaced as redis-operatori couldn't handle itself: didn't reconcile after reboots, master URI was empty, and clients complained about missing masters. Dragonfly replaces KeyDB.
|
||||||
|
|
||||||
| Hipster startup | Self-hosted hackerspace | Purpose |
|
[^mongoproblems]: Mongo problems: Incompatible with rawfile csi (wiredtiger.wt corrupts), complicated resizing (PVCs from statefulset PVC template).
|
||||||
|-------------------|-------------------------------------|---------------------------------------------------------------------|
|
|
||||||
| AWS ALB | Traefik | Reverse proxy also known as ingress controller in Kubernetes jargon |
|
|
||||||
| AWS AMP | Prometheus Operator | Monitoring and alerting |
|
|
||||||
| AWS CloudTrail | ECK Operator | Log aggregation |
|
|
||||||
| AWS DocumentDB | MongoDB Community Operator | Highly available NoSQL database |
|
|
||||||
| AWS EBS | Longhorn | Block storage for arbitrary applications needing persistent storage |
|
|
||||||
| AWS EC2 | Proxmox | Virtualization layer |
|
|
||||||
| AWS ECR | Harbor | Docker registry |
|
|
||||||
| AWS EKS | kubeadm | Provision Kubernetes master nodes |
|
|
||||||
| AWS NLB | MetalLB | L2/L3 level load balancing |
|
|
||||||
| AWS RDS for MySQL | MySQL Operator | Provision highly available relational databases |
|
|
||||||
| AWS Route53 | Bind and RFC2136 | DNS records and Let's Encrypt DNS validation |
|
|
||||||
| AWS S3 | Minio Operator | Highly available object storage |
|
|
||||||
| AWS VPC | Calico | Overlay network |
|
|
||||||
| Dex | Passmower | ACL mapping and OIDC provider which integrates with GitHub/Samba |
|
|
||||||
| GitHub Actions | Drone | Build Docker images |
|
|
||||||
| GitHub | Gitea | Source code management, issue tracking |
|
|
||||||
| GitHub OAuth2 | Samba (Active Directory compatible) | Source of truth for authentication and authorization |
|
|
||||||
| Gmail | Wildduck | E-mail |
|
|
||||||
|
|
||||||
|
[^nominio]: Replaces Minio S3.
|
||||||
|
[^fs]: Replaces Longhorn and proxmox-csi.
|
||||||
|
|
||||||
External dependencies running as classic virtual machines:
|
***
|
||||||
|
_This page is referenced by wiki [front page](https://wiki.k-space.ee) as **the** technical documentation for infra._
|
||||||
- Bind as DNS server
|
|
||||||
|
|
||||||
|
|
||||||
## Adding applications
|
|
||||||
|
|
||||||
Deploy applications via [ArgoCD](https://argocd.k-space.ee)
|
|
||||||
|
|
||||||
We use Treafik with Passmower for Ingress.
|
|
||||||
Applications where possible and where applicable should use `Remote-User`
|
|
||||||
authentication. This prevents application exposure on public Internet.
|
|
||||||
Otherwise use OpenID Connect for authentication,
|
|
||||||
see Argo itself as an example how that is done.
|
|
||||||
|
|
||||||
See `camtiler/ingress.yml` for commented Ingress example.
|
|
||||||
|
|
||||||
Note that we do not use IngressRoute objects because they don't
|
|
||||||
support `external-dns` out of the box.
|
|
||||||
Do NOT add nginx annotations, we use Traefik.
|
|
||||||
Do NOT manually add DNS records, they are added by `external-dns`.
|
|
||||||
Do NOT manually create Certificate objects,
|
|
||||||
these should be handled by `tls:` section in Ingress.
|
|
||||||
|
|
||||||
|
|
||||||
## Cluster formation
|
|
||||||
|
|
||||||
Created Ubuntu 22.04 VM-s on Proxmox with local storage.
|
|
||||||
Added some ARM64 workers by using Ubuntu 22.04 server on Raspberry Pi.
|
|
||||||
|
|
||||||
After machines have booted up and you can reach them via SSH:
|
|
||||||
|
|
||||||
```
|
|
||||||
# Disable Ubuntu caching DNS resolver
|
|
||||||
systemctl disable systemd-resolved.service
|
|
||||||
systemctl stop systemd-resolved
|
|
||||||
rm -fv /etc/resolv.conf
|
|
||||||
cat > /etc/resolv.conf << EOF
|
|
||||||
nameserver 1.1.1.1
|
|
||||||
nameserver 8.8.8.8
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Disable multipathd as Longhorn handles that itself
|
|
||||||
systemctl mask multipathd snapd
|
|
||||||
systemctl disable --now multipathd snapd bluetooth ModemManager hciuart wpa_supplicant packagekit
|
|
||||||
|
|
||||||
# Permit root login
|
|
||||||
sed -i -e 's/PermitRootLogin no/PermitRootLogin without-password/' /etc/ssh/sshd_config
|
|
||||||
systemctl reload ssh
|
|
||||||
cat ~ubuntu/.ssh/authorized_keys > /root/.ssh/authorized_keys
|
|
||||||
userdel -f ubuntu
|
|
||||||
apt-get install -yqq linux-image-generic
|
|
||||||
apt-get remove -yq cloud-init linux-image-*-kvm
|
|
||||||
```
|
|
||||||
|
|
||||||
On master:
|
|
||||||
|
|
||||||
```
|
|
||||||
kubeadm init --token-ttl=120m --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint "master.kube.k-space.ee:6443" --upload-certs --apiserver-cert-extra-sans master.kube.k-space.ee --node-name master1.kube.k-space.ee
|
|
||||||
```
|
|
||||||
|
|
||||||
For the `kubeadm join` command specify FQDN via `--node-name $(hostname -f)`.
|
|
||||||
|
|
||||||
Set AZ labels:
|
|
||||||
|
|
||||||
```
|
|
||||||
for j in $(seq 1 9); do
|
|
||||||
for t in master mon worker storage; do
|
|
||||||
kubectl label nodes ${t}${j}.kube.k-space.ee topology.kubernetes.io/zone=node${j}
|
|
||||||
done
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
After forming the cluster add taints:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
for j in $(seq 1 9); do
|
|
||||||
kubectl label nodes worker${j}.kube.k-space.ee node-role.kubernetes.io/worker=''
|
|
||||||
done
|
|
||||||
|
|
||||||
for j in $(seq 1 4); do
|
|
||||||
kubectl taint nodes mon${j}.kube.k-space.ee dedicated=monitoring:NoSchedule
|
|
||||||
kubectl label nodes mon${j}.kube.k-space.ee dedicated=monitoring
|
|
||||||
done
|
|
||||||
|
|
||||||
for j in $(seq 1 4); do
|
|
||||||
kubectl taint nodes storage${j}.kube.k-space.ee dedicated=storage:NoSchedule
|
|
||||||
kubectl label nodes storage${j}.kube.k-space.ee dedicated=storage
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
For `arm64` nodes add suitable taint to prevent scheduling non-multiarch images on them:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
kubectl taint nodes worker9.kube.k-space.ee arch=arm64:NoSchedule
|
|
||||||
```
|
|
||||||
|
|
||||||
For door controllers:
|
|
||||||
|
|
||||||
```
|
|
||||||
for j in ground front back; do
|
|
||||||
kubectl taint nodes door-${j}.kube.k-space.ee dedicated=door:NoSchedule
|
|
||||||
kubectl label nodes door-${j}.kube.k-space.ee dedicated=door
|
|
||||||
kubectl taint nodes door-${j}.kube.k-space.ee arch=arm64:NoSchedule
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
To reduce wear on storage:
|
|
||||||
|
|
||||||
```
|
|
||||||
echo StandardOutput=null >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl restart kubelet
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
## Slack bots
|
||||||
|
### Doorboy3
|
||||||
|
https://api.slack.com/apps/A05NDB6FVJQ
|
||||||
|
Slack app author: rasmus
|
||||||
|
|
||||||
|
Managed by inventory-app:
|
||||||
|
- Incoming (open-commands) to `/api/slack/doorboy`, inventory-app authorizes based on command originating from #members or #work-shop && oidc access group (floor, workshop).
|
||||||
|
- Posts logs to a private channel. Restricted to 193.40.103.0/24.
|
||||||
|
|
||||||
|
Secrets as `SLACK_DOORLOG_CALLBACK` and `SLACK_VERIFICATION_TOKEN`.
|
||||||
|
|
||||||
|
### oidc-gateway
|
||||||
|
https://api.slack.com/apps/A05DART9PP1
|
||||||
|
Slack app author: eaas
|
||||||
|
|
||||||
|
Managed by passmower:
|
||||||
|
- Links e-mail to slackId.
|
||||||
|
- Login via Slack (not enabled).
|
||||||
|
|
||||||
|
Secrets as `slackId` and `slack-client`.
|
||||||
|
|
||||||
|
### podi-podi uuenduste spämmikoobas
|
||||||
|
https://api.slack.com/apps/A033RE9TUFK
|
||||||
|
Slack app author: rasmus
|
||||||
|
|
||||||
|
Posts Prometheus alerts to a private channel.
|
||||||
|
|
||||||
|
Secret as `slack-secrets`.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: cnpg # aka in-cluster postgres
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: https://github.com/cloudnative-pg/cloudnative-pg
|
||||||
|
targetRevision: v1.25.1
|
||||||
|
path: releases
|
||||||
|
directory:
|
||||||
|
include: 'cnpg-1.25.1.yaml'
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: cnpg-system
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ServerSideApply=true # Resource is too big to fit in 262144 bytes allowed annotation size.
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: mongodb-operator
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
# also depends on git@git.k-space.ee:secretspace/kube.git
|
||||||
|
repoURL: git@git.k-space.ee:k-space/kube.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: mongodb-operator
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: mongodb-operator
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: mysql-clusters
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: mysql-clusters
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: mysql-clusters
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: rotmower
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: rotmower
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -9,3 +9,5 @@ Should ArgoCD be down manifests here can be applied with:
|
|||||||
```
|
```
|
||||||
kubectl apply -n asterisk -f application.yaml
|
kubectl apply -n asterisk -f application.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
asterisk-secrets was dumped to git.k-space.ee/secretspace/kube:_disabled/asterisk
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: asterisk
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: asterisk
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
kubernetes.io/metadata.name: monitoring
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: prometheus
|
||||||
|
- from:
|
||||||
|
- ipBlock:
|
||||||
|
cidr: 100.101.0.0/16
|
||||||
|
- from:
|
||||||
|
- ipBlock:
|
||||||
|
cidr: 100.102.0.0/16
|
||||||
|
- from:
|
||||||
|
- ipBlock:
|
||||||
|
cidr: 81.90.125.224/32 # Lauri home
|
||||||
|
- from:
|
||||||
|
- ipBlock:
|
||||||
|
cidr: 172.20.8.241/32 # Erki A
|
||||||
|
- from:
|
||||||
|
- ipBlock:
|
||||||
|
cidr: 212.47.211.10/32 # Elisa SIP
|
||||||
|
egress:
|
||||||
|
- to:
|
||||||
|
- ipBlock:
|
||||||
|
cidr: 212.47.211.10/32 # Elisa SIP
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# proxmox-csi
|
||||||
|
|
||||||
|
1. create role in pve if it doesn't exist
|
||||||
|
2. create user and assign permissions, preferrably at resource pool level
|
||||||
|
```
|
||||||
|
pveum user add ks-kubernetes-csi@pve
|
||||||
|
pveum aclmod /pool/kspace_pool -user ks-kubernetes-csi@pve -role CSI
|
||||||
|
pveum user token add ks-kubernetes-csi@pve cs -privsep 0
|
||||||
|
```
|
||||||
|
save the token!
|
||||||
|
3. apply `proxmox-csi-plugin.yml` and `storage-class.yaml`, delete proxmox-csi default storage classes from kube.
|
||||||
|
4. add the token from pve to `config.yaml` and create the secret: `kubectl -n csi-proxmox create secret generic proxmox-csi-plugin --from-file=config.yaml`
|
||||||
|
5. label the nodes according to allocation:
|
||||||
|
```
|
||||||
|
kubectl --kubeconfig ~/.kube/k-space label nodes worker1.kube.k-space.ee topology.kubernetes.io/region=pve-cluster topology.kubernetes.io/zone=pve1 --overwrite
|
||||||
|
kubectl --kubeconfig ~/.kube/k-space label nodes worker2.kube.k-space.ee topology.kubernetes.io/region=pve-cluster topology.kubernetes.io/zone=pve2 --overwrite
|
||||||
|
kubectl --kubeconfig ~/.kube/k-space label nodes worker3.kube.k-space.ee topology.kubernetes.io/region=pve-cluster topology.kubernetes.io/zone=pve8 --overwrite
|
||||||
|
kubectl --kubeconfig ~/.kube/k-space label nodes worker4.kube.k-space.ee topology.kubernetes.io/region=pve-cluster topology.kubernetes.io/zone=pve9 --overwrite
|
||||||
|
|
||||||
|
kubectl --kubeconfig ~/.kube/k-space label nodes master1.kube.k-space.ee topology.kubernetes.io/region=pve-cluster topology.kubernetes.io/zone=pve1 --overwrite
|
||||||
|
kubectl --kubeconfig ~/.kube/k-space label nodes master2.kube.k-space.ee topology.kubernetes.io/region=pve-cluster topology.kubernetes.io/zone=pve2 --overwrite
|
||||||
|
kubectl --kubeconfig ~/.kube/k-space label nodes master3.kube.k-space.ee topology.kubernetes.io/region=pve-cluster topology.kubernetes.io/zone=pve8 --overwrite
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
namespace: csi-proxmox
|
||||||
|
|
||||||
|
helmCharts:
|
||||||
|
- includeCRDs: true
|
||||||
|
name: &name proxmox-csi-plugin
|
||||||
|
releaseName: *name
|
||||||
|
repo: oci://ghcr.io/sergelogvinov/charts
|
||||||
|
valuesInline:
|
||||||
|
node:
|
||||||
|
tolerations:
|
||||||
|
- key: node-role.kubernetes.io/control-plane
|
||||||
|
effect: NoSchedule
|
||||||
|
storageClass:
|
||||||
|
- name: proxmox
|
||||||
|
fstype: xfs
|
||||||
|
storage: ks-pvs
|
||||||
|
cache: none
|
||||||
|
ssd: "true"
|
||||||
|
# Not in use, migrating off of NAS…
|
||||||
|
# - name: proxmox-nas
|
||||||
|
# fstype: xfs
|
||||||
|
# storage: ks-pvs-nas
|
||||||
|
# cache: none
|
||||||
|
# # ssd is false, https://github.com/sergelogvinov/proxmox-csi-plugin/issues/404
|
||||||
|
version: 0.3.12 # https://github.com/sergelogvinov/proxmox-csi-plugin/pkgs/container/charts%2Fproxmox-csi-plugin
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- ssh://git@git.k-space.ee/secretspace/kube/proxmox-csi # secrets: proxmox-csi-plugin:config.yaml (cluster info)
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: netshoot
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: netshoot
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
app: netshoot
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: netshoot
|
||||||
|
image: mirror.gcr.io/nicolaka/netshoot:latest
|
||||||
|
command:
|
||||||
|
- /bin/bash
|
||||||
|
args:
|
||||||
|
- '-c'
|
||||||
|
- while true; do ping localhost; sleep 60;done
|
||||||
|
resources: {}
|
||||||
|
terminationMessagePath: /dev/termination-log
|
||||||
|
terminationMessagePolicy: File
|
||||||
|
imagePullPolicy: Always
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- NET_RAW
|
||||||
|
restartPolicy: Always
|
||||||
|
terminationGracePeriodSeconds: 30
|
||||||
|
dnsPolicy: ClusterFirst
|
||||||
|
securityContext: {}
|
||||||
|
schedulerName: default-scheduler
|
||||||
|
strategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
rollingUpdate:
|
||||||
|
maxUnavailable: 25%
|
||||||
|
maxSurge: 25%
|
||||||
|
revisionHistoryLimit: 10
|
||||||
|
progressDeadlineSeconds: 600
|
||||||
@@ -0,0 +1,382 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: discourse
|
||||||
|
annotations:
|
||||||
|
external-dns.alpha.kubernetes.io/target: traefik.k-space.ee
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- "*.k-space.ee"
|
||||||
|
secretName:
|
||||||
|
rules:
|
||||||
|
- host: "discourse.k-space.ee"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: discourse
|
||||||
|
port:
|
||||||
|
name: http
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: discourse
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ipFamilyPolicy: SingleStack
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: http
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/instance: discourse
|
||||||
|
app.kubernetes.io/name: discourse
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: discourse
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: discourse
|
||||||
|
annotations:
|
||||||
|
reloader.stakater.com/auto: "true"
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/instance: discourse
|
||||||
|
app.kubernetes.io/name: discourse
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/instance: discourse
|
||||||
|
app.kubernetes.io/name: discourse
|
||||||
|
spec:
|
||||||
|
serviceAccountName: discourse
|
||||||
|
securityContext:
|
||||||
|
fsGroup: 0
|
||||||
|
fsGroupChangePolicy: Always
|
||||||
|
initContainers:
|
||||||
|
containers:
|
||||||
|
- name: discourse
|
||||||
|
image: docker.io/bitnami/discourse:3.3.2-debian-12-r0
|
||||||
|
imagePullPolicy: "IfNotPresent"
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- CHOWN
|
||||||
|
- SYS_CHROOT
|
||||||
|
- FOWNER
|
||||||
|
- SETGID
|
||||||
|
- SETUID
|
||||||
|
- DAC_OVERRIDE
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
privileged: false
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
runAsGroup: 0
|
||||||
|
runAsNonRoot: false
|
||||||
|
runAsUser: 0
|
||||||
|
seLinuxOptions: {}
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
|
env:
|
||||||
|
- name: BITNAMI_DEBUG
|
||||||
|
value: "true"
|
||||||
|
- name: DISCOURSE_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-password
|
||||||
|
key: username
|
||||||
|
- name: DISCOURSE_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-password
|
||||||
|
key: password
|
||||||
|
- name: DISCOURSE_PORT_NUMBER
|
||||||
|
value: "8080"
|
||||||
|
- name: DISCOURSE_EXTERNAL_HTTP_PORT_NUMBER
|
||||||
|
value: "80"
|
||||||
|
- name: DISCOURSE_DATABASE_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-postgresql
|
||||||
|
key: password
|
||||||
|
- name: POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-postgres-superuser
|
||||||
|
key: password
|
||||||
|
- name: POSTGRESQL_CLIENT_POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-postgres-superuser
|
||||||
|
key: password
|
||||||
|
- name: REDIS_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-redis
|
||||||
|
key: redis-password
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: discourse
|
||||||
|
- secretRef:
|
||||||
|
name: discourse-email
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8080
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 500
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 6
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /srv/status
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 100
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 6
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: "6.0"
|
||||||
|
ephemeral-storage: 2Gi
|
||||||
|
memory: 12288Mi
|
||||||
|
requests:
|
||||||
|
cpu: "1.0"
|
||||||
|
ephemeral-storage: 50Mi
|
||||||
|
memory: 3072Mi
|
||||||
|
volumeMounts:
|
||||||
|
- name: discourse-data
|
||||||
|
mountPath: /bitnami/discourse
|
||||||
|
subPath: discourse
|
||||||
|
- name: sidekiq
|
||||||
|
image: docker.io/bitnami/discourse:3.3.2-debian-12-r0
|
||||||
|
imagePullPolicy: "IfNotPresent"
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- CHOWN
|
||||||
|
- SYS_CHROOT
|
||||||
|
- FOWNER
|
||||||
|
- SETGID
|
||||||
|
- SETUID
|
||||||
|
- DAC_OVERRIDE
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
privileged: false
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
runAsGroup: 0
|
||||||
|
runAsNonRoot: false
|
||||||
|
runAsUser: 0
|
||||||
|
seLinuxOptions: {}
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
|
command:
|
||||||
|
- /opt/bitnami/scripts/discourse/entrypoint.sh
|
||||||
|
args:
|
||||||
|
- /opt/bitnami/scripts/discourse-sidekiq/run.sh
|
||||||
|
env:
|
||||||
|
- name: BITNAMI_DEBUG
|
||||||
|
value: "true"
|
||||||
|
- name: DISCOURSE_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-password
|
||||||
|
key: username
|
||||||
|
- name: DISCOURSE_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-password
|
||||||
|
key: password
|
||||||
|
- name: DISCOURSE_DATABASE_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-postgresql
|
||||||
|
key: password
|
||||||
|
- name: DISCOURSE_POSTGRESQL_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-postgres-superuser
|
||||||
|
key: password
|
||||||
|
- name: REDIS_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: discourse-redis
|
||||||
|
key: redis-password
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: discourse
|
||||||
|
- secretRef:
|
||||||
|
name: discourse-email
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command: ["/bin/sh", "-c", "pgrep -f ^sidekiq"]
|
||||||
|
initialDelaySeconds: 500
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 6
|
||||||
|
readinessProbe:
|
||||||
|
exec:
|
||||||
|
command: ["/bin/sh", "-c", "pgrep -f ^sidekiq"]
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 6
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 750m
|
||||||
|
ephemeral-storage: 2Gi
|
||||||
|
memory: 768Mi
|
||||||
|
requests:
|
||||||
|
cpu: 500m
|
||||||
|
ephemeral-storage: 50Mi
|
||||||
|
memory: 512Mi
|
||||||
|
volumeMounts:
|
||||||
|
- name: discourse-data
|
||||||
|
mountPath: /bitnami/discourse
|
||||||
|
subPath: discourse
|
||||||
|
volumes:
|
||||||
|
- name: discourse-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: discourse-data
|
||||||
|
---
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: discourse-data
|
||||||
|
namespace: discourse
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- "ReadWriteOnce"
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: "3Gi"
|
||||||
|
storageClassName: "proxmox-nas"
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: discourse
|
||||||
|
namespace: discourse
|
||||||
|
data:
|
||||||
|
DISCOURSE_HOST: "discourse.k-space.ee"
|
||||||
|
DISCOURSE_SKIP_INSTALL: "yes"
|
||||||
|
DISCOURSE_PRECOMPILE_ASSETS: "no"
|
||||||
|
DISCOURSE_SITE_NAME: "K-Space Discourse"
|
||||||
|
DISCOURSE_USERNAME: "k-space"
|
||||||
|
DISCOURSE_EMAIL: "dos4dev@k-space.ee"
|
||||||
|
DISCOURSE_REDIS_HOST: "discourse-redis"
|
||||||
|
DISCOURSE_REDIS_PORT_NUMBER: "6379"
|
||||||
|
DISCOURSE_DATABASE_HOST: "discourse-postgres-rw"
|
||||||
|
DISCOURSE_DATABASE_PORT_NUMBER: "5432"
|
||||||
|
DISCOURSE_DATABASE_NAME: "discourse"
|
||||||
|
DISCOURSE_DATABASE_USER: "discourse"
|
||||||
|
POSTGRESQL_CLIENT_DATABASE_HOST: "discourse-postgres-rw"
|
||||||
|
POSTGRESQL_CLIENT_DATABASE_PORT_NUMBER: "5432"
|
||||||
|
POSTGRESQL_CLIENT_POSTGRES_USER: "postgres"
|
||||||
|
POSTGRESQL_CLIENT_CREATE_DATABASE_NAME: "discourse"
|
||||||
|
POSTGRESQL_CLIENT_CREATE_DATABASE_EXTENSIONS: "hstore,pg_trgm"
|
||||||
|
---
|
||||||
|
apiVersion: codemowers.cloud/v1beta1
|
||||||
|
kind: OIDCClient
|
||||||
|
metadata:
|
||||||
|
name: discourse
|
||||||
|
namespace: discourse
|
||||||
|
spec:
|
||||||
|
displayName: Discourse
|
||||||
|
uri: https://discourse.k-space.ee
|
||||||
|
redirectUris:
|
||||||
|
- https://discourse.k-space.ee/auth/oidc/callback
|
||||||
|
allowedGroups:
|
||||||
|
- k-space:floor
|
||||||
|
- k-space:friends
|
||||||
|
grantTypes:
|
||||||
|
- authorization_code
|
||||||
|
- refresh_token
|
||||||
|
responseTypes:
|
||||||
|
- code
|
||||||
|
availableScopes:
|
||||||
|
- openid
|
||||||
|
- profile
|
||||||
|
pkce: false
|
||||||
|
---
|
||||||
|
apiVersion: codemowers.cloud/v1beta1
|
||||||
|
kind: SecretClaim
|
||||||
|
metadata:
|
||||||
|
name: discourse-redis
|
||||||
|
namespace: discourse
|
||||||
|
spec:
|
||||||
|
size: 32
|
||||||
|
mapping:
|
||||||
|
- key: redis-password
|
||||||
|
value: "%(plaintext)s"
|
||||||
|
- key: REDIS_URI
|
||||||
|
value: "redis://:%(plaintext)s@discourse-redis"
|
||||||
|
---
|
||||||
|
apiVersion: dragonflydb.io/v1alpha1
|
||||||
|
kind: Dragonfly
|
||||||
|
metadata:
|
||||||
|
name: discourse-redis
|
||||||
|
namespace: discourse
|
||||||
|
spec:
|
||||||
|
authentication:
|
||||||
|
passwordFromSecret:
|
||||||
|
key: redis-password
|
||||||
|
name: discourse-redis
|
||||||
|
replicas: 3
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 1Gi
|
||||||
|
topologySpreadConstraints:
|
||||||
|
- maxSkew: 1
|
||||||
|
topologyKey: topology.kubernetes.io/zone
|
||||||
|
whenUnsatisfiable: DoNotSchedule
|
||||||
|
labelSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: discourse-redis
|
||||||
|
app.kubernetes.io/part-of: dragonfly
|
||||||
|
---
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: discourse-postgres
|
||||||
|
namespace: discourse
|
||||||
|
spec:
|
||||||
|
instances: 1
|
||||||
|
enableSuperuserAccess: true
|
||||||
|
bootstrap:
|
||||||
|
initdb:
|
||||||
|
database: discourse
|
||||||
|
owner: discourse
|
||||||
|
secret:
|
||||||
|
name: discourse-postgresql
|
||||||
|
dataChecksums: true
|
||||||
|
encoding: 'UTF8'
|
||||||
|
storage:
|
||||||
|
size: 10Gi
|
||||||
|
storageClass: postgres
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
crds.yaml
|
||||||
|
operator.yaml
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# elastic-operator
|
||||||
|
|
||||||
|
```
|
||||||
|
wget https://download.elastic.co/downloads/eck/2.13.0/crds.yaml
|
||||||
|
wget https://download.elastic.co/downloads/eck/2.13.0/operator.yaml
|
||||||
|
kubectl apply -n elastic-system -f application.yml -f crds.yaml -f operator.yaml
|
||||||
|
```
|
||||||
@@ -5,7 +5,7 @@ metadata:
|
|||||||
name: filebeat
|
name: filebeat
|
||||||
spec:
|
spec:
|
||||||
type: filebeat
|
type: filebeat
|
||||||
version: 8.4.3
|
version: 8.14.3
|
||||||
elasticsearchRef:
|
elasticsearchRef:
|
||||||
name: elasticsearch
|
name: elasticsearch
|
||||||
config:
|
config:
|
||||||
@@ -57,7 +57,7 @@ spec:
|
|||||||
cpu: 100m
|
cpu: 100m
|
||||||
memory: 100Mi
|
memory: 100Mi
|
||||||
- name: exporter
|
- name: exporter
|
||||||
image: sepa/beats-exporter
|
image: mirror.gcr.io/sepa/beats-exporter:latest
|
||||||
args:
|
args:
|
||||||
- -p=5066
|
- -p=5066
|
||||||
ports:
|
ports:
|
||||||
@@ -129,7 +129,7 @@ spec:
|
|||||||
- name: filebeat-registry
|
- name: filebeat-registry
|
||||||
mountPath: /usr/share/filebeat/data
|
mountPath: /usr/share/filebeat/data
|
||||||
- name: exporter
|
- name: exporter
|
||||||
image: sepa/beats-exporter
|
image: mirror.gcr.io/sepa/beats-exporter:latest
|
||||||
args:
|
args:
|
||||||
- -p=5066
|
- -p=5066
|
||||||
ports:
|
ports:
|
||||||
@@ -146,11 +146,11 @@ metadata:
|
|||||||
name: filebeat-syslog-udp
|
name: filebeat-syslog-udp
|
||||||
annotations:
|
annotations:
|
||||||
external-dns.alpha.kubernetes.io/hostname: syslog.k-space.ee
|
external-dns.alpha.kubernetes.io/hostname: syslog.k-space.ee
|
||||||
metallb.universe.tf/allow-shared-ip: syslog.k-space.ee
|
metallb.io/allow-shared-ip: syslog.k-space.ee
|
||||||
spec:
|
spec:
|
||||||
type: LoadBalancer
|
type: LoadBalancer
|
||||||
externalTrafficPolicy: Local
|
externalTrafficPolicy: Local
|
||||||
loadBalancerIP: 172.20.51.4
|
loadBalancerIP: 172.21.51.4
|
||||||
ports:
|
ports:
|
||||||
- name: filebeat-syslog
|
- name: filebeat-syslog
|
||||||
port: 514
|
port: 514
|
||||||
@@ -165,11 +165,11 @@ metadata:
|
|||||||
name: filebeat-syslog-tcp
|
name: filebeat-syslog-tcp
|
||||||
annotations:
|
annotations:
|
||||||
external-dns.alpha.kubernetes.io/hostname: syslog.k-space.ee
|
external-dns.alpha.kubernetes.io/hostname: syslog.k-space.ee
|
||||||
metallb.universe.tf/allow-shared-ip: syslog.k-space.ee
|
metallb.io/allow-shared-ip: syslog.k-space.ee
|
||||||
spec:
|
spec:
|
||||||
type: LoadBalancer
|
type: LoadBalancer
|
||||||
externalTrafficPolicy: Local
|
externalTrafficPolicy: Local
|
||||||
loadBalancerIP: 172.20.51.4
|
loadBalancerIP: 172.21.51.4
|
||||||
ports:
|
ports:
|
||||||
- name: filebeat-syslog
|
- name: filebeat-syslog
|
||||||
port: 514
|
port: 514
|
||||||
@@ -218,10 +218,12 @@ kind: Elasticsearch
|
|||||||
metadata:
|
metadata:
|
||||||
name: elasticsearch
|
name: elasticsearch
|
||||||
spec:
|
spec:
|
||||||
version: 8.4.3
|
version: 8.14.3
|
||||||
nodeSets:
|
nodeSets:
|
||||||
- name: default
|
- name: default
|
||||||
count: 1
|
count: 2
|
||||||
|
config:
|
||||||
|
node.roles: [ "data_content", "data_hot", "ingest", "master", "remote_cluster_client", "data_cold", "remote_cluster_client" ]
|
||||||
volumeClaimTemplates:
|
volumeClaimTemplates:
|
||||||
- metadata:
|
- metadata:
|
||||||
name: elasticsearch-data
|
name: elasticsearch-data
|
||||||
@@ -232,17 +234,13 @@ spec:
|
|||||||
requests:
|
requests:
|
||||||
storage: 5Gi
|
storage: 5Gi
|
||||||
storageClassName: longhorn
|
storageClassName: longhorn
|
||||||
http:
|
|
||||||
tls:
|
|
||||||
selfSignedCertificate:
|
|
||||||
disabled: true
|
|
||||||
---
|
---
|
||||||
apiVersion: kibana.k8s.elastic.co/v1
|
apiVersion: kibana.k8s.elastic.co/v1
|
||||||
kind: Kibana
|
kind: Kibana
|
||||||
metadata:
|
metadata:
|
||||||
name: kibana
|
name: kibana
|
||||||
spec:
|
spec:
|
||||||
version: 8.4.3
|
version: 8.14.3
|
||||||
count: 1
|
count: 1
|
||||||
elasticsearchRef:
|
elasticsearchRef:
|
||||||
name: elasticsearch
|
name: elasticsearch
|
||||||
@@ -254,16 +252,6 @@ spec:
|
|||||||
server.publicBaseUrl: https://kibana.k-space.ee
|
server.publicBaseUrl: https://kibana.k-space.ee
|
||||||
xpack.reporting.enabled: false
|
xpack.reporting.enabled: false
|
||||||
xpack.apm.ui.enabled: false
|
xpack.apm.ui.enabled: false
|
||||||
xpack.security.authc.providers:
|
|
||||||
anonymous.anonymous1:
|
|
||||||
order: 0
|
|
||||||
credentials:
|
|
||||||
username: "elastic"
|
|
||||||
secureSettings:
|
|
||||||
- secretName: elasticsearch-es-elastic-user
|
|
||||||
entries:
|
|
||||||
- key: elastic
|
|
||||||
path: xpack.security.authc.providers.anonymous.anonymous1.credentials.password
|
|
||||||
podTemplate:
|
podTemplate:
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
@@ -329,3 +317,28 @@ spec:
|
|||||||
app.kubernetes.io/name: elasticsearch-exporter
|
app.kubernetes.io/name: elasticsearch-exporter
|
||||||
podMetricsEndpoints:
|
podMetricsEndpoints:
|
||||||
- port: exporter
|
- port: exporter
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: kibana
|
||||||
|
annotations:
|
||||||
|
external-dns.alpha.kubernetes.io/target: traefik.k-space.ee
|
||||||
|
kubernetes.io/ingress.class: traefik
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: 'true'
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- '*.k-space.ee'
|
||||||
|
rules:
|
||||||
|
- host: kibana.k-space.ee
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: kibana-kb-http
|
||||||
|
port:
|
||||||
|
number: 5601
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
PASSWORDS.xml
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<include>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_password=">
|
||||||
|
<X-PRE-PROCESS cmd="set" data="ipcall_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1000_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1001_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1002_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1003_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1004_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1005_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1006_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1007_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1008_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="1009_password="/>
|
||||||
|
</include>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
```
|
||||||
|
kubectl -n freeswitch create secret generic freeswitch-passwords --from-file freeswitch/PASSWORDS.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
PASSWORDS.xml is in git.k-space.ee/secretspace/kube:_disabled/freeswitch
|
||||||
|
|
||||||
|
freeswitch-sounds was extracted form of http://files.freeswitch.org/releases/sounds/freeswitch-sounds-en-us-callie-32000-1.0.53.tar.gz (with /us/ at root of the volume)
|
||||||
@@ -0,0 +1,567 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: freeswitch
|
||||||
|
namespace: freeswitch
|
||||||
|
annotations:
|
||||||
|
external-dns.alpha.kubernetes.io/hostname: freeswitch.k-space.ee
|
||||||
|
metallb.io/address-pool: eenet
|
||||||
|
metallb.io/ip-allocated-from-pool: eenet
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: sip-internal-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: 5060
|
||||||
|
targetPort: 5060
|
||||||
|
nodePort: 31787
|
||||||
|
- name: sip-nat-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: 5070
|
||||||
|
targetPort: 5070
|
||||||
|
nodePort: 32241
|
||||||
|
- name: sip-external-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: 5080
|
||||||
|
targetPort: 5080
|
||||||
|
nodePort: 31354
|
||||||
|
- name: sip-data-10000
|
||||||
|
protocol: UDP
|
||||||
|
port: 10000
|
||||||
|
targetPort: 10000
|
||||||
|
nodePort: 30786
|
||||||
|
- name: sip-data-10001
|
||||||
|
protocol: UDP
|
||||||
|
port: 10001
|
||||||
|
targetPort: 10001
|
||||||
|
nodePort: 31788
|
||||||
|
- name: sip-data-10002
|
||||||
|
protocol: UDP
|
||||||
|
port: 10002
|
||||||
|
targetPort: 10002
|
||||||
|
nodePort: 30247
|
||||||
|
- name: sip-data-10003
|
||||||
|
protocol: UDP
|
||||||
|
port: 10003
|
||||||
|
targetPort: 10003
|
||||||
|
nodePort: 32389
|
||||||
|
- name: sip-data-10004
|
||||||
|
protocol: UDP
|
||||||
|
port: 10004
|
||||||
|
targetPort: 10004
|
||||||
|
nodePort: 30723
|
||||||
|
- name: sip-data-10005
|
||||||
|
protocol: UDP
|
||||||
|
port: 10005
|
||||||
|
targetPort: 10005
|
||||||
|
nodePort: 30295
|
||||||
|
- name: sip-data-10006
|
||||||
|
protocol: UDP
|
||||||
|
port: 10006
|
||||||
|
targetPort: 10006
|
||||||
|
nodePort: 30782
|
||||||
|
- name: sip-data-10007
|
||||||
|
protocol: UDP
|
||||||
|
port: 10007
|
||||||
|
targetPort: 10007
|
||||||
|
nodePort: 32165
|
||||||
|
- name: sip-data-10008
|
||||||
|
protocol: UDP
|
||||||
|
port: 10008
|
||||||
|
targetPort: 10008
|
||||||
|
nodePort: 30282
|
||||||
|
- name: sip-data-10009
|
||||||
|
protocol: UDP
|
||||||
|
port: 10009
|
||||||
|
targetPort: 10009
|
||||||
|
nodePort: 31325
|
||||||
|
- name: sip-data-10010
|
||||||
|
protocol: UDP
|
||||||
|
port: 10010
|
||||||
|
targetPort: 10010
|
||||||
|
nodePort: 31234
|
||||||
|
selector:
|
||||||
|
app: freeswitch
|
||||||
|
type: LoadBalancer
|
||||||
|
externalTrafficPolicy: Local
|
||||||
|
ipFamilies:
|
||||||
|
- IPv4
|
||||||
|
ipFamilyPolicy: SingleStack
|
||||||
|
internalTrafficPolicy: Cluster
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: freeswitch-sounds
|
||||||
|
namespace: freeswitch
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 2Gi
|
||||||
|
storageClassName: longhorn
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: freeswitch
|
||||||
|
namespace: freeswitch
|
||||||
|
labels:
|
||||||
|
app: freeswitch
|
||||||
|
annotations:
|
||||||
|
reloader.stakater.com/auto: "true" # reloader is disabled in cluster, (re)deploy it to use
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: freeswitch
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: freeswitch
|
||||||
|
spec:
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: freeswitch-config
|
||||||
|
defaultMode: 420
|
||||||
|
- name: directory
|
||||||
|
configMap:
|
||||||
|
name: freeswitch-directory
|
||||||
|
defaultMode: 420
|
||||||
|
- name: sounds
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: freeswitch-sounds
|
||||||
|
- name: passwords
|
||||||
|
secret:
|
||||||
|
secretName: freeswitch-passwords
|
||||||
|
containers:
|
||||||
|
- name: freeswitch
|
||||||
|
image: mirror.gcr.io/dheaps/freeswitch:latest
|
||||||
|
env:
|
||||||
|
- name: SOUND_TYPES
|
||||||
|
value: en-us-callie
|
||||||
|
- name: SOUND_RATES
|
||||||
|
value: "32000"
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/freeswitch/sip_profiles/external/ipcall.xml
|
||||||
|
subPath: ipcall.xml
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/freeswitch/dialplan/default/00_outbound_ipcall.xml
|
||||||
|
subPath: 00_outbound_ipcall.xml
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/freeswitch/dialplan/public.xml
|
||||||
|
subPath: dialplan.xml
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/freeswitch/autoload_configs/switch.conf.xml
|
||||||
|
subPath: switch.xml
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/freeswitch/vars.xml
|
||||||
|
subPath: vars.xml
|
||||||
|
- name: passwords
|
||||||
|
mountPath: /etc/freeswitch/PASSWORDS.xml
|
||||||
|
subPath: PASSWORDS.xml
|
||||||
|
- name: directory
|
||||||
|
mountPath: /etc/freeswitch/directory/default
|
||||||
|
- name: sounds
|
||||||
|
mountPath: /usr/share/freeswitch/sounds
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: freeswitch-config
|
||||||
|
namespace: freeswitch
|
||||||
|
data:
|
||||||
|
dialplan.xml: |
|
||||||
|
<!--
|
||||||
|
NOTICE:
|
||||||
|
|
||||||
|
This context is usually accessed via the external sip profile listening on port 5080.
|
||||||
|
|
||||||
|
It is recommended to have separate inbound and outbound contexts. Not only for security
|
||||||
|
but clearing up why you would need to do such a thing. You don't want outside un-authenticated
|
||||||
|
callers hitting your default context which allows dialing calls thru your providers and results
|
||||||
|
in Toll Fraud.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- http://wiki.freeswitch.org/wiki/Dialplan_XML -->
|
||||||
|
<include>
|
||||||
|
<context name="public">
|
||||||
|
|
||||||
|
<extension name="unloop">
|
||||||
|
<condition field="${unroll_loops}" expression="^true$"/>
|
||||||
|
<condition field="${sip_looped_call}" expression="^true$">
|
||||||
|
<action application="deflect" data="${destination_number}"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
<!--
|
||||||
|
Tag anything pass thru here as an outside_call so you can make sure not
|
||||||
|
to create any routing loops based on the conditions that it came from
|
||||||
|
the outside of the switch.
|
||||||
|
-->
|
||||||
|
<extension name="outside_call" continue="true">
|
||||||
|
<condition>
|
||||||
|
<action application="set" data="outside_call=true"/>
|
||||||
|
<action application="export" data="RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)}"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
<extension name="call_debug" continue="true">
|
||||||
|
<condition field="${call_debug}" expression="^true$" break="never">
|
||||||
|
<action application="info"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
<extension name="public_extensions">
|
||||||
|
<condition field="destination_number" expression="^(10[01][0-9])$">
|
||||||
|
<action application="transfer" data="$1 XML default"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
<extension name="public_conference_extensions">
|
||||||
|
<condition field="destination_number" expression="^(3[5-8][01][0-9])$">
|
||||||
|
<action application="transfer" data="$1 XML default"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
You can place files in the public directory to get included.
|
||||||
|
-->
|
||||||
|
<X-PRE-PROCESS cmd="include" data="public/*.xml"/>
|
||||||
|
<!--
|
||||||
|
If you have made it this far lets challenge the caller and if they authenticate
|
||||||
|
lets try what they dialed in the default context. (commented out by default)
|
||||||
|
-->
|
||||||
|
<!-- TODO:
|
||||||
|
<extension name="check_auth" continue="true">
|
||||||
|
<condition field="${sip_authorized}" expression="^true$" break="never">
|
||||||
|
<anti-action application="respond" data="407"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
-->
|
||||||
|
<extension name="transfer_to_default">
|
||||||
|
<condition>
|
||||||
|
<!-- TODO: proper ring grouping -->
|
||||||
|
<action application="bridge" data="user/1004@freeswitch.k-space.ee,user/1003@freeswitch.k-space.ee,sofia/gateway/ipcall/53543824"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
</context>
|
||||||
|
</include>
|
||||||
|
ipcall.xml: |
|
||||||
|
<include>
|
||||||
|
<gateway name="ipcall">
|
||||||
|
<param name="proxy" value="sip.ipcall.ee"/>
|
||||||
|
<param name="register" value="true"/>
|
||||||
|
<param name="realm" value="sip.ipcall.ee"/>
|
||||||
|
<param name="username" value="6659652"/>
|
||||||
|
<param name="password" value="$${ipcall_password}"/>
|
||||||
|
<param name="from-user" value="6659652"/>
|
||||||
|
<param name="from-domain" value="sip.ipcall.ee"/>
|
||||||
|
<param name="extension" value="ring_group/default"/>
|
||||||
|
</gateway>
|
||||||
|
</include>
|
||||||
|
00_outbound_ipcall.xml: |
|
||||||
|
<extension name="outbound">
|
||||||
|
<!-- TODO: check toll_allow ? -->
|
||||||
|
<condition field="destination_number" expression="^(\d+)$">
|
||||||
|
<action application="set" data="sip_invite_domain=sip.ipcall.ee"/>
|
||||||
|
<action application="bridge" data="sofia/gateway/ipcall/${destination_number}"/>
|
||||||
|
</condition>
|
||||||
|
</extension>
|
||||||
|
switch.xml: |
|
||||||
|
<configuration name="switch.conf" description="Core Configuration">
|
||||||
|
<cli-keybindings>
|
||||||
|
<key name="1" value="help"/>
|
||||||
|
<key name="2" value="status"/>
|
||||||
|
<key name="3" value="show channels"/>
|
||||||
|
<key name="4" value="show calls"/>
|
||||||
|
<key name="5" value="sofia status"/>
|
||||||
|
<key name="6" value="reloadxml"/>
|
||||||
|
<key name="7" value="console loglevel 0"/>
|
||||||
|
<key name="8" value="console loglevel 7"/>
|
||||||
|
<key name="9" value="sofia status profile internal"/>
|
||||||
|
<key name="10" value="sofia profile internal siptrace on"/>
|
||||||
|
<key name="11" value="sofia profile internal siptrace off"/>
|
||||||
|
<key name="12" value="version"/>
|
||||||
|
</cli-keybindings>
|
||||||
|
<default-ptimes>
|
||||||
|
</default-ptimes>
|
||||||
|
<settings>
|
||||||
|
<param name="colorize-console" value="true"/>
|
||||||
|
<param name="dialplan-timestamps" value="false"/>
|
||||||
|
<param name="max-db-handles" value="50"/>
|
||||||
|
<param name="db-handle-timeout" value="10"/>
|
||||||
|
<param name="max-sessions" value="1000"/>
|
||||||
|
<param name="sessions-per-second" value="30"/>
|
||||||
|
<param name="loglevel" value="debug"/>
|
||||||
|
<param name="mailer-app" value="sendmail"/>
|
||||||
|
<param name="mailer-app-args" value="-t"/>
|
||||||
|
<param name="dump-cores" value="yes"/>
|
||||||
|
<param name="rtp-start-port" value="10000"/>
|
||||||
|
<param name="rtp-end-port" value="10010"/>
|
||||||
|
</settings>
|
||||||
|
</configuration>
|
||||||
|
vars.xml: |
|
||||||
|
<include>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="disable_system_api_commands=true"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/en/us/callie"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="domain=freeswitch.k-space.ee"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="domain_name=$${domain}"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="hold_music=local_stream://moh"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="use_profile=external"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="rtp_sdes_suites=AEAD_AES_256_GCM_8|AEAD_AES_128_GCM_8|AES_CM_256_HMAC_SHA1_80|AES_CM_192_HMAC_SHA1_80|AES_CM_128_HMAC_SHA1_80|AES_CM_256_HMAC_SHA1_32|AES_CM_192_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_32|AES_CM_128_NULL_AUTH"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,G722,PCMU,PCMA,H264,VP8"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,G722,PCMU,PCMA,H264,VP8"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="xmpp_client_profile=xmppc"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="xmpp_server_profile=xmpps"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="bind_server_ip=auto"/>
|
||||||
|
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=host:freeswitch.k-space.ee"/>
|
||||||
|
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=host:freeswitch.k-space.ee"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="unroll_loops=true"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="outbound_caller_name=FreeSWITCH"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="outbound_caller_id=0000000000"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="call_debug=false"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="console_loglevel=info"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_areacode=372"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_country=EE"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="presence_privacy=false"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="au-ring=%(400,200,383,417);%(400,2000,383,417)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="be-ring=%(1000,3000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="ca-ring=%(2000,4000,440,480)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="cn-ring=%(1000,4000,450)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="cy-ring=%(1500,3000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="cz-ring=%(1000,4000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="de-ring=%(1000,4000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="dk-ring=%(1000,4000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="dz-ring=%(1500,3500,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="eg-ring=%(2000,1000,475,375)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="es-ring=%(1500,3000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="fi-ring=%(1000,4000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="fr-ring=%(1500,3500,440)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="hk-ring=%(400,200,440,480);%(400,3000,440,480)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="hu-ring=%(1250,3750,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="il-ring=%(1000,3000,400)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="in-ring=%(400,200,425,375);%(400,2000,425,375)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="jp-ring=%(1000,2000,420,380)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="ko-ring=%(1000,2000,440,480)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="pk-ring=%(1000,2000,400)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="pl-ring=%(1000,4000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="ro-ring=%(1850,4150,475,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="rs-ring=%(1000,4000,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="ru-ring=%(800,3200,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="sa-ring=%(1200,4600,425)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="tr-ring=%(2000,4000,450)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="uk-ring=%(400,200,400,450);%(400,2000,400,450)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="us-ring=%(2000,4000,440,480)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="bong-ring=v=-7;%(100,0,941.0,1477.0);v=-7;>=2;+=.1;%(1400,0,350,440)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="beep=%(1000,0,640)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="sit=%(274,0,913.8);%(274,0,1370.6);%(380,0,1776.7)"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="df_us_ssn=(?!219099999|078051120)(?!666|000|9\d{2})\d{3}(?!00)\d{2}(?!0{4})\d{4}"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="df_luhn=?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11}"/>
|
||||||
|
<XX-PRE-PROCESS cmd="set" data="digits_dialed_filter=(($${df_luhn})|($${df_us_ssn}))"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_provider=sip.ipcall.ee"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_provider_username="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_provider_password="/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_provider_from_domain=sip.ipcall.ee"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_provider_register=true"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="default_provider_contact=1004"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="sip_tls_version=tlsv1,tlsv1.1,tlsv1.2"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="sip_tls_ciphers=ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="internal_auth_calls=true"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="internal_ssl_enable=false"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_auth_calls=false"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_sip_port=5080"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_tls_port=5081"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="external_ssl_enable=false"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="rtp_video_max_bandwidth_in=3mb"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="rtp_video_max_bandwidth_out=3mb"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="suppress_cng=true"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="rtp_liberal_dtmf=true"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="video_mute_png=$${images_dir}/default-mute.png"/>
|
||||||
|
<X-PRE-PROCESS cmd="set" data="video_no_avatar_png=$${images_dir}/default-avatar.png"/>
|
||||||
|
<X-PRE-PROCESS cmd="include" data="PASSWORDS.xml"/>
|
||||||
|
</include>
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: freeswitch-directory
|
||||||
|
namespace: freeswitch
|
||||||
|
data:
|
||||||
|
1000.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1000">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1000_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1000"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1000"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1001.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1001">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1001_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1001"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1001"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1002.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1002">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1002_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1002"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1002"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1003.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1003">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1003_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1003"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value="Erki A"/>
|
||||||
|
<variable name="effective_caller_id_number" value="1003"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1004.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1004">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1004_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1004"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value="Erki A"/>
|
||||||
|
<variable name="effective_caller_id_number" value="1004"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1005.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1005">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1005_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1005"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1005"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1006.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1006">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1006_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1006"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1006"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1007.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1007">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1007_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1007"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1007"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1008.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1008">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1008_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1008"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1008"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
1009.xml: |
|
||||||
|
<include>
|
||||||
|
<user id="1009">
|
||||||
|
<params>
|
||||||
|
<param name="password" value="$${1009_password}"/>
|
||||||
|
</params>
|
||||||
|
<variables>
|
||||||
|
<variable name="toll_allow" value="domestic,local"/>
|
||||||
|
<variable name="accountcode" value="1009"/>
|
||||||
|
<variable name="user_context" value="default"/>
|
||||||
|
<variable name="effective_caller_id_name" value=""/>
|
||||||
|
<variable name="effective_caller_id_number" value="1009"/>
|
||||||
|
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
|
||||||
|
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
|
||||||
|
</variables>
|
||||||
|
</user>
|
||||||
|
</include>
|
||||||
|
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: NetworkPolicy
|
kind: NetworkPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: asterisk
|
name: freeswitch
|
||||||
spec:
|
spec:
|
||||||
podSelector:
|
podSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: asterisk
|
app: freeswitch
|
||||||
policyTypes:
|
policyTypes:
|
||||||
- Ingress
|
- Ingress
|
||||||
- Egress
|
- Egress
|
||||||
@@ -32,14 +32,18 @@ spec:
|
|||||||
cidr: 172.20.8.241/32 # Erki A
|
cidr: 172.20.8.241/32 # Erki A
|
||||||
- from:
|
- from:
|
||||||
- ipBlock:
|
- ipBlock:
|
||||||
cidr: 195.222.16.36/32 # Elisa SIP
|
cidr: 212.47.211.10/32 # Elisa SIP
|
||||||
- from:
|
- from:
|
||||||
- ipBlock:
|
- ipBlock:
|
||||||
cidr: 195.222.16.38/32 # Elisa SIP
|
cidr: 212.47.211.10/32 # Elisa SIP
|
||||||
egress:
|
egress:
|
||||||
- to:
|
- to:
|
||||||
- ipBlock:
|
- ipBlock:
|
||||||
cidr: 195.222.16.36/32 # Elisa SIP
|
cidr: 212.47.211.10/32 # Elisa SIP
|
||||||
- to:
|
- to:
|
||||||
- ipBlock:
|
- ipBlock:
|
||||||
cidr: 195.222.16.38/32 # Elisa SIP
|
cidr: 195.222.16.38/32 # Elisa SIP
|
||||||
|
- to:
|
||||||
|
ports:
|
||||||
|
- port: 53
|
||||||
|
protocol: UDP
|
||||||
+2
-2
@@ -62,7 +62,7 @@ spec:
|
|||||||
serviceAccountName: local-path-provisioner-service-account
|
serviceAccountName: local-path-provisioner-service-account
|
||||||
containers:
|
containers:
|
||||||
- name: local-path-provisioner
|
- name: local-path-provisioner
|
||||||
image: rancher/local-path-provisioner:v0.0.22
|
image: mirror.gcr.io/rancher/local-path-provisioner:v0.0.22
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command:
|
command:
|
||||||
- local-path-provisioner
|
- local-path-provisioner
|
||||||
@@ -151,7 +151,7 @@ data:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: helper-pod
|
- name: helper-pod
|
||||||
image: busybox
|
image: mirror.gcr.io/library/busybox
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# MongoDB Community Kubernetes Operator
|
||||||
|
|
||||||
|
## Derployment
|
||||||
|
|
||||||
|
With ArgoCD. Render it locally:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kustomize build . --enable-helm
|
||||||
|
```
|
||||||
|
|
||||||
|
# Instantiating databases
|
||||||
|
For each application include mongodb-netpol.yaml and kustomization in resources:
|
||||||
|
```yaml
|
||||||
|
resources:
|
||||||
|
- https://git.k-space.ee/k-space/kube//mongodb-operator/mongodb-netpol.yaml
|
||||||
|
- https://github.com/mongodb/mongodb-kubernetes-operator//config/rbac/?ref=v0.13.0
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
kubectl create secret generic -n <application> mongodb-application-user-password --from-literal="password=$(cat /dev/urandom | base64 | head -c 30)"
|
||||||
|
```
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
namespace: mongodb-operator
|
||||||
|
|
||||||
|
# spec: https://kubectl.docs.kubernetes.io/references/kustomize/builtins/#_helmchartinflationgenerator_
|
||||||
|
helmCharts:
|
||||||
|
- includeCRDs: true
|
||||||
|
name: &name community-operator
|
||||||
|
releaseName: *name
|
||||||
|
repo: https://mongodb.github.io/helm-charts
|
||||||
|
valuesFile: values.yaml
|
||||||
|
version: 0.13.0 # helm search repo mongodb/community-operator --versions
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Allow any pod in this namespace to connect to MongoDB and
|
||||||
|
# allow cluster members to talk to eachother
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: mongodb-operator
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: mongodb-svc
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
- Egress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- podSelector: {}
|
||||||
|
ports:
|
||||||
|
- port: 27017
|
||||||
|
egress:
|
||||||
|
- to:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: mongodb-svc
|
||||||
|
ports:
|
||||||
|
- port: 27017
|
||||||
@@ -1,5 +1,2 @@
|
|||||||
operator:
|
operator:
|
||||||
watchNamespace: '*'
|
watchNamespace: '*'
|
||||||
|
|
||||||
mongodb:
|
|
||||||
repo: mirror.gcr.io
|
|
||||||
@@ -13,7 +13,7 @@ spec:
|
|||||||
podSpec:
|
podSpec:
|
||||||
containers:
|
containers:
|
||||||
- name: mariadb
|
- name: mariadb
|
||||||
image: mariadb:10.9.7@sha256:198c7a5fea3d7285762042a628fe8f83f0a7ccef559605b4cc9502e65210880b
|
image: mirror.gcr.io/library/mariadb:10.9.7@sha256:198c7a5fea3d7285762042a628fe8f83f0a7ccef559605b4cc9502e65210880b
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
dedicated: storage
|
dedicated: storage
|
||||||
@@ -29,7 +29,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: phpmyadmin
|
- name: phpmyadmin
|
||||||
image: phpmyadmin/phpmyadmin
|
image: mirror.gcr.io/phpmyadmin/phpmyadmin
|
||||||
ports:
|
ports:
|
||||||
- name: web
|
- name: web
|
||||||
containerPort: 80
|
containerPort: 80
|
||||||
@@ -54,8 +54,8 @@ spec:
|
|||||||
configMap:
|
configMap:
|
||||||
name: phpmyadmin
|
name: phpmyadmin
|
||||||
---
|
---
|
||||||
apiVersion: codemowers.io/v1alpha1
|
apiVersion: codemowers.cloud/v1beta1
|
||||||
kind: OIDCGWMiddlewareClient
|
kind: OIDCMiddlewareClient
|
||||||
metadata:
|
metadata:
|
||||||
name: phpmyadmin
|
name: phpmyadmin
|
||||||
spec:
|
spec:
|
||||||
@@ -77,7 +77,6 @@ metadata:
|
|||||||
annotations:
|
annotations:
|
||||||
kubernetes.io/ingress.class: traefik
|
kubernetes.io/ingress.class: traefik
|
||||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
traefik.ingress.kubernetes.io/router.tls: "true"
|
|
||||||
external-dns.alpha.kubernetes.io/target: traefik.k-space.ee
|
external-dns.alpha.kubernetes.io/target: traefik.k-space.ee
|
||||||
traefik.ingress.kubernetes.io/router.middlewares: mysql-clusters-phpmyadmin@kubernetescrd
|
traefik.ingress.kubernetes.io/router.middlewares: mysql-clusters-phpmyadmin@kubernetescrd
|
||||||
spec:
|
spec:
|
||||||
@@ -14,7 +14,7 @@ spec:
|
|||||||
podSpec:
|
podSpec:
|
||||||
containers:
|
containers:
|
||||||
- name: mariadb
|
- name: mariadb
|
||||||
image: mariadb:10.9.7@sha256:198c7a5fea3d7285762042a628fe8f83f0a7ccef559605b4cc9502e65210880b
|
image: mirror.gcr.io/library/mariadb:10.9.7@sha256:198c7a5fea3d7285762042a628fe8f83f0a7ccef559605b4cc9502e65210880b
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
dedicated: storage
|
dedicated: storage
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: storage.k8s.io/v1
|
||||||
|
kind: StorageClass
|
||||||
|
metadata:
|
||||||
|
name: mysql
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/description: |
|
||||||
|
Storage class for MySQL, MariaDB and similar applications that
|
||||||
|
implement high availability in application layer.
|
||||||
|
This storage class uses XFS, has no block level redundancy and
|
||||||
|
has block device level caching disabled.
|
||||||
|
provisioner: csi.proxmox.sinextra.dev
|
||||||
|
reclaimPolicy: Retain
|
||||||
|
volumeBindingMode: WaitForFirstConsumer
|
||||||
|
allowVolumeExpansion: true
|
||||||
|
parameters:
|
||||||
|
csi.storage.k8s.io/fstype: xfs
|
||||||
|
storage: ks-pvs
|
||||||
|
cache: none
|
||||||
|
ssd: "true"
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
deployment.kubernetes.io/revision: '1'
|
||||||
|
creationTimestamp: '2023-04-24T13:15:48Z'
|
||||||
|
deletionGracePeriodSeconds: 0
|
||||||
|
deletionTimestamp: '2026-01-03T03:19:39Z'
|
||||||
|
finalizers:
|
||||||
|
- foregroundDeletion
|
||||||
|
generation: 3
|
||||||
|
name: whois-cache
|
||||||
|
namespace: prometheus-operator
|
||||||
|
resourceVersion: '1015324661'
|
||||||
|
uid: dbf9527d-4c64-44fe-bd82-05da97bc1456
|
||||||
|
spec:
|
||||||
|
progressDeadlineSeconds: 600
|
||||||
|
replicas: 1
|
||||||
|
revisionHistoryLimit: 10
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: whois-cache
|
||||||
|
strategy:
|
||||||
|
rollingUpdate:
|
||||||
|
maxSurge: 25%
|
||||||
|
maxUnavailable: 25%
|
||||||
|
type: RollingUpdate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
app: whois-cache
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: codemowers/whois
|
||||||
|
imagePullPolicy: Always
|
||||||
|
name: whois
|
||||||
|
ports:
|
||||||
|
- containerPort: 3005
|
||||||
|
name: http
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
terminationMessagePath: /dev/termination-log
|
||||||
|
terminationMessagePolicy: File
|
||||||
|
dnsPolicy: ClusterFirst
|
||||||
|
enableServiceLinks: false
|
||||||
|
restartPolicy: Always
|
||||||
|
schedulerName: default-scheduler
|
||||||
|
securityContext: {}
|
||||||
|
terminationGracePeriodSeconds: 30
|
||||||
|
status:
|
||||||
|
conditions:
|
||||||
|
- lastTransitionTime: '2023-04-24T13:15:48Z'
|
||||||
|
lastUpdateTime: '2023-04-24T13:16:17Z'
|
||||||
|
message: ReplicaSet "whois-cache-5ffc65dcc7" has successfully progressed.
|
||||||
|
reason: NewReplicaSetAvailable
|
||||||
|
status: 'True'
|
||||||
|
type: Progressing
|
||||||
|
- lastTransitionTime: '2026-01-03T03:19:39Z'
|
||||||
|
lastUpdateTime: '2026-01-03T03:19:39Z'
|
||||||
|
message: Deployment does not have minimum availability.
|
||||||
|
reason: MinimumReplicasUnavailable
|
||||||
|
status: 'False'
|
||||||
|
type: Available
|
||||||
|
observedGeneration: 3
|
||||||
|
unavailableReplicas: 1
|
||||||
|
|
||||||
@@ -1,6 +1,14 @@
|
|||||||
|
# XFS hostpath based local PV-s
|
||||||
|
|
||||||
|
```
|
||||||
|
wget https://openebs.github.io/charts/openebs-operator-lite.yaml
|
||||||
|
kubectl apply -f openebs-operator-lite.yaml -f storage-class.yaml
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
# Raw file based local PV-s
|
# Raw file based local PV-s
|
||||||
|
|
||||||
We currently only use `rawfile-localpv` portion of OpenEBS.
|
### TO BE DEPRECATED
|
||||||
|
|
||||||
The manifests were rendered using Helm template from https://github.com/openebs/rawfile-localpv
|
The manifests were rendered using Helm template from https://github.com/openebs/rawfile-localpv
|
||||||
and subsequently modified
|
and subsequently modified
|
||||||
@@ -9,3 +17,4 @@ and subsequently modified
|
|||||||
kubectl create namespace openebs
|
kubectl create namespace openebs
|
||||||
kubectl apply -n openebs -f rawfile.yaml
|
kubectl apply -n openebs -f rawfile.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,937 @@
|
|||||||
|
# This manifest deploys the OpenEBS control plane components, with associated CRs & RBAC rules
|
||||||
|
# NOTE: On GKE, deploy the openebs-operator.yaml in admin context
|
||||||
|
|
||||||
|
# Create the OpenEBS namespace
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: openebs
|
||||||
|
---
|
||||||
|
# Create Maya Service Account
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: openebs-maya-operator
|
||||||
|
namespace: openebs
|
||||||
|
---
|
||||||
|
# Define Role that allows operations on K8s pods/deployments
|
||||||
|
kind: ClusterRole
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: openebs-maya-operator
|
||||||
|
rules:
|
||||||
|
- apiGroups: ["*"]
|
||||||
|
resources: ["nodes", "nodes/proxy"]
|
||||||
|
verbs: ["*"]
|
||||||
|
- apiGroups: ["*"]
|
||||||
|
resources: ["namespaces", "services", "pods", "pods/exec", "deployments", "deployments/finalizers", "replicationcontrollers", "replicasets", "events", "endpoints", "configmaps", "secrets", "jobs", "cronjobs"]
|
||||||
|
verbs: ["*"]
|
||||||
|
- apiGroups: ["*"]
|
||||||
|
resources: ["statefulsets", "daemonsets"]
|
||||||
|
verbs: ["*"]
|
||||||
|
- apiGroups: ["*"]
|
||||||
|
resources: ["resourcequotas", "limitranges"]
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
- apiGroups: ["*"]
|
||||||
|
resources: ["ingresses", "horizontalpodautoscalers", "verticalpodautoscalers", "poddisruptionbudgets", "certificatesigningrequests"]
|
||||||
|
verbs: ["list", "watch"]
|
||||||
|
- apiGroups: ["*"]
|
||||||
|
resources: ["storageclasses", "persistentvolumeclaims", "persistentvolumes"]
|
||||||
|
verbs: ["*"]
|
||||||
|
- apiGroups: ["apiextensions.k8s.io"]
|
||||||
|
resources: ["customresourcedefinitions"]
|
||||||
|
verbs: [ "get", "list", "create", "update", "delete", "patch"]
|
||||||
|
- apiGroups: ["openebs.io"]
|
||||||
|
resources: [ "*"]
|
||||||
|
verbs: ["*"]
|
||||||
|
- apiGroups: ["coordination.k8s.io"]
|
||||||
|
resources: ["leases"]
|
||||||
|
verbs: ["get", "create", "update"]
|
||||||
|
- nonResourceURLs: ["/metrics"]
|
||||||
|
verbs: ["get"]
|
||||||
|
---
|
||||||
|
# Bind the Service Account with the Role Privileges.
|
||||||
|
# TODO: Check if default account also needs to be there
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: openebs-maya-operator
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: openebs-maya-operator
|
||||||
|
namespace: openebs
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
name: openebs-maya-operator
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.5.0
|
||||||
|
creationTimestamp: null
|
||||||
|
name: blockdevices.openebs.io
|
||||||
|
spec:
|
||||||
|
group: openebs.io
|
||||||
|
names:
|
||||||
|
kind: BlockDevice
|
||||||
|
listKind: BlockDeviceList
|
||||||
|
plural: blockdevices
|
||||||
|
shortNames:
|
||||||
|
- bd
|
||||||
|
singular: blockdevice
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .spec.nodeAttributes.nodeName
|
||||||
|
name: NodeName
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.path
|
||||||
|
name: Path
|
||||||
|
priority: 1
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.filesystem.fsType
|
||||||
|
name: FSType
|
||||||
|
priority: 1
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.capacity.storage
|
||||||
|
name: Size
|
||||||
|
type: string
|
||||||
|
- jsonPath: .status.claimState
|
||||||
|
name: ClaimState
|
||||||
|
type: string
|
||||||
|
- jsonPath: .status.state
|
||||||
|
name: Status
|
||||||
|
type: string
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: BlockDevice is the Schema for the blockdevices API
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: DeviceSpec defines the properties and runtime status of a BlockDevice
|
||||||
|
properties:
|
||||||
|
aggregateDevice:
|
||||||
|
description: AggregateDevice was intended to store the hierarchical information in cases of LVM. However this is currently not implemented and may need to be re-looked into for better design. To be deprecated
|
||||||
|
type: string
|
||||||
|
capacity:
|
||||||
|
description: Capacity
|
||||||
|
properties:
|
||||||
|
logicalSectorSize:
|
||||||
|
description: LogicalSectorSize is blockdevice logical-sector size in bytes
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
|
physicalSectorSize:
|
||||||
|
description: PhysicalSectorSize is blockdevice physical-Sector size in bytes
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
|
storage:
|
||||||
|
description: Storage is the blockdevice capacity in bytes
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- storage
|
||||||
|
type: object
|
||||||
|
claimRef:
|
||||||
|
description: ClaimRef is the reference to the BDC which has claimed this BD
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: API version of the referent.
|
||||||
|
type: string
|
||||||
|
fieldPath:
|
||||||
|
description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.'
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
|
||||||
|
type: string
|
||||||
|
resourceVersion:
|
||||||
|
description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
|
||||||
|
type: string
|
||||||
|
uid:
|
||||||
|
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
details:
|
||||||
|
description: Details contain static attributes of BD like model,serial, and so forth
|
||||||
|
properties:
|
||||||
|
compliance:
|
||||||
|
description: Compliance is standards/specifications version implemented by device firmware such as SPC-1, SPC-2, etc
|
||||||
|
type: string
|
||||||
|
deviceType:
|
||||||
|
description: DeviceType represents the type of device like sparse, disk, partition, lvm, crypt
|
||||||
|
enum:
|
||||||
|
- disk
|
||||||
|
- partition
|
||||||
|
- sparse
|
||||||
|
- loop
|
||||||
|
- lvm
|
||||||
|
- crypt
|
||||||
|
- dm
|
||||||
|
- mpath
|
||||||
|
type: string
|
||||||
|
driveType:
|
||||||
|
description: DriveType is the type of backing drive, HDD/SSD
|
||||||
|
enum:
|
||||||
|
- HDD
|
||||||
|
- SSD
|
||||||
|
- Unknown
|
||||||
|
- ""
|
||||||
|
type: string
|
||||||
|
firmwareRevision:
|
||||||
|
description: FirmwareRevision is the disk firmware revision
|
||||||
|
type: string
|
||||||
|
hardwareSectorSize:
|
||||||
|
description: HardwareSectorSize is the hardware sector size in bytes
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
|
logicalBlockSize:
|
||||||
|
description: LogicalBlockSize is the logical block size in bytes reported by /sys/class/block/sda/queue/logical_block_size
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
|
model:
|
||||||
|
description: Model is model of disk
|
||||||
|
type: string
|
||||||
|
physicalBlockSize:
|
||||||
|
description: PhysicalBlockSize is the physical block size in bytes reported by /sys/class/block/sda/queue/physical_block_size
|
||||||
|
format: int32
|
||||||
|
type: integer
|
||||||
|
serial:
|
||||||
|
description: Serial is serial number of disk
|
||||||
|
type: string
|
||||||
|
vendor:
|
||||||
|
description: Vendor is vendor of disk
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
devlinks:
|
||||||
|
description: DevLinks contains soft links of a block device like /dev/by-id/... /dev/by-uuid/...
|
||||||
|
items:
|
||||||
|
description: DeviceDevLink holds the mapping between type and links like by-id type or by-path type link
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind is the type of link like by-id or by-path.
|
||||||
|
enum:
|
||||||
|
- by-id
|
||||||
|
- by-path
|
||||||
|
type: string
|
||||||
|
links:
|
||||||
|
description: Links are the soft links
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
filesystem:
|
||||||
|
description: FileSystem contains mountpoint and filesystem type
|
||||||
|
properties:
|
||||||
|
fsType:
|
||||||
|
description: Type represents the FileSystem type of the block device
|
||||||
|
type: string
|
||||||
|
mountPoint:
|
||||||
|
description: MountPoint represents the mountpoint of the block device.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
nodeAttributes:
|
||||||
|
description: NodeAttributes has the details of the node on which BD is attached
|
||||||
|
properties:
|
||||||
|
nodeName:
|
||||||
|
description: NodeName is the name of the Kubernetes node resource on which the device is attached
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
parentDevice:
|
||||||
|
description: "ParentDevice was intended to store the UUID of the parent Block Device as is the case for partitioned block devices. \n For example: /dev/sda is the parent for /dev/sda1 To be deprecated"
|
||||||
|
type: string
|
||||||
|
partitioned:
|
||||||
|
description: Partitioned represents if BlockDevice has partitions or not (Yes/No) Currently always default to No. To be deprecated
|
||||||
|
enum:
|
||||||
|
- "Yes"
|
||||||
|
- "No"
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path contain devpath (e.g. /dev/sdb)
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- capacity
|
||||||
|
- devlinks
|
||||||
|
- nodeAttributes
|
||||||
|
- path
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: DeviceStatus defines the observed state of BlockDevice
|
||||||
|
properties:
|
||||||
|
claimState:
|
||||||
|
description: ClaimState represents the claim state of the block device
|
||||||
|
enum:
|
||||||
|
- Claimed
|
||||||
|
- Unclaimed
|
||||||
|
- Released
|
||||||
|
type: string
|
||||||
|
state:
|
||||||
|
description: State is the current state of the blockdevice (Active/Inactive/Unknown)
|
||||||
|
enum:
|
||||||
|
- Active
|
||||||
|
- Inactive
|
||||||
|
- Unknown
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- claimState
|
||||||
|
- state
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources: {}
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: []
|
||||||
|
storedVersions: []
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.5.0
|
||||||
|
creationTimestamp: null
|
||||||
|
name: blockdeviceclaims.openebs.io
|
||||||
|
spec:
|
||||||
|
group: openebs.io
|
||||||
|
names:
|
||||||
|
kind: BlockDeviceClaim
|
||||||
|
listKind: BlockDeviceClaimList
|
||||||
|
plural: blockdeviceclaims
|
||||||
|
shortNames:
|
||||||
|
- bdc
|
||||||
|
singular: blockdeviceclaim
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .spec.blockDeviceName
|
||||||
|
name: BlockDeviceName
|
||||||
|
type: string
|
||||||
|
- jsonPath: .status.phase
|
||||||
|
name: Phase
|
||||||
|
type: string
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: BlockDeviceClaim is the Schema for the blockdeviceclaims API
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: DeviceClaimSpec defines the request details for a BlockDevice
|
||||||
|
properties:
|
||||||
|
blockDeviceName:
|
||||||
|
description: BlockDeviceName is the reference to the block-device backing this claim
|
||||||
|
type: string
|
||||||
|
blockDeviceNodeAttributes:
|
||||||
|
description: BlockDeviceNodeAttributes is the attributes on the node from which a BD should be selected for this claim. It can include nodename, failure domain etc.
|
||||||
|
properties:
|
||||||
|
hostName:
|
||||||
|
description: HostName represents the hostname of the Kubernetes node resource where the BD should be present
|
||||||
|
type: string
|
||||||
|
nodeName:
|
||||||
|
description: NodeName represents the name of the Kubernetes node resource where the BD should be present
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
deviceClaimDetails:
|
||||||
|
description: Details of the device to be claimed
|
||||||
|
properties:
|
||||||
|
allowPartition:
|
||||||
|
description: AllowPartition represents whether to claim a full block device or a device that is a partition
|
||||||
|
type: boolean
|
||||||
|
blockVolumeMode:
|
||||||
|
description: 'BlockVolumeMode represents whether to claim a device in Block mode or Filesystem mode. These are use cases of BlockVolumeMode: 1) Not specified: VolumeMode check will not be effective 2) VolumeModeBlock: BD should not have any filesystem or mountpoint 3) VolumeModeFileSystem: BD should have a filesystem and mountpoint. If DeviceFormat is specified then the format should match with the FSType in BD'
|
||||||
|
type: string
|
||||||
|
formatType:
|
||||||
|
description: Format of the device required, eg:ext4, xfs
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
deviceType:
|
||||||
|
description: DeviceType represents the type of drive like SSD, HDD etc.,
|
||||||
|
nullable: true
|
||||||
|
type: string
|
||||||
|
hostName:
|
||||||
|
description: Node name from where blockdevice has to be claimed. To be deprecated. Use NodeAttributes.HostName instead
|
||||||
|
type: string
|
||||||
|
resources:
|
||||||
|
description: Resources will help with placing claims on Capacity, IOPS
|
||||||
|
properties:
|
||||||
|
requests:
|
||||||
|
additionalProperties:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
description: 'Requests describes the minimum resources required. eg: if storage resource of 10G is requested minimum capacity of 10G should be available TODO for validating'
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- requests
|
||||||
|
type: object
|
||||||
|
selector:
|
||||||
|
description: Selector is used to find block devices to be considered for claiming
|
||||||
|
properties:
|
||||||
|
matchExpressions:
|
||||||
|
description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
|
||||||
|
items:
|
||||||
|
description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
|
||||||
|
properties:
|
||||||
|
key:
|
||||||
|
description: key is the label key that the selector applies to.
|
||||||
|
type: string
|
||||||
|
operator:
|
||||||
|
description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
|
||||||
|
type: string
|
||||||
|
values:
|
||||||
|
description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- key
|
||||||
|
- operator
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
matchLabels:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: DeviceClaimStatus defines the observed state of BlockDeviceClaim
|
||||||
|
properties:
|
||||||
|
phase:
|
||||||
|
description: Phase represents the current phase of the claim
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- phase
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources: {}
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: []
|
||||||
|
storedVersions: []
|
||||||
|
---
|
||||||
|
# This is the node-disk-manager related config.
|
||||||
|
# It can be used to customize the disks probes and filters
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: openebs-ndm-config
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
openebs.io/component-name: ndm-config
|
||||||
|
data:
|
||||||
|
# udev-probe is default or primary probe it should be enabled to run ndm
|
||||||
|
# filterconfigs contains configs of filters. To provide a group of include
|
||||||
|
# and exclude values add it as , separated string
|
||||||
|
node-disk-manager.config: |
|
||||||
|
probeconfigs:
|
||||||
|
- key: udev-probe
|
||||||
|
name: udev probe
|
||||||
|
state: true
|
||||||
|
- key: seachest-probe
|
||||||
|
name: seachest probe
|
||||||
|
state: false
|
||||||
|
- key: smart-probe
|
||||||
|
name: smart probe
|
||||||
|
state: true
|
||||||
|
filterconfigs:
|
||||||
|
- key: os-disk-exclude-filter
|
||||||
|
name: os disk exclude filter
|
||||||
|
state: true
|
||||||
|
exclude: "/,/etc/hosts,/boot"
|
||||||
|
- key: vendor-filter
|
||||||
|
name: vendor filter
|
||||||
|
state: true
|
||||||
|
include: ""
|
||||||
|
exclude: "CLOUDBYT,OpenEBS"
|
||||||
|
- key: path-filter
|
||||||
|
name: path filter
|
||||||
|
state: true
|
||||||
|
include: ""
|
||||||
|
exclude: "/dev/loop,/dev/fd0,/dev/sr0,/dev/ram,/dev/md,/dev/dm-,/dev/rbd,/dev/zd"
|
||||||
|
# metconfig can be used to decorate the block device with different types of labels
|
||||||
|
# that are available on the node or come in a device properties.
|
||||||
|
# node labels - the node where bd is discovered. A whitlisted label prefixes
|
||||||
|
# attribute labels - a property of the BD can be added as a ndm label as ndm.io/<property>=<property-value>
|
||||||
|
metaconfigs:
|
||||||
|
- key: node-labels
|
||||||
|
name: node labels
|
||||||
|
pattern: ""
|
||||||
|
- key: device-labels
|
||||||
|
name: device labels
|
||||||
|
type: ""
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: openebs-ndm
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm
|
||||||
|
openebs.io/component-name: ndm
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: openebs-ndm
|
||||||
|
openebs.io/component-name: ndm
|
||||||
|
updateStrategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm
|
||||||
|
openebs.io/component-name: ndm
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
# By default the node-disk-manager will be run on all kubernetes nodes
|
||||||
|
# If you would like to limit this to only some nodes, say the nodes
|
||||||
|
# that have storage attached, you could label those node and use
|
||||||
|
# nodeSelector.
|
||||||
|
#
|
||||||
|
# e.g. label the storage nodes with - "openebs.io/nodegroup"="storage-node"
|
||||||
|
# kubectl label node <node-name> "openebs.io/nodegroup"="storage-node"
|
||||||
|
#nodeSelector:
|
||||||
|
# "openebs.io/nodegroup": "storage-node"
|
||||||
|
serviceAccountName: openebs-maya-operator
|
||||||
|
hostNetwork: true
|
||||||
|
# host PID is used to check status of iSCSI Service when the NDM
|
||||||
|
# API service is enabled
|
||||||
|
#hostPID: true
|
||||||
|
containers:
|
||||||
|
- name: node-disk-manager
|
||||||
|
image: openebs/node-disk-manager:2.1.0
|
||||||
|
args:
|
||||||
|
- -v=4
|
||||||
|
# The feature-gate is used to enable the new UUID algorithm.
|
||||||
|
- --feature-gates="GPTBasedUUID"
|
||||||
|
# Use partition table UUID instead of create single partition to get
|
||||||
|
# partition UUID. Require `GPTBasedUUID` to be enabled with.
|
||||||
|
# - --feature-gates="PartitionTableUUID"
|
||||||
|
# Detect changes to device size, filesystem and mount-points without restart.
|
||||||
|
# - --feature-gates="ChangeDetection"
|
||||||
|
# The feature gate is used to start the gRPC API service. The gRPC server
|
||||||
|
# starts at 9115 port by default. This feature is currently in Alpha state
|
||||||
|
# - --feature-gates="APIService"
|
||||||
|
# The feature gate is used to enable NDM, to create blockdevice resources
|
||||||
|
# for unused partitions on the OS disk
|
||||||
|
# - --feature-gates="UseOSDisk"
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: /host/node-disk-manager.config
|
||||||
|
subPath: node-disk-manager.config
|
||||||
|
readOnly: true
|
||||||
|
# make udev database available inside container
|
||||||
|
- name: udev
|
||||||
|
mountPath: /run/udev
|
||||||
|
- name: procmount
|
||||||
|
mountPath: /host/proc
|
||||||
|
readOnly: true
|
||||||
|
- name: devmount
|
||||||
|
mountPath: /dev
|
||||||
|
- name: basepath
|
||||||
|
mountPath: /var/openebs/ndm
|
||||||
|
- name: sparsepath
|
||||||
|
mountPath: /var/openebs/sparse
|
||||||
|
env:
|
||||||
|
# namespace in which NDM is installed will be passed to NDM Daemonset
|
||||||
|
# as environment variable
|
||||||
|
- name: NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
# pass hostname as env variable using downward API to the NDM container
|
||||||
|
- name: NODE_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: spec.nodeName
|
||||||
|
# specify the directory where the sparse files need to be created.
|
||||||
|
# if not specified, then sparse files will not be created.
|
||||||
|
- name: SPARSE_FILE_DIR
|
||||||
|
value: "/var/openebs/sparse"
|
||||||
|
# Size(bytes) of the sparse file to be created.
|
||||||
|
- name: SPARSE_FILE_SIZE
|
||||||
|
value: "10737418240"
|
||||||
|
# Specify the number of sparse files to be created
|
||||||
|
- name: SPARSE_FILE_COUNT
|
||||||
|
value: "0"
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- pgrep
|
||||||
|
- "ndm"
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 60
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: openebs-ndm-config
|
||||||
|
- name: udev
|
||||||
|
hostPath:
|
||||||
|
path: /run/udev
|
||||||
|
type: Directory
|
||||||
|
# mount /proc (to access mount file of process 1 of host) inside container
|
||||||
|
# to read mount-point of disks and partitions
|
||||||
|
- name: procmount
|
||||||
|
hostPath:
|
||||||
|
path: /proc
|
||||||
|
type: Directory
|
||||||
|
- name: devmount
|
||||||
|
# the /dev directory is mounted so that we have access to the devices that
|
||||||
|
# are connected at runtime of the pod.
|
||||||
|
hostPath:
|
||||||
|
path: /dev
|
||||||
|
type: Directory
|
||||||
|
- name: basepath
|
||||||
|
hostPath:
|
||||||
|
path: /var/openebs/ndm
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
- name: sparsepath
|
||||||
|
hostPath:
|
||||||
|
path: /var/openebs/sparse
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: openebs-ndm-operator
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-operator
|
||||||
|
openebs.io/component-name: ndm-operator
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: openebs-ndm-operator
|
||||||
|
openebs.io/component-name: ndm-operator
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-operator
|
||||||
|
openebs.io/component-name: ndm-operator
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
serviceAccountName: openebs-maya-operator
|
||||||
|
containers:
|
||||||
|
- name: node-disk-operator
|
||||||
|
image: openebs/node-disk-operator:2.1.0
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: WATCH_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
# the service account of the ndm-operator pod
|
||||||
|
- name: SERVICE_ACCOUNT
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: spec.serviceAccountName
|
||||||
|
- name: OPERATOR_NAME
|
||||||
|
value: "node-disk-operator"
|
||||||
|
- name: CLEANUP_JOB_IMAGE
|
||||||
|
value: "openebs/linux-utils:3.5.0"
|
||||||
|
# OPENEBS_IO_IMAGE_PULL_SECRETS environment variable is used to pass the image pull secrets
|
||||||
|
# to the cleanup pod launched by NDM operator
|
||||||
|
#- name: OPENEBS_IO_IMAGE_PULL_SECRETS
|
||||||
|
# value: ""
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /healthz
|
||||||
|
port: 8585
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
periodSeconds: 20
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /readyz
|
||||||
|
port: 8585
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
---
|
||||||
|
# Create NDM cluster exporter deployment.
|
||||||
|
# This is an optional component and is not required for the basic
|
||||||
|
# functioning of NDM
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: openebs-ndm-cluster-exporter
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-cluster-exporter
|
||||||
|
openebs.io/component-name: ndm-cluster-exporter
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: openebs-ndm-cluster-exporter
|
||||||
|
openebs.io/component-name: ndm-cluster-exporter
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-cluster-exporter
|
||||||
|
openebs.io/component-name: ndm-cluster-exporter
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
serviceAccountName: openebs-maya-operator
|
||||||
|
containers:
|
||||||
|
- name: ndm-cluster-exporter
|
||||||
|
image: openebs/node-disk-exporter:2.1.0
|
||||||
|
command:
|
||||||
|
- /usr/local/bin/exporter
|
||||||
|
args:
|
||||||
|
- "start"
|
||||||
|
- "--mode=cluster"
|
||||||
|
- "--port=$(METRICS_LISTEN_PORT)"
|
||||||
|
- "--metrics=/metrics"
|
||||||
|
ports:
|
||||||
|
- containerPort: 9100
|
||||||
|
protocol: TCP
|
||||||
|
name: metrics
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: METRICS_LISTEN_PORT
|
||||||
|
value: :9100
|
||||||
|
---
|
||||||
|
# Create NDM cluster exporter service
|
||||||
|
# This is optional and required only when
|
||||||
|
# ndm-cluster-exporter deployment is used
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: openebs-ndm-cluster-exporter-service
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-cluster-exporter-service
|
||||||
|
openebs.io/component-name: ndm-cluster-exporter
|
||||||
|
app: openebs-ndm-exporter
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
port: 9100
|
||||||
|
targetPort: 9100
|
||||||
|
selector:
|
||||||
|
name: openebs-ndm-cluster-exporter
|
||||||
|
---
|
||||||
|
# Create NDM node exporter daemonset.
|
||||||
|
# This is an optional component used for getting disk level
|
||||||
|
# metrics from each of the storage nodes
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: openebs-ndm-node-exporter
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-node-exporter
|
||||||
|
openebs.io/component-name: ndm-node-exporter
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
updateStrategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: openebs-ndm-node-exporter
|
||||||
|
openebs.io/component-name: ndm-node-exporter
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-node-exporter
|
||||||
|
openebs.io/component-name: ndm-node-exporter
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
serviceAccountName: openebs-maya-operator
|
||||||
|
containers:
|
||||||
|
- name: node-disk-exporter
|
||||||
|
image: openebs/node-disk-exporter:2.1.0
|
||||||
|
command:
|
||||||
|
- /usr/local/bin/exporter
|
||||||
|
args:
|
||||||
|
- "start"
|
||||||
|
- "--mode=node"
|
||||||
|
- "--port=$(METRICS_LISTEN_PORT)"
|
||||||
|
- "--metrics=/metrics"
|
||||||
|
ports:
|
||||||
|
- containerPort: 9101
|
||||||
|
protocol: TCP
|
||||||
|
name: metrics
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
env:
|
||||||
|
- name: NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: METRICS_LISTEN_PORT
|
||||||
|
value: :9101
|
||||||
|
---
|
||||||
|
# Create NDM node exporter service
|
||||||
|
# This is optional and required only when
|
||||||
|
# ndm-node-exporter daemonset is used
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: openebs-ndm-node-exporter-service
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
name: openebs-ndm-node-exporter
|
||||||
|
openebs.io/component: openebs-ndm-node-exporter
|
||||||
|
app: openebs-ndm-exporter
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
port: 9101
|
||||||
|
targetPort: 9101
|
||||||
|
selector:
|
||||||
|
name: openebs-ndm-node-exporter
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: openebs-localpv-provisioner
|
||||||
|
namespace: openebs
|
||||||
|
labels:
|
||||||
|
name: openebs-localpv-provisioner
|
||||||
|
openebs.io/component-name: openebs-localpv-provisioner
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: openebs-localpv-provisioner
|
||||||
|
openebs.io/component-name: openebs-localpv-provisioner
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: openebs-localpv-provisioner
|
||||||
|
openebs.io/component-name: openebs-localpv-provisioner
|
||||||
|
openebs.io/version: 3.5.0
|
||||||
|
spec:
|
||||||
|
serviceAccountName: openebs-maya-operator
|
||||||
|
containers:
|
||||||
|
- name: openebs-provisioner-hostpath
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
image: openebs/provisioner-localpv:3.5.0
|
||||||
|
args:
|
||||||
|
- "--bd-time-out=$(BDC_BD_BIND_RETRIES)"
|
||||||
|
env:
|
||||||
|
# OPENEBS_IO_K8S_MASTER enables openebs provisioner to connect to K8s
|
||||||
|
# based on this address. This is ignored if empty.
|
||||||
|
# This is supported for openebs provisioner version 0.5.2 onwards
|
||||||
|
#- name: OPENEBS_IO_K8S_MASTER
|
||||||
|
# value: "http://10.128.0.12:8080"
|
||||||
|
# OPENEBS_IO_KUBE_CONFIG enables openebs provisioner to connect to K8s
|
||||||
|
# based on this config. This is ignored if empty.
|
||||||
|
# This is supported for openebs provisioner version 0.5.2 onwards
|
||||||
|
#- name: OPENEBS_IO_KUBE_CONFIG
|
||||||
|
# value: "/home/ubuntu/.kube/config"
|
||||||
|
# This sets the number of times the provisioner should try
|
||||||
|
# with a polling interval of 5 seconds, to get the Blockdevice
|
||||||
|
# Name from a BlockDeviceClaim, before the BlockDeviceClaim
|
||||||
|
# is deleted. E.g. 12 * 5 seconds = 60 seconds timeout
|
||||||
|
- name: BDC_BD_BIND_RETRIES
|
||||||
|
value: "12"
|
||||||
|
- name: NODE_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: spec.nodeName
|
||||||
|
- name: OPENEBS_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
# OPENEBS_SERVICE_ACCOUNT provides the service account of this pod as
|
||||||
|
# environment variable
|
||||||
|
- name: OPENEBS_SERVICE_ACCOUNT
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: spec.serviceAccountName
|
||||||
|
- name: OPENEBS_IO_ENABLE_ANALYTICS
|
||||||
|
value: "true"
|
||||||
|
- name: OPENEBS_IO_INSTALLER_TYPE
|
||||||
|
value: "openebs-operator-lite"
|
||||||
|
- name: OPENEBS_IO_HELPER_IMAGE
|
||||||
|
value: "openebs/linux-utils:3.5.0"
|
||||||
|
- name: OPENEBS_IO_BASE_PATH
|
||||||
|
value: "/var/openebs/local"
|
||||||
|
# LEADER_ELECTION_ENABLED is used to enable/disable leader election. By default
|
||||||
|
# leader election is enabled.
|
||||||
|
#- name: LEADER_ELECTION_ENABLED
|
||||||
|
# value: "true"
|
||||||
|
# OPENEBS_IO_IMAGE_PULL_SECRETS environment variable is used to pass the image pull secrets
|
||||||
|
# to the helper pod launched by local-pv hostpath provisioner
|
||||||
|
#- name: OPENEBS_IO_IMAGE_PULL_SECRETS
|
||||||
|
# value: ""
|
||||||
|
# Process name used for matching is limited to the 15 characters
|
||||||
|
# present in the pgrep output.
|
||||||
|
# So fullname can't be used here with pgrep (>15 chars).A regular expression
|
||||||
|
# that matches the entire command name has to specified.
|
||||||
|
# Anchor `^` : matches any string that starts with `provisioner-loc`
|
||||||
|
# `.*`: matches any string that has `provisioner-loc` followed by zero or more char
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- test `pgrep -c "^provisioner-loc.*"` = 1
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 60
|
||||||
|
---
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: storage.k8s.io/v1
|
||||||
|
kind: StorageClass
|
||||||
|
metadata:
|
||||||
|
name: openebs-hostpath-xfs
|
||||||
|
annotations:
|
||||||
|
openebs.io/cas-type: local
|
||||||
|
cas.openebs.io/config: |
|
||||||
|
- name: StorageType
|
||||||
|
value: "hostpath"
|
||||||
|
- name: BasePath
|
||||||
|
value: "/var/openebs/local/"
|
||||||
|
- name: XFSQuota
|
||||||
|
enabled: "true"
|
||||||
|
provisioner: openebs.io/local
|
||||||
|
volumeBindingMode: WaitForFirstConsumer
|
||||||
|
reclaimPolicy: Delete
|
||||||
@@ -15,7 +15,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: mongoexpress
|
- name: mongoexpress
|
||||||
image: mongo-express
|
image: mirror.gcr.io/library/mongo-express
|
||||||
ports:
|
ports:
|
||||||
- name: mongoexpress
|
- name: mongoexpress
|
||||||
containerPort: 8081
|
containerPort: 8081
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
---
|
||||||
|
apiVersion: codemowers.cloud/v1beta1
|
||||||
|
kind: OIDCMiddlewareClient
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
spec:
|
||||||
|
displayName: rotmower
|
||||||
|
uri: 'https://rotmower.k-space.ee'
|
||||||
|
headerMapping:
|
||||||
|
email: Remote-Email
|
||||||
|
groups: Remote-Groups
|
||||||
|
name: Remote-Name
|
||||||
|
user: Remote-Username
|
||||||
|
allowedGroups:
|
||||||
|
- k-space:kubernetes:admins
|
||||||
|
- github.com:codemowers:admins
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
external-dns.alpha.kubernetes.io/target: traefik.k-space.ee
|
||||||
|
traefik.ingress.kubernetes.io/router.middlewares: rotmower-rotmower@kubernetescrd
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: rotmower.k-space.ee
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: rotmower
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- "*.k-space.ee"
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: rotmower
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8080
|
||||||
|
targetPort: 8080
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
namespace: rotmower
|
||||||
|
labels:
|
||||||
|
app: rotmower
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: rotmower
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: rotmower
|
||||||
|
spec:
|
||||||
|
serviceAccountName: rotmower
|
||||||
|
containers:
|
||||||
|
- name: rotmower
|
||||||
|
image: docker.io/codemowers/rotmower:latest
|
||||||
|
args:
|
||||||
|
- web
|
||||||
|
- --host
|
||||||
|
- 0.0.0.0
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
name: http
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "128Mi"
|
||||||
|
cpu: "100m"
|
||||||
|
limits:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "500m"
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
namespace: rotmower
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["pods", "secrets"]
|
||||||
|
verbs: ["get", "list"]
|
||||||
|
- apiGroups: ["apps"]
|
||||||
|
resources: ["deployments", "replicasets", "daemonsets", "statefulsets"]
|
||||||
|
verbs: ["get", "list"]
|
||||||
|
- apiGroups: ["batch"]
|
||||||
|
resources: ["jobs", "cronjobs"]
|
||||||
|
verbs: ["get", "list"]
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: rotmower
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: rotmower
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: rotmower
|
||||||
|
namespace: rotmower
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
apiVersion: codemowers.io/v1alpha1
|
apiVersion: codemowers.cloud/v1beta1
|
||||||
kind: OIDCGWClient
|
kind: OIDCClient
|
||||||
metadata:
|
metadata:
|
||||||
name: whoami-oidc
|
name: whoami-oidc
|
||||||
|
namespace: whoami-oidc
|
||||||
spec:
|
spec:
|
||||||
displayName: Whoami (oidc-tester-app)
|
displayName: Whoami OIDC
|
||||||
uri: https://whoami-oidc.k-space.ee
|
uri: https://whoami-oidc.k-space.ee
|
||||||
redirectUris:
|
redirectUris:
|
||||||
- https://whoami-oidc.k-space.ee/auth/callback
|
- https://whoami-oidc.k-space.ee/auth/callback
|
||||||
@@ -16,7 +17,6 @@ spec:
|
|||||||
availableScopes:
|
availableScopes:
|
||||||
- openid
|
- openid
|
||||||
- profile
|
- profile
|
||||||
tokenEndpointAuthMethod: client_secret_post
|
|
||||||
pkce: false
|
pkce: false
|
||||||
---
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
- name: Setup primary nameserver
|
|
||||||
hosts: ns1.k-space.ee
|
|
||||||
tasks:
|
|
||||||
- name: Make sure bind9 is installed
|
|
||||||
ansible.builtin.apt:
|
|
||||||
name: bind9
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Configure Bind
|
|
||||||
register: bind
|
|
||||||
copy:
|
|
||||||
dest: /etc/bind/named.conf
|
|
||||||
content: |
|
|
||||||
# This file is managed by Ansible
|
|
||||||
# https://git.k-space.ee/k-space/kube/src/branch/master/ansible-bind-primary.yml
|
|
||||||
# Do NOT modify manually
|
|
||||||
|
|
||||||
include "/etc/bind/named.conf.local";
|
|
||||||
include "/etc/bind/readwrite.key";
|
|
||||||
include "/etc/bind/readonly.key";
|
|
||||||
|
|
||||||
options {
|
|
||||||
directory "/var/cache/bind";
|
|
||||||
version "";
|
|
||||||
listen-on { any; };
|
|
||||||
listen-on-v6 { any; };
|
|
||||||
pid-file "/var/run/named/named.pid";
|
|
||||||
notify explicit; also-notify { 172.20.53.1; 172.20.53.2; 172.20.53.3; };
|
|
||||||
allow-recursion { none; };
|
|
||||||
recursion no;
|
|
||||||
check-names master ignore;
|
|
||||||
dnssec-validation no;
|
|
||||||
auth-nxdomain no;
|
|
||||||
};
|
|
||||||
|
|
||||||
# https://kb.isc.org/docs/aa-00723
|
|
||||||
|
|
||||||
acl allowed {
|
|
||||||
172.20.3.0/24;
|
|
||||||
172.20.4.0/24;
|
|
||||||
};
|
|
||||||
|
|
||||||
acl rejected { !allowed; any; };
|
|
||||||
|
|
||||||
zone "." {
|
|
||||||
type hint;
|
|
||||||
file "/var/lib/bind/db.root";
|
|
||||||
};
|
|
||||||
|
|
||||||
zone "k-space.ee" {
|
|
||||||
type master;
|
|
||||||
file "/var/lib/bind/db.k-space.ee";
|
|
||||||
allow-update { !rejected; key readwrite; };
|
|
||||||
allow-transfer { !rejected; key readonly; key readwrite; };
|
|
||||||
};
|
|
||||||
|
|
||||||
zone "k6.ee" {
|
|
||||||
type master;
|
|
||||||
file "/var/lib/bind/db.k6.ee";
|
|
||||||
allow-update { !rejected; key readwrite; };
|
|
||||||
allow-transfer { !rejected; key readonly; key readwrite; };
|
|
||||||
};
|
|
||||||
|
|
||||||
zone "kspace.ee" {
|
|
||||||
type master;
|
|
||||||
file "/var/lib/bind/db.kspace.ee";
|
|
||||||
allow-update { !rejected; key readwrite; };
|
|
||||||
allow-transfer { !rejected; key readonly; key readwrite; };
|
|
||||||
};
|
|
||||||
- name: Check Bind config
|
|
||||||
ansible.builtin.shell: "named-checkconf"
|
|
||||||
- name: Reload Bind config
|
|
||||||
service:
|
|
||||||
name: bind9
|
|
||||||
state: reloaded
|
|
||||||
when: bind.changed
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
# ansible doors -m shell -a "ctr image pull harbor.k-space.ee/k-space/mjpg-streamer:latest"
|
|
||||||
# journalctl -u mjpg_streamer@video0.service -f
|
|
||||||
- name: Setup doors
|
|
||||||
hosts: doors
|
|
||||||
tasks:
|
|
||||||
- name: Make sure containerd is installed
|
|
||||||
ansible.builtin.apt:
|
|
||||||
name: containerd
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Copy systemd service for Doorboy controller
|
|
||||||
copy:
|
|
||||||
dest: /etc/systemd/system/godoor.service
|
|
||||||
content: |
|
|
||||||
[Unit]
|
|
||||||
Description=Doorboy service
|
|
||||||
Documentation=https://git.k-space.ee/k-space/godoor
|
|
||||||
After=network.target
|
|
||||||
[Service]
|
|
||||||
Environment=IMAGE=harbor.k-space.ee/k-space/godoor:latest
|
|
||||||
ExecStartPre=-ctr task kill --signal=9 %N
|
|
||||||
ExecStartPre=-ctr task rm %N
|
|
||||||
ExecStartPre=-ctr c rm %N
|
|
||||||
ExecStartPre=-ctr image pull $IMAGE
|
|
||||||
ExecStart=ctr run --rm --pid-file=/run/%N.pid --privileged --read-only --env-file=/etc/godoor --env=KDOORPI_API_ALLOWED=https://doorboy-proxy.k-space.ee/allowed --env=KDOORPI_API_LONGPOLL=https://doorboy-proxy.k-space.ee/longpoll --env=KDOORPI_API_SWIPE=https://doorboy-proxy.k-space.ee/swipe --env=KDOORPI_DOOR=%H --net-host --net-host --cwd /app $IMAGE %N /godoor
|
|
||||||
ExecStopPost=ctr task rm %N
|
|
||||||
ExecStopPost=ctr c rm %N
|
|
||||||
Restart=always
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
- name: Enable Doorboy controller
|
|
||||||
ansible.builtin.systemd:
|
|
||||||
state: restarted
|
|
||||||
daemon_reload: yes
|
|
||||||
name: godoor.service
|
|
||||||
|
|
||||||
- name: Copy systemd service for mjpg-streamer
|
|
||||||
copy:
|
|
||||||
dest: /etc/systemd/system/mjpg_streamer@.service
|
|
||||||
content: |
|
|
||||||
[Unit]
|
|
||||||
Description=A server for streaming Motion-JPEG from a video capture device
|
|
||||||
After=network.target
|
|
||||||
ConditionPathExists=/dev/%I
|
|
||||||
[Service]
|
|
||||||
Environment=IMAGE=harbor.k-space.ee/k-space/mjpg-streamer:latest
|
|
||||||
StandardOutput=tty
|
|
||||||
Type=forking
|
|
||||||
ExecStartPre=-ctr task kill --signal=9 %p_%i
|
|
||||||
ExecStartPre=-ctr task rm %p_%i
|
|
||||||
ExecStartPre=-ctr c rm %p_%i
|
|
||||||
ExecStartPre=-ctr image pull $IMAGE
|
|
||||||
ExecStart=ctr run --tty -d --rm --pid-file=/run/%i.pid --privileged --read-only --net-host $IMAGE %p_%i /usr/local/bin/mjpg_streamer -i 'input_uvc.so -d /dev/%I -r 1280x720 -f 10' -o 'output_http.so -w /usr/share/mjpg_streamer/www'
|
|
||||||
ExecStopPost=ctr task rm %p_%i
|
|
||||||
ExecStopPost=ctr c rm %p_%i
|
|
||||||
PIDFile=/run/%i.pid
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
- name: Enable mjpg-streamer
|
|
||||||
ansible.builtin.systemd:
|
|
||||||
state: restarted
|
|
||||||
daemon_reload: yes
|
|
||||||
name: mjpg_streamer@video0.service
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Reconfigure graceful shutdown for kubelet
|
|
||||||
hosts: kubernetes
|
|
||||||
tasks:
|
|
||||||
- name: Reconfigure shutdownGracePeriod
|
|
||||||
ansible.builtin.lineinfile:
|
|
||||||
path: /var/lib/kubelet/config.yaml
|
|
||||||
regexp: '^shutdownGracePeriod:'
|
|
||||||
line: 'shutdownGracePeriod: 5m'
|
|
||||||
- name: Reconfigure shutdownGracePeriodCriticalPods
|
|
||||||
ansible.builtin.lineinfile:
|
|
||||||
path: /var/lib/kubelet/config.yaml
|
|
||||||
regexp: '^shutdownGracePeriodCriticalPods:'
|
|
||||||
line: 'shutdownGracePeriodCriticalPods: 5m'
|
|
||||||
- name: Work around unattended-upgrades
|
|
||||||
ansible.builtin.lineinfile:
|
|
||||||
path: /lib/systemd/logind.conf.d/unattended-upgrades-logind-maxdelay.conf
|
|
||||||
regexp: '^InhibitDelayMaxSec='
|
|
||||||
line: 'InhibitDelayMaxSec=5m0s'
|
|
||||||
|
|
||||||
- name: Pin kube components
|
|
||||||
hosts: kubernetes
|
|
||||||
tasks:
|
|
||||||
- name: Pin packages
|
|
||||||
loop:
|
|
||||||
- kubeadm
|
|
||||||
- kubectl
|
|
||||||
- kubelet
|
|
||||||
ansible.builtin.copy:
|
|
||||||
dest: "/etc/apt/preferences.d/{{ item }}"
|
|
||||||
content: |
|
|
||||||
Package: {{ item }}
|
|
||||||
Pin: version 1.26.*
|
|
||||||
Pin-Priority: 1001
|
|
||||||
|
|
||||||
- name: Reset /etc/containers/registries.conf
|
|
||||||
hosts: kubernetes
|
|
||||||
tasks:
|
|
||||||
- name: Copy /etc/containers/registries.conf
|
|
||||||
ansible.builtin.copy:
|
|
||||||
content: "unqualified-search-registries = [\"docker.io\"]\n"
|
|
||||||
dest: /etc/containers/registries.conf
|
|
||||||
register: registries
|
|
||||||
- name: Restart CRI-O
|
|
||||||
service:
|
|
||||||
name: cri-o
|
|
||||||
state: restarted
|
|
||||||
when: registries.changed
|
|
||||||
|
|
||||||
- name: Reset /etc/modules
|
|
||||||
hosts: kubernetes
|
|
||||||
tasks:
|
|
||||||
- name: Copy /etc/modules
|
|
||||||
ansible.builtin.copy:
|
|
||||||
content: |
|
|
||||||
overlay
|
|
||||||
br_netfilter
|
|
||||||
dest: /etc/modules
|
|
||||||
register: kernel_modules
|
|
||||||
- name: Load kernel modules
|
|
||||||
ansible.builtin.shell: "cat /etc/modules | xargs -L 1 -t modprobe"
|
|
||||||
when: kernel_modules.changed
|
|
||||||
|
|
||||||
- name: Reset /etc/sysctl.d/99-k8s.conf
|
|
||||||
hosts: kubernetes
|
|
||||||
tasks:
|
|
||||||
- name: Copy /etc/sysctl.d/99-k8s.conf
|
|
||||||
ansible.builtin.copy:
|
|
||||||
content: |
|
|
||||||
net.ipv4.conf.all.accept_redirects = 0
|
|
||||||
net.bridge.bridge-nf-call-iptables = 1
|
|
||||||
net.ipv4.ip_forward = 1
|
|
||||||
net.bridge.bridge-nf-call-ip6tables = 1
|
|
||||||
vm.max_map_count = 524288
|
|
||||||
fs.inotify.max_user_instances = 1280
|
|
||||||
fs.inotify.max_user_watches = 655360
|
|
||||||
dest: /etc/sysctl.d/99-k8s.conf
|
|
||||||
register: sysctl
|
|
||||||
- name: Reload sysctl config
|
|
||||||
ansible.builtin.shell: "sysctl --system"
|
|
||||||
when: sysctl.changed
|
|
||||||
-12
@@ -1,12 +0,0 @@
|
|||||||
[defaults]
|
|
||||||
ansible_managed = This file is managed by Ansible, manual changes will be overwritten.
|
|
||||||
inventory = inventory.yml
|
|
||||||
nocows = 1
|
|
||||||
pipelining = True
|
|
||||||
pattern =
|
|
||||||
deprecation_warnings = False
|
|
||||||
fact_caching = jsonfile
|
|
||||||
fact_caching_connection = ~/.ansible/k-space-fact-cache
|
|
||||||
|
|
||||||
[ssh_connection]
|
|
||||||
ssh_args = -F ssh_config
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
argocd/appications/argocd-image-updater.yaml
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
argocd.yml
|
|
||||||
repo-credentials.yml
|
|
||||||
id_*
|
|
||||||
ssh_known_hosts
|
|
||||||
+27
-56
@@ -1,63 +1,11 @@
|
|||||||
# Workflow
|
|
||||||
|
|
||||||
Most applications in our Kubernetes cluster are managed by ArgoCD.
|
Most applications in our Kubernetes cluster are managed by ArgoCD.
|
||||||
Most notably operators are NOT managed by ArgoCD.
|
Most notably operators are NOT managed by ArgoCD.
|
||||||
|
|
||||||
Adding to `applications/`: `kubectl apply -f newapp.yaml`
|
## Managing applications
|
||||||
|
Update apps (see TODO below):
|
||||||
# Deployment
|
|
||||||
|
|
||||||
To deploy ArgoCD:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
helm repo add argo-cd https://argoproj.github.io/argo-helm
|
|
||||||
kubectl create secret -n argocd generic argocd-secret # Initialize empty secret for sessions
|
|
||||||
helm template -n argocd --release-name k6 argo-cd/argo-cd --include-crds -f values.yaml > argocd.yml
|
|
||||||
kubectl apply -f argocd.yml -f application-extras.yml -n argocd
|
|
||||||
kubectl -n argocd rollout restart deployment/k6-argocd-redis
|
|
||||||
kubectl -n argocd rollout restart deployment/k6-argocd-repo-server
|
|
||||||
kubectl -n argocd rollout restart deployment/k6-argocd-server
|
|
||||||
kubectl -n argocd rollout restart deployment/k6-argocd-notifications-controller
|
|
||||||
kubectl -n argocd rollout restart statefulset/k6-argocd-application-controller
|
|
||||||
kubectl label -n argocd secret oidc-client-argocd-owner-secrets app.kubernetes.io/part-of=argocd
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
# Setting up Git secrets
|
|
||||||
|
|
||||||
Generate SSH key to access Gitea:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
ssh-keygen -t ecdsa -f id_ecdsa -C argocd.k-space.ee -P ''
|
for j in asterisk bind camtiler etherpad freescout gitea grafana hackerspace nextcloud nyancat rosdump traefik wiki wildduck; do
|
||||||
kubectl -n argocd create secret generic gitea-kube \
|
|
||||||
--from-literal=type=git \
|
|
||||||
--from-literal=url=git@git.k-space.ee:k-space/kube \
|
|
||||||
--from-file=sshPrivateKey=id_ecdsa
|
|
||||||
kubectl -n argocd create secret generic gitea-kube-staging \
|
|
||||||
--from-literal=type=git \
|
|
||||||
--from-literal=url=git@git.k-space.ee:k-space/kube-staging \
|
|
||||||
--from-file=sshPrivateKey=id_ecdsa
|
|
||||||
kubectl -n argocd create secret generic gitea-kube-members \
|
|
||||||
--from-literal=type=git \
|
|
||||||
--from-literal=url=git@git.k-space.ee:k-space/kube-members \
|
|
||||||
--from-file=sshPrivateKey=id_ecdsa
|
|
||||||
kubectl label -n argocd secret gitea-kube argocd.argoproj.io/secret-type=repository
|
|
||||||
kubectl label -n argocd secret gitea-kube-staging argocd.argoproj.io/secret-type=repository
|
|
||||||
kubectl label -n argocd secret gitea-kube-members argocd.argoproj.io/secret-type=repository
|
|
||||||
rm -fv id_ecdsa
|
|
||||||
```
|
|
||||||
|
|
||||||
Have Gitea admin reset password for user `argocd` and log in with that account.
|
|
||||||
Add the SSH key for user `argocd` from file `id_ecdsa.pub`.
|
|
||||||
Delete any other SSH keys associated with Gitea user `argocd`.
|
|
||||||
|
|
||||||
|
|
||||||
# Managing applications
|
|
||||||
|
|
||||||
To update apps:
|
|
||||||
|
|
||||||
```
|
|
||||||
for j in asterisk bind camtiler drone drone-execution etherpad freescout gitea grafana hackerspace nextcloud nyancat rosdump traefik wiki wildduck woodpecker; do
|
|
||||||
cat << EOF >> applications/$j.yaml
|
cat << EOF >> applications/$j.yaml
|
||||||
---
|
---
|
||||||
apiVersion: argoproj.io/v1alpha1
|
apiVersion: argoproj.io/v1alpha1
|
||||||
@@ -65,6 +13,10 @@ kind: Application
|
|||||||
metadata:
|
metadata:
|
||||||
name: $j
|
name: $j
|
||||||
namespace: argocd
|
namespace: argocd
|
||||||
|
annotations:
|
||||||
|
# Works with only Kustomize and Helm. Kustomize is easy, see https://github.com/argoproj-labs/argocd-image-updater/tree/master/manifests/base for an example.
|
||||||
|
argocd-image-updater.argoproj.io/image-list: TODO:^2 # semver 2.*.*
|
||||||
|
argocd-image-updater.argoproj.io/write-back-method: git
|
||||||
spec:
|
spec:
|
||||||
project: k-space.ee
|
project: k-space.ee
|
||||||
source:
|
source:
|
||||||
@@ -74,8 +26,27 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: $j
|
namespace: $j
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
EOF
|
EOF
|
||||||
done
|
done
|
||||||
find applications -name "*.yaml" -exec kubectl apply -n argocd -f {} \;
|
find applications -name "*.yaml" -exec kubectl apply -n argocd -f {} \;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Cold start
|
||||||
|
Normally ArgoCD deploys itself. Deploy ArgoCD out-of-bounds:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kustomize build . --enable-helm | kubectl apply -f -
|
||||||
|
```
|
||||||
|
|
||||||
|
ArgoCD dependencies:
|
||||||
|
- dragonfly (database)
|
||||||
|
- passmower (auth)
|
||||||
|
- traefik
|
||||||
|
- #TODO: network...
|
||||||
|
- gitea
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: AppProject
|
||||||
|
metadata:
|
||||||
|
namespace: argocd
|
||||||
|
name: k-space.ee
|
||||||
|
spec:
|
||||||
|
clusterResourceWhitelist:
|
||||||
|
- group: '*'
|
||||||
|
kind: '*'
|
||||||
|
destinations:
|
||||||
|
- namespace: '*'
|
||||||
|
server: '*'
|
||||||
|
sourceRepos:
|
||||||
|
- '*'
|
||||||
|
orphanedResources:
|
||||||
|
warn: true
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: argocd-applications
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: argocd/applications
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: argocd
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: false
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: argocd-image-updater
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'https://github.com/argoproj-labs/argocd-image-updater.git'
|
||||||
|
path: config/default
|
||||||
|
targetRevision: stable
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: argocd
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: argocd
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: argocd
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: argocd
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: bind
|
namespace: bind
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: cert-manager
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
# also depends on git@git.k-space.ee:secretspace/kube.git
|
||||||
|
repoURL: git@git.k-space.ee:k-space/kube.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: cert-manager
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: cert-manager
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# See [/dragonfly/README.md](/dragonfly-operator-system/README.md)
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: dragonfly # replaces redis and keydb
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: https://github.com/dragonflydb/dragonfly-operator
|
||||||
|
targetRevision: v1.1.11 # https://github.com/dragonflydb/dragonfly-operator/releases
|
||||||
|
path: manifests
|
||||||
|
directory:
|
||||||
|
include: 'dragonfly-operator.yaml'
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: dragonfly-operator-system
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: argoproj.io/v1alpha1
|
|
||||||
kind: Application
|
|
||||||
metadata:
|
|
||||||
name: drone
|
|
||||||
namespace: argocd
|
|
||||||
spec:
|
|
||||||
project: k-space.ee
|
|
||||||
source:
|
|
||||||
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
|
||||||
path: drone
|
|
||||||
targetRevision: HEAD
|
|
||||||
destination:
|
|
||||||
server: 'https://kubernetes.default.svc'
|
|
||||||
namespace: drone
|
|
||||||
syncPolicy: {}
|
|
||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: etherpad
|
namespace: etherpad
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: freescout
|
namespace: freescout
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: frigate
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
# also depends on git@git.k-space.ee:secretspace/kube.git
|
||||||
|
repoURL: git@git.k-space.ee:k-space/kube.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: frigate
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: frigate
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: garage
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
sources:
|
||||||
|
- repoURL: https://git.deuxfleurs.fr/Deuxfleurs/garage.git
|
||||||
|
targetRevision: main-v2
|
||||||
|
path: script/helm/garage
|
||||||
|
helm:
|
||||||
|
releaseName: garage
|
||||||
|
valueFiles:
|
||||||
|
- $values/garage/values.yaml
|
||||||
|
- repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
targetRevision: HEAD
|
||||||
|
ref: values
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: garage
|
||||||
|
ignoreDifferences:
|
||||||
|
- group: ""
|
||||||
|
kind: Secret
|
||||||
|
name: garage-rpc-secret
|
||||||
|
namespace: garage
|
||||||
|
jsonPointers:
|
||||||
|
- /data
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: gitea
|
namespace: gitea
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -7,10 +7,15 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
project: k-space.ee
|
project: k-space.ee
|
||||||
source:
|
source:
|
||||||
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
# also depends on git@git.k-space.ee:secretspace/kube.git
|
||||||
path: grafana
|
repoURL: git@git.k-space.ee:k-space/kube.git
|
||||||
targetRevision: HEAD
|
targetRevision: HEAD
|
||||||
|
path: grafana
|
||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: grafana
|
namespace: grafana
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: hackerspace
|
namespace: hackerspace
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: harbor-operator
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
# also depends on git@git.k-space.ee:secretspace/kube.git
|
||||||
|
repoURL: git@git.k-space.ee:k-space/kube.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: harbor-operator
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: harbor-operator
|
||||||
|
ignoreDifferences:
|
||||||
|
- group: ""
|
||||||
|
kind: Secret
|
||||||
|
namespace: harbor-operator
|
||||||
|
name: harbor-core
|
||||||
|
jsonPointers:
|
||||||
|
- /data
|
||||||
|
- group: ""
|
||||||
|
kind: Secret
|
||||||
|
namespace: harbor-operator
|
||||||
|
name: harbor-jobservice
|
||||||
|
jsonPointers:
|
||||||
|
- /data
|
||||||
|
- group: ""
|
||||||
|
kind: Secret
|
||||||
|
namespace: harbor-operator
|
||||||
|
name: harbor-registry
|
||||||
|
jsonPointers:
|
||||||
|
- /data
|
||||||
|
- group: ""
|
||||||
|
kind: Secret
|
||||||
|
namespace: harbor-operator
|
||||||
|
name: harbor-registry-htpasswd
|
||||||
|
jsonPointers:
|
||||||
|
- /data
|
||||||
|
- group: apps
|
||||||
|
kind: Deployment
|
||||||
|
namespace: harbor-operator
|
||||||
|
name: harbor-core
|
||||||
|
jsonPointers:
|
||||||
|
- /spec/template/metadata/annotations/checksum~1secret
|
||||||
|
- /spec/template/metadata/annotations/checksum~1secret-jobservice
|
||||||
|
- group: apps
|
||||||
|
kind: Deployment
|
||||||
|
namespace: harbor-operator
|
||||||
|
name: harbor-jobservice
|
||||||
|
jsonPointers:
|
||||||
|
- /spec/template/metadata/annotations/checksum~1secret
|
||||||
|
- /spec/template/metadata/annotations/checksum~1secret-core
|
||||||
|
- group: apps
|
||||||
|
kind: Deployment
|
||||||
|
namespace: harbor-operator
|
||||||
|
name: harbor-registry
|
||||||
|
jsonPointers:
|
||||||
|
- /spec/template/metadata/annotations/checksum~1secret
|
||||||
|
- /spec/template/metadata/annotations/checksum~1secret-core
|
||||||
|
- /spec/template/metadata/annotations/checksum~1secret-jobservice
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: kube-system
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: kube-system
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: kube-system
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: kubernetes-dashboard
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: kubernetes-dashboard
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: kubernetes-dashboard
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: metallb-system
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
# also depends on git@git.k-space.ee:secretspace/kube.git
|
||||||
|
repoURL: git@git.k-space.ee:k-space/kube.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: metallb-system
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: metallb-system
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: monitoring
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: monitoring
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: monitoring
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: nextcloud
|
namespace: nextcloud
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: nyancat
|
namespace: nyancat
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: members
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:secretspace/members.git'
|
||||||
|
path: members
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: passmower
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -2,16 +2,17 @@
|
|||||||
apiVersion: argoproj.io/v1alpha1
|
apiVersion: argoproj.io/v1alpha1
|
||||||
kind: Application
|
kind: Application
|
||||||
metadata:
|
metadata:
|
||||||
name: whoami-oidc
|
name: passmower
|
||||||
namespace: argocd
|
namespace: argocd
|
||||||
spec:
|
spec:
|
||||||
project: k-space.ee
|
project: k-space.ee
|
||||||
source:
|
source:
|
||||||
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
path: whoami-oidc
|
path: passmower
|
||||||
targetRevision: HEAD
|
targetRevision: HEAD
|
||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: whoami-oidc
|
namespace: passmower
|
||||||
syncPolicy:
|
syncPolicy:
|
||||||
automated: {}
|
automated:
|
||||||
|
prune: true
|
||||||
@@ -2,15 +2,19 @@
|
|||||||
apiVersion: argoproj.io/v1alpha1
|
apiVersion: argoproj.io/v1alpha1
|
||||||
kind: Application
|
kind: Application
|
||||||
metadata:
|
metadata:
|
||||||
name: asterisk
|
name: pgweb
|
||||||
namespace: argocd
|
namespace: argocd
|
||||||
spec:
|
spec:
|
||||||
project: k-space.ee
|
project: k-space.ee
|
||||||
source:
|
source:
|
||||||
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
path: asterisk
|
path: pgweb
|
||||||
targetRevision: HEAD
|
targetRevision: HEAD
|
||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: asterisk
|
namespace: pgweb
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Note: Do not put any Prometheus instances or exporters in this namespace, instead have them in `monitoring` namespace
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: prometheus-operator
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: https://github.com/prometheus-operator/prometheus-operator.git
|
||||||
|
targetRevision: v0.82.0
|
||||||
|
path: .
|
||||||
|
kustomize:
|
||||||
|
namespace: prometheus-operator
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: prometheus-operator
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ServerSideApply=true # Resource is too big to fit in 262144 bytes allowed annotation size.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: rabbitmq-system
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: rabbitmq-system
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: rabbitmq-system
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: ripe87
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: ripe87
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: ripe87
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: rook-ceph
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: rook-ceph
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: rook-ceph
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: rosdump
|
namespace: rosdump
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: secret-claim-operator
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: secret-claim-operator
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: secret-claim-operator
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -2,15 +2,19 @@
|
|||||||
apiVersion: argoproj.io/v1alpha1
|
apiVersion: argoproj.io/v1alpha1
|
||||||
kind: Application
|
kind: Application
|
||||||
metadata:
|
metadata:
|
||||||
name: camtiler
|
name: signs
|
||||||
namespace: argocd
|
namespace: argocd
|
||||||
spec:
|
spec:
|
||||||
project: k-space.ee
|
project: k-space.ee
|
||||||
source:
|
source:
|
||||||
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
path: camtiler
|
path: signs
|
||||||
targetRevision: HEAD
|
targetRevision: HEAD
|
||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: camtiler
|
namespace: signs
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: tigera-operator
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
# also depends on git@git.k-space.ee:secretspace/kube.git
|
||||||
|
repoURL: git@git.k-space.ee:k-space/kube.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: tigera-operator
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: tigera-operator
|
||||||
|
# also houses calico-system and calico-apiserver
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- ServerSideApply=true # Resource is too big to fit in 262144 bytes allowed annotation size.
|
||||||
|
- Force=true # `--force-conflicts`, according to https://docs.tigera.io/calico/latest/operations/upgrading/kubernetes-upgrade
|
||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: traefik
|
namespace: traefik
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -2,15 +2,19 @@
|
|||||||
apiVersion: argoproj.io/v1alpha1
|
apiVersion: argoproj.io/v1alpha1
|
||||||
kind: Application
|
kind: Application
|
||||||
metadata:
|
metadata:
|
||||||
name: drone-execution
|
name: unifi
|
||||||
namespace: argocd
|
namespace: argocd
|
||||||
spec:
|
spec:
|
||||||
project: k-space.ee
|
project: k-space.ee
|
||||||
source:
|
source:
|
||||||
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
path: drone-execution
|
path: unifi
|
||||||
targetRevision: HEAD
|
targetRevision: HEAD
|
||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: drone-execution
|
namespace: unifi
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: whoami
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: k-space.ee
|
||||||
|
source:
|
||||||
|
repoURL: 'git@git.k-space.ee:k-space/kube.git'
|
||||||
|
path: whoami
|
||||||
|
targetRevision: HEAD
|
||||||
|
destination:
|
||||||
|
server: 'https://kubernetes.default.svc'
|
||||||
|
namespace: whoami
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: wiki
|
namespace: wiki
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
@@ -13,4 +13,8 @@ spec:
|
|||||||
destination:
|
destination:
|
||||||
server: 'https://kubernetes.default.svc'
|
server: 'https://kubernetes.default.svc'
|
||||||
namespace: wildduck
|
namespace: wildduck
|
||||||
syncPolicy: {}
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user