[flant] init repo

This commit is contained in:
Мостовой Владимир Андреевич 2026-09-09 17:07:48 +03:00
commit 23d42e230d
11 changed files with 283 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
*.swp
.werf_secret_key
.idea

1
.helm/secret/dev/tls.crt Normal file
View File

@ -0,0 +1 @@
10003c2b3e27a9aebb32fafc08830e17acfc7aa3765f41078a6ebad9a82499835463d2d1f93f97afa4c18e892f074d1f73f32a55e174f85567ee707d5ef9136fabc514c5106c0f4cb9eb56d95c0fb25519cb4edf1f39068935020887442f43c1b2ec0b6d9efbd957070c4ea97d5e778a95309d8f9146b1aa3fca95e12b60a977711efc88da55ec823b03ce9194c30b8113f145a9dfaa2f43f9143771e32326e43ddd4c4d0dcd9d2128672b91a7fbafbb07b102ab3bae6065a4c8f18f15fe101341b0fb1532f03d344de45bea6a3962eec976d8fb0a5f9a1683124a3dd174e577a8f21afd3c6fc864d1bd3634d575e7641bf69f586585b401ae257806af19db74b22ce3b38d9d5042b4a246d89c78d18cc29d87109bcfb982e5b9a846abb2158e1d5dfcae1433e5d5ae83b1f7608899fd56e3e3e075fdbe959a0c81524b2593bd391fb69dcdb662e34e59cba0cb0b8f62411b1e79f93fc7c8eabc90db858455777f58cbd62d8d757f9ec87242f6f151871113f4de2e4a5b934d6ae544f16858e0c5b81ba0fdb730253229de4c1398cfe52df3672cbd423c21771e63fcdfd8a436de671316c11983d6724bac5c119d3187deef5ce0da45980b7e1ed2a9bb60f797aca1803440cb3231747e53ae0489e2700ec3b30468c40ac22d8331c46789828fc595a1ba3a846a69844587534d95083238918c983ed6a23163185cf91434a21958f3a1ecb560515af95f2cf614a19aa048feb6fca70a36f5f9b2db92f31425a0ae1afd358919191895959c48c7e59546a68cd415e8edb133ae0ab36a0725010d322b363792a153254948e215b74addf90b9241c6abe2b88eb39ca7e137f31870f9ff84ef0ccd97d16c75e3a15e104131d276d9bf4908ec41f4f147fd65a8a1c6edd98ef9aeba74d20e04420c688150c125cf938521388d69a961c1ca8c6f35a9a71f5d2c9c3a3569865b9b0f49acdd8e92f51888687c77b229240662b5c03a2f77dc490af39edf257d4bf835ae7a549224dc7b14ae5a185bd154bd69184fa455e99777d52d52e115d7adf3a9fd4acfd72888f6cfe10fcc069b1393db4e55321c9868a5bf0e3c138970cd5bda173e4a1d30b73f90798d86e87398033f2ee3e42197dd9f39e2332c0f1f204dd73d4c92ea15b38898ba12f81d71f241ced4ee46f9fa9722053d85574039c3a0dd50d5b84aa2827b755fe15780a8d223fc3f07db661a822340c76e90fe1f23e07b4f77995974db166598ab2c085f5206d5fc14879871ceea9ac48029e549520ee87f9ea236466c0b699a0492875fe63d23bcea6199024df2b7d8738ee6d7284941203618669df7a529ba44828e76b5ed4d3020889e1d84a77cef8f3b69661330353a622e961fa42d2e3164883780ea801c4ac6362fd5e7b4b9d013d249d4d6f3828f20fa8c2e359c80ab351dce5726cfbc95d68073094f64154fd778552397b5a1214addae2c2ceede2da95f614842ede12f4805a681a5220f7073e3d0c8428839d6e8dc7e63a67d64a71c007b0cb2dd7e9214901c0855f501479e2a40cc8ef75b8249546862321e4886a245c865066db4a36755c464c27557b4730a077437601a47bd630a85d679742abece5a77b961971d04fd784024b94ae0033faf078c3286fcdf9cd258b0d0be928bf40653bc5c6cc29c86070b0b43cbb7668818e8abf88ceb3f6994c6c27df3496e5cc4e8cfc9cff2bcb9932b161bdcfa2db1836136276663f6741df97a0046e650988c8fdae5adcb85932d3b48

1
.helm/secret/dev/tls.key Normal file
View File

@ -0,0 +1 @@
10001f8967dab73d5fb513463d90bd2fbb064c0af201a7fab3e28fb5576f36786e172561e0e977ef0b88e056739b3a3a6afb3ad5b8e45af1034000a04908110cf3e67bad9365245dd89b55c9c174abaf99b02c1f5030b07047128f4e17eaa85bca564e1b39c0c19761f7790b5cc18584b96d55c5231cff9341e705d5a8029b23fc250f114a518f82f2febb4c2952ed21da6fcd5335e3b1009a8b697ce670ddb51091f24806240c27fb2ef2452bf0eeaa14d8f1c9fee621fd2548235a87f6f598b6cc2370d7112b546b13ec59c016f478d3bcef3c5e51d3b979e55430ffc8e93b28795094f08434c60e65e2dc5be7f43e00a0d3ce23ae16d6fcedfec2ab7af5dd2060085042969ec52dc0d26cd47d64367117151c7205434e4ebb000c69ca5901b2bc06488003e8217dd42e25fd5d12549bd7147f4a8805251581e81dfa17e979ae8a01941697927882dfbcb4afbc67608c2063018625f29adaefcfeda48c485e81ce7d05b84f6b2daa48f868666299cae07bd1cf9b9b57452b576f24f4e100906fff1faef7d749ea5ef453b241815004ca661eeaad5dd21267c3b965956ce19fccd75ed62e846c5efa85ffb0098a9b66f0c6f28658f5f0a106e7249cfe8325399f6577ef9cfb2f2449f57e4889575e3ddf91f303407a0fe4d19bbeef599e440699b6a74a8e02f3a9eebddf7e8683a4104c2bd38d63ea4fce081a0ff0599c982fccc41b8e3fe79184644821e223e44d52ac318f256e75d2757e90ecc2ae8cb59fe7b4284c18c15bb8e921d565ce13df8709660600bf52cde05d5664c94aa958d190ce068591dd5acc9f241882b159eaa874ab59023c030fbb64dae94708b8cdac149f18bee697ccd03c897528b8a998fd2842535727239c7ad527e952d0b08eb56b37a4924623f5802b727055171f410dd0a0acee719d3f9b1a90a5be20247c5e6f5da539285d2e880b02a7e585dbffecef2592d550a77c5e976e718a39098a55722cee3948b51a430a19248666d769ee428172195ce5ce4041c9e9f1b07bd0987cc3a0d9162484d51187fcbfc9fcc4b7454a77d8b1a110a782bbc07212e957c6ea2717ddcc5dae406163ef552957c806d3c1f690ebe3bc6c89cb5913f5bce5bf511a03c7af917a810bfe63f2ac9edd78c4a476324d254c35e5404c241e1fd4ff06ddd1856c51aa9fe541c90e12be3aea86f55757e51159579763b800f9ac06f01eedcb508a05e6129151f23258704301c175c9be2c0e62c398af9d07d4d336dfa3d1127265e451139f917d884a90ac5062e43ea01b49420d53a8026dd91ec61916dcb78c68e90c277219f0be1fbe6bb27a31e2df29a25386668577ad4bb1f5078f03d3990aacd19f30c27368968f03ee198458b204b79898eabec1db30b52af015a55361cc08cbce6688fd41bc401a1dffdb70f53ea8fb4ba8c79f5de5b3a72deb3c2d34ec2a17d81a9a63d69ac04e88022a6d855b6154d706b32f92f6bd17cff6494652c1a9ef2317e3d1f5b3be1f3e932c9b72b40234a772b8eef8f1669c74188440b45238b175105e9f7bd2d5f412e1e8c39cb271c7d64a4d31c9776efd5f9ae58037d167c4a8aee3cc694a8c225ad772626ce4d70208b08c16203ebce4a2bb69e56e115c36f1de3cd7d8bda213300e12a98fa1998c3e5bcc6c7952f36549253ef0014b2f1c91551f3190b808f59ca28b769ab847eda651210b5093e1a668b48bc71c1fa437f91d6d2aa0f4467d6ec5a626fc8e1d9458eff4dc288eac1fca763e76c50a83757c0885a431e906e4119e23fc86de64d32c08f6cb72aa9b3b6be8d9cd91ec268d040ff6ceba86ffd53d7ac6f3121f0690765052266833cd638e3a2ec183a2ac0f1455001572cf373bedf4dfc8e15479b05e01a0170f34fe712aaf2d9fbdedca762a2a66af78601669d4a57bc348baff9bbf8849e1f7ed655b60adba3214eefddc520b767f451d7007d39368b5e4f54f90003215572028a8cef3f3cb07bc786525a6c0d659cdeafc09de9c23e4c31e861e56b370c1318e2c0d05f89987ac39e5a16e877a569217b10465c8b6d8d286449f6deaf4b0588fc0d151fbfecb6b7fa5637596a3b18f0ab1976763d75c68433bcab8f97bd761fadbe67178d642ffba611c45cfe072217f7a36a916f0e96651608d9bd354321b79537ebc47b885ce13c7b2de7277f0945ff4e39926c5efbbe5a27336999f139c7af7bf04b9848076cc3466d4acd5730ade74a8944913cc5c2901137e94aef6c68f1aec427db1cea0ebbdbe53c62f57667a2388f168247d1c7b2ff705755d953aae5457ac6448def6f5a7e7f02996f7e2b004db8d24a32b7509a2c9938e729209049c1ae2be1f34c1438392a2912906497af863eacf823fb653858f2063b40170f8c867e26dc910984fa5c4af5e2c5f716a9b6eaf41505eb5dce2c4d09158b308cbf4122361c7

View File

@ -0,0 +1 @@
100064d355baf9057fe43f35466a3d3c32084065a9c549073d8b79107d9b3097e2a8dedf242c516b2bc1c3d890c4c04e3f6e0bc8e8f0991cb39e8c4ee25a7dc3540bdd7fa96fba5bc3b064b24a54f34ddb750088e2e9046ef47e554ae4c4c4f5f84cd24c02433d3543f1bf881ed19aa3e380dce4f910f3a12e9c2d2317af126ad5bfb3618c47b27a8e33342c2122f8b31933273f90381c8346e82d8dbee095eaf285b8c3987c8c6d3876dcc67a5a68010297b6002d55fcb68770381c2a36d3306412d1bbdace0cb8f8d42b1ede5eec26c85bab7bf76fde6eae76cf85f4f8a221ba17e4d414b66ba82edede131309749ce592cb8f068a300a7fa558689ea1250121213b4116e3865278ba776e04c42ad7a3d04f1ff1541df599294c15a5b398d79f71604f1e870fa50d48293c420f19579dcf465343265a765451ac71d7e62e98b6fb6ded99f4dce6c5cc0f64b63a4bca098ef9970b828690493668538dafc931c0c54072a5ee42f94685fcf48f3727221fd515a8c3f26259de54a8c8af9f587d47e2d2544d5e7982c30f0959b2bde99927b961de2385e3a612f13ad2709d2887564b1be6ca0d6da21b43a485246d9a025010336dd43813f72a37b6e309f2c9911a22d6588da5c038055b98bf6172c90b07062f039970d2406aba4ef932f68858206e66e1cd22efccbc0fddb29a7ad2607001895dc6a96431dc860ce3fbccfa724a57489f35be9bf8cced488fa4c6f154963b81920447849df09d7da49bec8f122d54cd530b5cff055a189259f05786a3715c866ddffde4a5a67d3de5113a81ba7d52e64285dca2ce96347670fda582db3a0a4773920d8ed0af89b307644811809f603daa87364ab08a480f52c9a12524664674d3e9aaf72717ea7795fb2a474eaf2a801a676b21f0a07fe3256538344a9368fcbd99d72c71221d99b9f26bda5213b54e23dbf5cd7ad363c058c9626ccafc60399ab1ffa3cf9162343ef1ece647115f1e031c5acbd8579632a688cae34e00a3c58a4d69eca8ba0a64da1440951573b17f66cbf2cf03822e07d3d577b34c4b36cb3a5a06c32e1957a4a4e40864e494f07c259660f8590ffe27392b2f5ae4224d039074b592d15b7fa31a37d14d380b2ff09731703edceb018d642d9000e849e7be3f0c6782fb0daa45a6a70bbcbee63249719e4e46239652b227b527fcc4430f4321dd36af86ee45025dfc3cd7656655064c1a2d076a88a58d99d07582edbfb23c3d97e4c996d5f6274703a099c86e4fbf8fe0281e77ee779ae045c0988172dd62a22c5adba8a6af81241cf65ae3967e94f94dac08eb8ddfeb3eb0eebe3c782ffdd2e47628b3d7e48ccd91373770bcd91b16b7934fde9439ba96e80fb6e45f63e80c6a61501505f9569a2f1e5ae0dd590bdac6e07e91bfc00ac1f0338ae658a0e9d2170b04b965e9ef899e72b71083a4982f96a47f9ac23bd39b832a5ef11429f1a99e2f76c4c3b9ce165c50e3e768e853c270196e862b481c7fe4faac1593aa3eb22695b585a1ceefa073a00eb1a594b8aa550a9edb33cfd17bb24fa8d6a2ecdc1387e811acfb2a6cf33f2999b9e1ec589c5c22376acc8dd86fd811cd7b4fd948d32553fc03419450b8df18981a506ffdb465cd753e8840290eaea1b3d9d5137d500a6fb2f35af3b555a0b112394f3a94cc7a382975f34e5b86e4408119795402afc6a970e27add6caeb18558dbe6a74366d6c9895af3c812c34676122ddd3292f08abffaca15eec70edc1c15f9abd6

View File

@ -0,0 +1 @@
1000a75e480fd252f4a8d28601dc6c219d4502e3a9e824b4862dd4992166e08b83e870499aae71a10ef7df4cc0bde856668f34b2c104684881842dd1dac2be9a85d8a564c279dcbb54057559cf83537fd55aa3056b28364d4550c4120211b8dbb2c2a5dbb82518f5f900ca117a8de607ea79d136c2369281131e74e1ff1485b6c993747fd761f225438d3059b93980958165fa9096cb50757c447755328a30efcd646835e70f75357b6477d80747e01709d178ff724396d15cebc7ee383aa4cd2240208e314aad5a3d04c5d0a137651fe56953be029716acf63633ec3c3de57e0d91a907998425d253cbdedbec3f9d0205383687a152485fc836b27b58563a3d4c272bc967fed8cf8deeaf993c0a1a8f81cda5286aab894f9b2a37ecc8f9dda81b319ab0a5d046e05eebea63f2899e4f58083ad5acd2f3727fcee6a57d3ff66708500a35a049bde08f20abd23b3c72e60f55764694bfc3dfb36bdf1f91779fde345015ba44c082f91a9fc2637d85c9a3013a539c3ef498993e89d10a4ce62f439f7e843e352a41ccb921ddc87dc20e75234c64e9a6ee7be51983067e729d3ce4d970dbcd43b0a04b2d8f0d71d084428f7c546e452723412be132582073b0c6a78241f59056f7dcda114b571433aa597d61e8d8a7fa3b187c64bd8fb0b83fed34a0a6de0aa9b2a50fb552a0c27eb120fe1f2d9bf63033c271b27ad7fc4ecade0cb74a0a51035d78a65054c81b2ec3466c60236aa1706212e40cab6c6c28d8c57e16a1edc47a8600bca69ffd7064a280895bc747a327e18f7aab6558d3e1b56f93b8b6dd44e6d5c44bd4d7ffdaf18e4c4f6ea6d3be7835d002b5e6b990280d543e48e7a800b50a714f6eb6c39d93aacd294888f22e89a7f78acc3b5cc045b77b6e2092152dc082a9fd149ad08f869b338fbaa2e32ea99bb6fb3c8b1fb4d20308cbd8e475647273f969d7b863c6632d55412f4062e24f7a411660d9f261b36c7081662496ea663e527731450f58a7d497a982d469cab5a9f325a23eb8bc2c56873308f1624b782df132a129f378a5f00fc366144d943563dbcb9dfb509abf39c743a8a3feb93af969ad81598ff85ee87e191e980d415db7cbccc41515be3f33405c8efb829c84e5de3ff3dd6c73d67132a1f912221e3d388474e5c549e64d6fba819d499d9178a5acb1d1994a64c01616d049303e07fc432dc7717a23754bb47da7043ee88d13667350a238c2d6bf5a8df06321722533c9b7a457c2754d76b1fa82f50ef565d1c94056d4e11c174b9658a32febd9bafaf4dcf9633ecd47b8c177d3a96723bc160f9e8c4b35a9ab3a9033c255795e0d10b10b18c2017754da8eb568bc493f181517eb754bd077fd292abc984a7be1717fa75db8572cddfdf4b159b113479eb618a5d07343d7c0e5e11ee87fea27409218c9ab06f42bd4615d6d8b29a2e658a924b91a0938ed1f2ceb147f7c190808a2bc956dc34e9eb2d52a7f873b6649f6d91ba6dfd5669460d437d93d228357ba36ced4498f894da6677acfd49be071a3aa3b696933980d3ffebda25705221989f4e6ac0a0ae2d84711bbc4291649dd6dd61687d0d3ddea01e79cf55b3ba41b8a78b3fe8191c8c0481c8107b319d4571f053cbb6f9f445137cb92b97fb4449a402b3b33063842c53cac5d8a829c62e0cc719c9c4845386d9f6b77e8a3879dfea0d54cff1003f7fa167dd56a3cc3eea351ee8b52f6415da2c06b7c0b287cbdd8bd9ca88da5792cf223ed137b6a8eb2bad39d60e4169d8262ca1ada63c573c4eddc474e211087a3272bd02e23d63e0372ce318fb43e746be96d249655e5f8085e2dd37dbca13f4858e1809682c138d1948a0158ba0b62b4c2a809d664c20f17a6a3118f453190338b158171b5de21037be51a99bcff58f71033cafdc7e716ae14d67d221c921fc785e9e4b333b43a0dce40937019578ccf0bacf981dcbf3c658e2c93998eb0fbe12a99715148c534bcccf284fba95a18589d91ea2dc5a6680f1a78a22a96dca0f4f71e4a83e43e893289a0f0167ee9158ebdfa496c320f77044a541aaaf5ad7dae39d622ebb3b344604c23850a99198b3c31616d28e49f16a7bf57d4af4d3fb428cb18e2dd503aab66fbb2b9750518496894eabce89b791a3ce5ec72f5f98f65dd94fd607e9d2811e7445275d2b6c4a18e9ae3eaa659cb25095d11072f6877183442fb0ddb539852b5d0ce641db112b0661963384debad28ff5a1a1328a6898c041af5a3fe32def47cfbead3f37a9e4a1e77bc32eb4b310384d6e62853750446ed1083f577b47f52457a4aaa12d926906752410bc1e979042d77f52eca8b42b9e1c596297428995ecb4409ce5b5f59344e55b2d6a901cb25353e9236470fe83bf2af33e42ff649f0157d3d72eb46bf27add7e75ab3bc8f1872021848583978f6c4058a09ec080818c9e9

View File

@ -0,0 +1 @@
1000bb1b5d9f65d2b9fad177ca4a0a7017e707450f39d4d8e6aa565a47518ca3d3e90145151142faa124dd65fbe9e56a57e3a2c58a0e967c15eae0ecedbd989d73973d80d653a3c6a173fc1f2d83b8402ed726d937a6b4a730000323acd2f9fb681802f0767c6fb6a6719e33b845cbe6e1528f721e770617746db329f5cb48085b9f089c3860bf1a8d1983b13eebdebd151ffbe89e33006caf0cd8298df4a75f53bbf8737cc70d3608966098069b2174ebb264589ff9dd1981cba076ee5e742aab042a689548927f36fae8c72865fab10c663ac2d54e77691e5db81d0b26711605acf5bfcb13461280003f39f90c77bddd6205970fd1ef73eed17d8b5b9a217000f27a44b04b3a80bc19e1885527b46adf647f097a9cfba4a1a20d4462bb81f4edadde3095595fcd50681ea7668231d3c25b3a8ee5e1cd3bcc92538875129f467c658232cc9cbda6308b306250103ec9c8d6b97a16ee61d24dea6fef20f3f2afa9890dbb7652025e727ae02d7eaf29796833e7aaee4a64b66568eae4748cf639eaefc3ba7ed0e7e926f2055fb704ae9789caa9272726d925c81c9dae5a3c1590ccf2101b8dc7ef9c15303dfa96766f6c8d168a56df8272d0b49eaca30d626e5ca4d33b61dce4fd53f06499e9d207ad6aacc326ab8f04781a43a43938ff06f6b42d36ec7f1c3a298f3ed5a702072104006a054d6b1d5de70f05d73caf8984e1a10ab884a256491e8b33e2f790aba518a86fef7395d40ed2c6d2a63fbc80618e455f38d95d004b17ed2448313ad074b9a53f6aabfb3367b407127a3208678110e0ad6f251c7d50b1d29b3a66e9b48e9c4e2b840f07b6d51c766d274793f4b955910867131b5012cc9cce0d2551d81932530b9e0af3f59739476f7436569fdb34c1a3dccc9b8300fc0deb326a7735238d48422726677f562c5cdec590506dab5308e76b6858d6ef0c99643d8894b1d5a668623f9b7bd7803ebd424a3c46f6e472ec6b2ae9e8877c21228a5761e8546fd61e5ed1b56f070262bf4ca15cc3337e30e758afe21447d583ea021b05dc974d07cece13ea3bd9577f4f81e727ed8e3dab46edf42c85ddd0526c9d6b5f731a406dc60f48a7b2b9490ea916442c909734e6eca118158de49bdb36b72663f0166d371cd8d56a0df277d494bcbac8fc1b4d3b62fb6ccb8fbe818ebdd7dc64ec46519a3b805004cd7b827acb7567f19a0d4a4068b5f859a32e2e0475c9b74f33d01af0ba9b5ecaeb0d3e58ccfb309e60bbb8241c628073ba805ae8c4ca6b5e40bfd7df88fcbde5c0ba15dd1d7dd24a5d134a509df8809d800caa3521f27c09df5ef4f353fa80a099eebb6529b2ace6ff532b1e7af68d44d12da13d267949d9daf7c1e2555c4eb14d0bc5368bd8783089620fda41231129a7acb2a3a47aa4cee0f84f992d9157c81170b12cd29c9016394584d2e51cf666e145db4d9cccc9b2ac95d5d641addcfe839a52610bc46206bd3aea36aa1489f22faf6009e1befd810302ba47a1c6b94dc16eb2d51f5f1622060a2c5416a65d08255e2016265590adcbdc305bdd5b65930bf3f11402993a3bce495d141acd7f090e555b78475a1ea833084be1e9f026fd9bddaa80f324d1a0071edb81bf357235f9e126845e6a49cbcd91483c84e7a2bf9e60565748a7a890ea4758b7667cc3741876527a5388d65351ffc478d14344a38406e0478a7354368e2035325d9a90cf5f857c2f1a173b3b3eab3ec6c21c6c49cc98bdd4451a35fca12b0b50c563ba

View File

@ -0,0 +1 @@
1000b3aa29531442d4ac4adc263e299c2dfbcdd27ba3efd55ffc965f53fdc3db083228a9d99b76df3f2f63c9ea10d7fab079d3a05a98e47b6724abb938ada908a172e40ec1f1feb8ff9d7f5c3d05c365262d0139059ee0f4057dd519fbecd4cd9a777dda6bc25059cdab7bb5da10c9cd6842cfa52e460aa262158f9491b61201b8306698eabae047fdc11a056a7445ea784b662595e91594d9c27f2a88086c920363a137585af73c47b6905fd05f724f0687d2c69f6f6ac6a500d2b6175f2520cb2ce0be741a9be75b1c443b3e2f365852f2be2b88440dab20eba83bb52e36baa5226de649858169bac919863b30cf721b9d93d5612cf0866523943a0981260da39ca1cf7398dea2ba3ca30388ba32ddbc1478f5f2eff3810d2d3c8fdfbbbf55fe8a9c3044ceb6939d19f2dad12a4b65addb8932ce70b6c9b6b02fc0fe46108e57d9ee29628f7c7218be3dc724f6fd54d350dd1efaaaee889575bcb8f59956467773f526a3f658850c18e3ff95ec67a9fd8e42f8ed31a3e4c70f0d56d1f8725906d67896850a6e056aa65bc6f02fd7123b3c974536f3a856c5c30fc143ef2c6c483fdca32ce5a4a1536acb8e1e335018c333f1b86e0d4b39675d8b90e4a25dc18ccb8d90868e7e80132fd72afb5ee448137adeb3ef82386db20571d2c958d6d78a8c1b01b09a19304d741b7b7f94e8f8debfdcd240641ff8ea0de3ee8fe74fcfa51491c7cbd40320a7c3dfafc782951d2dfe53f960c91b556cdac36fc0151703d77f4d7b2d5e969159bc5a0a76a7e78f5f003556a7ae83e5d25d084479aca3f0a0176a0648af7bfbe421100cbaeebc4f767be16320431f62ecc037f5d20fc4e7772162c4b4a768c5da24e6b349e657a2705f83d6fe29a1c2e2f4eb13d609e00777295f30c20754f90fff7ee4c19c9cb722f76d19cc40c7ac0239ad8d61431f4d0b9edf61126cc7006e8923d036530db31cc784e86e2dc3d00ff4722ad75cfc6e44e745122b853462040ea81b67bb8e106b562e5ea9004bf9a6769abd5890a4b22c38e230e27ee21111c78ca33865e914375d12f55aa8b981fca27f0e0947fbe576cacde73c91a8bb3c0fc252301eb6322adb010b2b985cc53726d11e347100f24604c27474f15ebffbc7aa0a80b6f3883bfda60f78eca6478c343adff9b811fe38971a6238e1f1cb86751f3f1e8cd2fde6f148a12e0faed259a8da142c6243c3ff88c011d7b6e26cb3319531ce6c006f209becb7d7da98b498c867ea8b22c691076d217ca525ed9f865ce324c28abbfe532ff7bb87b488815bf5514a358933a89b2782f5781c984a05e13cef45a409ff320b9f46882f9d9a9c00b29da7dc0bf2ea613f2298f5c38a7521c480776948997408094995857cd268a699d752c0fe7e82a531211a2a728491eabb20390206160e18e2e9f29ac1a4e4f70f35d1b50bd64b90aad2bd84e61f5b17e9003b21763b95a4b71cc71673e9c357399093fa38f4e09fbab9734262ca53e8f74c6769e9f37d7e2fbc51ced273e0b39f50d5d51763662d89c347812fec193de6009bbfcb7ed3d726c1e4f53ed4c1289526c3d28a0b985e63df388c602027a12e45d219abaa6c0239d2e7c79457cdbe3054945ea54d3fd5ce6f311561d73f95e1efdfb21fe7f68c0d0e6c344efca460e86d1e954a6b4098c0f52a4501af17f3fbc5974839470dc726a7280571aa0cb5372679c6692c01644248cb3710080856b5401e022fc11f6131532c117fc7548eeb2801b788099fbf1d6f1535f8d1d05d5876ad0439add155128711164a8a267d3fc2a5282e5d92f51a0c84549ec2e3fa5facbcf66798b244946c1d1b7362797c567b62440b8f41bc52c62368ebabe5cdf266d6c7433d480ea849b4dde1add3655bef7a1651897da15ce4858b54f50ff7c874fbe9ed5cde6bb21470186c8c6392470253e3cc77a0bb8a2defcd95735e6e7eec0f694184138fbfe3112422999af138a2f8835e97592e93518b956cb95d3e8e3612b2acd613c380a6d3f858d9c01c2df66c7c85d3f7e22d26fcc2eee92e77a6f9a72e80c4621921c86b6635f3ec58b345b9bdb1b01b30c427ef2a5794e6d167d85e705ba3a2390cf36570373be158c145f5cf8a5ad0716a7e8e01abe886ce4ef592bd29472ebf0b92dc820238346d9000fe33a31305d1663395800e51ee77d988c89a6d5c89643ac0bd01b17d26623da7c47df9e87c7ba498b334845ab1acd990f2c0bfe0eca5d3f9cbee71743e49fd2608e0648ea88e3e063c191af7a448ec6fde13275f7c1d5008d2a258691390f26e56ad9fb980eba72e78cdcaf7ebca4b30806c032bb18b72c492c2a14a89eb6319395971d953187b891e268607849fb4256892b0e7c315dd6206ceb162e136b184bbdae9bba5c4a055cfa4e8e24d0e508e173370ab4b7d386ac7826c45617bcd331140874dc959

View File

@ -0,0 +1,44 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Chart.Name }}
labels:
app: {{ .Chart.Name }}
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/proxy-body-size: 1024m
nginx.ingress.kubernetes.io/proxy-connect-timeout: "1000"
nginx.ingress.kubernetes.io/proxy-send-timeout: "10000"
nginx.ingress.kubernetes.io/proxy-read-timeout: "10000"
nginx.ingress.kubernetes.io/upstream-keepalive-timeout: "10000"
spec:
ingressClassName: {{ dig .Values.werf.env .Values.ingress.className._default .Values.ingress.className | quote }}
tls:
- hosts:
- {{ dig .Values.werf.env .Values.ingress.host._default .Values.ingress.host | quote }}
secretName: {{ dig .Values.werf.env .Values.ingress.secretName._default .Values.ingress.secretName | quote }}
rules:
- host: {{ dig .Values.werf.env .Values.ingress.host._default .Values.ingress.host | quote }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ .Chart.Name }}
port:
name: http
---
apiVersion: v1
kind: Secret
metadata:
name: {{ dig .Values.werf.env .Values.ingress.secretName._default .Values.ingress.secretName }}
annotations:
werf.io/sensitive: "true"
type: kubernetes.io/tls
stringData:
tls.crt: |
{{- werf_secret_file (printf "%s/%s" .Values.werf.env "tls.crt") | nindent 4 }}
tls.key: |
{{- werf_secret_file (printf "%s/%s" .Values.werf.env "tls.key") | nindent 4 }}

156
.helm/templates/sts.yaml Normal file
View File

@ -0,0 +1,156 @@
{{- $gpuRole := .Values.gpu.nodeRoleKey }}
{{- $tolKey := .Values.gpu.tolerationKey }}
{{- $tolVal := .Values.gpu.tolerationValue }}
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ .Chart.Name }}
labels:
app: {{ .Chart.Name }}
spec:
serviceName: {{ .Chart.Name }}
minReadySeconds: 10
updateStrategy:
type: RollingUpdate
replicas: 1
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app: {{ .Chart.Name }}
topologyKey: kubernetes.io/hostname
weight: 100
{{- if $gpuRole }}
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: {{ $gpuRole | quote }}
operator: Exists
{{- end }}
{{- if and $tolKey $tolVal }}
tolerations:
- key: {{ $tolKey | quote }}
operator: Equal
value: {{ $tolVal | quote }}
effect: NoExecute
{{- end }}
imagePullSecrets:
- name: registrysecret
containers:
- name: {{ .Chart.Name }}
image: {{ .Values.werf.image.ollama }}
imagePullPolicy: IfNotPresent
volumeMounts:
- name: data
mountPath: /root/.ollama
ports:
- name: http
containerPort: {{ .Values.port }}
protocol: TCP
env:
- name: OLLAMA_HOST
value: "0.0.0.0:{{ .Values.port }}"
{{- range $n, $v := .Values.env }}
- name: {{ $n }}
value: {{ $v | quote }}
{{- end }}
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 15
periodSeconds: 9
timeoutSeconds: 6
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 6
failureThreshold: 3
resources: {{ dig .Values.werf.env .Values.resources._default .Values.resources | toYaml | nindent 12 }}
{{- if or .Values.models.pull .Values.models.run }}
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- |
while ! /bin/ollama ps > /dev/null 2>&1; do
sleep 5
done
{{- $allModels := list -}}
{{- if .Values.models.pull }}
{{- range .Values.models.pull }}
{{- if contains ":" . }}
{{- $allModels = append $allModels . }}
{{- else }}
{{- $allModels = append $allModels (printf "%s:latest" .) }}
{{- end }}
/bin/ollama pull {{ternary "--insecure" "" $.Values.insecure | toString }} {{ . }}
{{- end }}
{{- end }}
{{- if .Values.models.run }}
{{- range .Values.models.run }}
{{- if contains ":" . }}
{{- $allModels = append $allModels . }}
{{- else }}
{{- $allModels = append $allModels (printf "%s:latest" .) }}
{{- end }}
/bin/ollama run {{ . }}
{{- end }}
{{- end }}
{{- if .Values.models.clean }}
/bin/ollama list | awk 'NR>1 {print $1}' | while read model; do
echo "{{ $allModels | join " " }}" | tr ' ' '\n' | grep -Fqx "$model" || /bin/ollama rm "$model"
done
{{- end }}
{{- end }}
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: {{ dig .Values.werf.env .Values.storage.class._default .Values.storage.class | quote }}
resources:
requests:
storage: {{ dig .Values.werf.env .Values.storage.size._default .Values.storage.size | quote }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}
labels:
app: {{ .Chart.Name }}
spec:
type: ClusterIP
ports:
- port: {{ .Values.port }}
targetPort: http
protocol: TCP
name: http
selector:
app: {{ .Chart.Name }}

65
.helm/values.yaml Normal file
View File

@ -0,0 +1,65 @@
port: 11434
gpu:
enabled: true
nodeRoleKey: node-role.deckhouse.io/worker
tolerationKey: dedicated
tolerationValue: ""
nvidiaResource: "nvidia.com/gpu"
env:
OLLAMA_MULTIUSER_CACHE: true
OLLAMA_FLASH_ATTENTION: true
OLLAMA_NOHISTORY: true
OLLAMA_NEW_ENGINE: true
OLLAMA_NUM_PARALLEL: 4
OLLAMA_KEEP_ALIVE: -1
OLLAMA_DEBUG: "1"
OLLAMA_CONTEXT_LENGTH: "32000"
models:
#pull:
#- gemma3:12b
run:
- alibayram/Qwen3-30B-A3B-Instruct-2507:latest
clean: false
insecure: false
resources:
_default:
requests:
memory: "10Gi"
limits:
memory: "12Gi"
nvidia.com/gpu: 1
preprod:
requests:
cpu: "1"
memory: "10Gi"
limits:
memory: "12Gi"
nvidia.com/gpu: 1
prod:
requests:
cpu: "1"
memory: "10Gi"
limits:
memory: "12Gi"
nvidia.com/gpu: 1
storage:
size:
_default: 10Gi
class:
_default: local-storage-class-worker
ingress:
className:
_default: nginx
host:
_default: ollama.pro.lukoil.com
preprod: ollama.preprod.pro.lukoil.com
prod: ollama.prod.pro.lukoil.com
secretName:
_default: ollama-tls

9
werf.yaml Normal file
View File

@ -0,0 +1,9 @@
---
configVersion: 1
project: ollama
deploy:
namespace: '[[ env ]]'
helmRelease: '[[ project ]]-[[ env ]]'
---
image: ollama
from: registry.lukoil.ru:8123/external-pub/ollama/ollama:0.30.11