From d4128607311b89ec65493df5be8bd60f7a7ec67d Mon Sep 17 00:00:00 2001 From: Tom Kerkhove Date: Wed, 27 Jan 2021 14:50:32 +0100 Subject: [PATCH] feat: Update to KEDA v2.1 CRDs (#115) * feat: Update to KEDA v2.1 CRDs Signed-off-by: Tom Kerkhove * Ship KEDA v2.1 Helm chart Signed-off-by: Tom Kerkhove * Use latest CRDs Signed-off-by: Tom Kerkhove * Update Helm chart Signed-off-by: Tom Kerkhove * Cleanup Signed-off-by: Tom Kerkhove --- docs/index.yaml | 58 +- docs/keda-2.1.0.tgz | Bin 0 -> 62511 bytes keda/Chart.yaml | 4 +- keda/crds/clustertriggerauthentications.yaml | 151 +++++ keda/crds/scaledjobs.keda.sh.yaml | 557 +++++++++++++++--- keda/crds/scaledobjects.keda.sh.yaml | 76 +-- keda/crds/triggerauthentications.keda.sh.yaml | 2 +- 7 files changed, 685 insertions(+), 163 deletions(-) create mode 100644 docs/keda-2.1.0.tgz create mode 100644 keda/crds/clustertriggerauthentications.yaml diff --git a/docs/index.yaml b/docs/index.yaml index 9bc904c3..d4cf2fac 100644 --- a/docs/index.yaml +++ b/docs/index.yaml @@ -1,9 +1,29 @@ apiVersion: v1 entries: keda: + - apiVersion: v2 + appVersion: 2.1.0 + created: "2021-01-27T14:46:26.2756809+01:00" + description: Event-based autoscaler for workloads on Kubernetes + digest: 91998f9165176f972b954ef9d4077942979cb5e863bb7d76ed29c48f63533531 + home: https://github.com/kedacore/keda + icon: https://raw.githubusercontent.com/kedacore/keda/master/images/keda-logo-500x500-white.png + maintainers: + - email: ahmels@microsoft.com + name: Ahmed ElSayed + - email: kerkhove.tom@gmail.com + name: Tom Kerkhove + - email: zroubali@redhat.com + name: Zbynek Roubalik + name: keda + sources: + - https://github.com/kedacore/keda + urls: + - https://kedacore.github.io/charts/keda-2.1.0.tgz + version: 2.1.0 - apiVersion: v2 appVersion: 2.0.0 - created: "2020-12-23T19:32:45.0199966+01:00" + created: "2021-01-27T14:46:26.2736879+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: ce2e848f5d7a067d74feb3745da5a834cccdfaa665b5b59d43ad06baa4cdfd04 home: https://github.com/kedacore/keda @@ -23,7 +43,7 @@ entries: version: 2.0.1 - apiVersion: v1 appVersion: 2.0.0 - created: "2020-12-23T19:32:44.9899935+01:00" + created: "2021-01-27T14:46:26.2656482+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: dba8b0e793085165c7d155f9393c5ff112d4714dbce0201404ceb0e67d1b2deb home: https://github.com/kedacore/keda @@ -43,7 +63,7 @@ entries: version: 2.0.0 - apiVersion: v1 appVersion: 2.0.0-rc2 - created: "2020-12-23T19:32:44.965994+01:00" + created: "2021-01-27T14:46:26.2562003+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: bad82c28c5ca1d5e69fac4bfcc7a999d5d2b2afd9b19ff6deb9a48811110eb0d home: https://github.com/kedacore/keda @@ -63,7 +83,7 @@ entries: version: 2.0.0-rc3 - apiVersion: v2 appVersion: 2.0.0-rc2 - created: "2020-12-23T19:32:44.945989+01:00" + created: "2021-01-27T14:46:26.2468272+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: a4042ba14e595a8e82c9a39d8987625b89292aa86029686a3603b724fda36ca0 home: https://github.com/kedacore/keda @@ -84,7 +104,7 @@ entries: version: 2.0.0-rc2 - apiVersion: v1 appVersion: 2.0.0-rc - created: "2020-12-23T19:32:44.9219906+01:00" + created: "2021-01-27T14:46:26.2378501+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: 3a952f2aaa0ea35ee4335f0b168f44fcf37c5c5ab7e9b9bba7e731c42f04ad61 home: https://github.com/kedacore/keda @@ -104,7 +124,7 @@ entries: version: 2.0.0-rc - apiVersion: v1 appVersion: 2.0.0-beta - created: "2020-12-23T19:32:44.9049916+01:00" + created: "2021-01-27T14:46:26.2266807+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: fbafc7ae564c13a0eab7062667759f6e93595c97125731a27e8290574e1d570c home: https://github.com/kedacore/keda @@ -124,7 +144,7 @@ entries: version: 2.0.0-beta1.2 - apiVersion: v1 appVersion: 2.0.0-beta - created: "2020-12-23T19:32:44.6314429+01:00" + created: "2021-01-27T14:46:26.2166812+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: db9e7d2423423463285f2e9d5b940a63b41d6555ba9fcab8fda0e6a757ccefa9 home: https://github.com/kedacore/keda @@ -144,7 +164,7 @@ entries: version: 2.0.0-beta1.1 - apiVersion: v1 appVersion: 2.0.0-beta - created: "2020-12-23T19:32:44.5674509+01:00" + created: "2021-01-27T14:46:26.2047171+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: f0a8f0b854246ee2258ec8f10528f2811681ad2e41946dc455586f1ba9818e01 home: https://github.com/kedacore/keda @@ -164,7 +184,7 @@ entries: version: 2.0.0-beta - apiVersion: v1 appVersion: 1.5.0 - created: "2020-12-23T19:32:44.3518922+01:00" + created: "2021-01-27T14:46:26.1956826+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: 07b15ddae4f1c40747de063100a668ac15d504cd0548eac0e1a04381fcaa3b37 home: https://github.com/kedacore/keda @@ -184,7 +204,7 @@ entries: version: 1.5.0 - apiVersion: v1 appVersion: 1.4.1 - created: "2020-12-23T19:32:44.319888+01:00" + created: "2021-01-27T14:46:26.1866811+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: f8bf80186ac3343998021a1721d06a67fdacd1dab92e4a4992620903b52004a4 home: https://github.com/kedacore/keda @@ -204,7 +224,7 @@ entries: version: 1.4.2 - apiVersion: v1 appVersion: 1.4.1 - created: "2020-12-23T19:32:44.2498951+01:00" + created: "2021-01-27T14:46:26.1727325+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: 97a2e5c0beff93bb71ff861da0f29d09dcf988e724784f8b7c56ac9872c37a81 home: https://github.com/kedacore/keda @@ -220,7 +240,7 @@ entries: version: 1.4.1 - apiVersion: v1 appVersion: 1.4.0 - created: "2020-12-23T19:32:44.183894+01:00" + created: "2021-01-27T14:46:26.1636811+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: 7b2b4e29f867361af87a60411b0a196416b04b2e20f4091d166263ea5195c355 home: https://github.com/kedacore/keda @@ -236,7 +256,7 @@ entries: version: 1.4.0 - apiVersion: v1 appVersion: 1.4.0 - created: "2020-12-23T19:32:44.1538925+01:00" + created: "2021-01-27T14:46:26.154682+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: a9e78b6cb2257702296d7cc28ca7acdd0b11603aef7e95dbdc7d4ddfa3f3a49c home: https://github.com/kedacore/keda @@ -252,7 +272,7 @@ entries: version: 1.3.2 - apiVersion: v1 appVersion: 1.3.0 - created: "2020-12-23T19:32:44.1018912+01:00" + created: "2021-01-27T14:46:26.1456838+01:00" description: Event-based autoscaler for workloads on Kubernetes digest: e13bcb65816ed59b10b32fa6db8f61668635459d56c2d599bb3c0bcc5dcc1368 home: https://github.com/kedacore/keda @@ -268,7 +288,7 @@ entries: version: 1.3.1 - apiVersion: v1 appVersion: 1.3.0 - created: "2020-12-23T19:32:44.0578908+01:00" + created: "2021-01-27T14:46:26.1357073+01:00" description: Event based autoscaler for Azure Functions deployments on Kubernetes digest: c0772458ab70bf3f019dc0b899ff444b9d7e6dcc466afd62e3f62e90eb8a24ed home: https://github.com/kedacore/keda @@ -284,7 +304,7 @@ entries: version: 1.3.0 - apiVersion: v1 appVersion: 1.2.0 - created: "2020-12-23T19:32:44.0258913+01:00" + created: "2021-01-27T14:46:26.1266822+01:00" description: Event based autoscaler for Azure Functions deployments on Kubernetes digest: e041dbed2455fef34f2908594a42fc8a7f163a1f48be46c2f93dea46e36fc733 home: https://github.com/kedacore/keda @@ -300,7 +320,7 @@ entries: version: 1.2.0 - apiVersion: v1 appVersion: 1.1.0 - created: "2020-12-23T19:32:43.9798916+01:00" + created: "2021-01-27T14:46:26.117708+01:00" description: Event based autoscaler for Azure Functions deployments on Kubernetes digest: c624e6620a9a6f265f51a82ee0d8267dcb2637dd3777306afbb271746234ff2d home: https://github.com/kedacore/keda @@ -316,7 +336,7 @@ entries: version: 1.1.0 - apiVersion: v1 appVersion: 1.0.0 - created: "2020-12-23T19:32:43.9568913+01:00" + created: "2021-01-27T14:46:26.1076815+01:00" description: Event based autoscaler for Azure Functions deployments on Kubernetes digest: ef934588dce70d874ea69692e082b8a70ad19095090b8d4fa7b5cb69b2cecaf6 home: https://github.com/kedacore/keda @@ -330,4 +350,4 @@ entries: urls: - https://kedacore.github.io/charts/keda-1.0.0.tgz version: 1.0.0 -generated: "2020-12-23T19:32:43.8908008+01:00" +generated: "2021-01-27T14:46:26.0977239+01:00" diff --git a/docs/keda-2.1.0.tgz b/docs/keda-2.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b7457c3f89750a822f0629f43baae037c54188d6 GIT binary patch literal 62511 zcmYg%V{|4>7j10Ywr$(ClZkC(V%yflwmGpgv2ELVZr<b+7K#)$8ou zhcFrn4d}lEKn+A|ETzKqOG=(Y&WoGfgjIvdRF&OIN0pmHQA2}6Uengv*xuAjP1%88 z%FNad=&}dkf!o%=p+&EN4_+*wk62k0Et$q-I&Yll!)qfZAajTZ_!Y8|4@yL&57}d^|k7 zZqIMLZ+^ zcE}f6E3V?3h=i0TQZ}D=C=2boyR%zI&s!=A78Ews+oiJ@CUz`iX_F9_VY3ialDQ06 z*T2JVgHCkF7N_C9Vqm0EW0I{72Gh`oGV?O*r1Mvkl{QE;prUMVIMXr(bw zUXPZ)rJ}5yLvGo~BR_9aB!XlG!WamMhw4Y(JhPIpaw*b17549QZAfa%d?mu7$^iWH zJ4@T0`_%6P0xG?aO}lSUl#hMjk!9`MvjE;KR_EC5EXrEKOou?4q!SX7-*-ANGv^P- z+yJ2wYz1eMn^@rLHGm<%;Adk8AfG>A`34YfsW>OgGU8Q~pbb`^{#1k|;Qt7wFJB?1 zMiTSw|M|XTG$kIDO2Uk@5YmszD4k*?JO>9GB?+A<<-|rp^;d-zdIC+-B@gzGR2I1w zGPm#N=^g26gJe7*@hR-LkW@m9Y-M`}VPS^kiWnSqU7hp8E~;w|*{4KN%q<;pr>p>} z$Xo_dC}l)kVpbA&6!(V4DFkZ?;W+ucA!&};m^}ul!rnOYzkpIPXq@qb7y}e$(m}$y zKtH$NtTcODK7Z8!sYlYz1E@ID@pDej!6z!HPY_j>-f^lVtayo}%`NH)?<9&zvMA6+ zhsfT5g9AxEQV?4EFfHetzz>7I$b$^)-uPrqPcalLB6B_g^BCIdfTSb5q5yzOiE#|8 zc*xuHT`{HN969mnUpE1gL>Z)xX%so^2~Rv#YUc#TV!k{i_7v<$fqovj4x-yyq5~B! zJS=9SfIAAh$iOT!yvdu&t}AoK02Nc!qchU7qG&V#sloq zNQ1wUr*ppH4uA>AtBuk4At*_vQz@kCF=Q1I%6CZqD>jl*5LKaARd!wB z-LXw)8l-x&gMtca)-lY-5xr9mnxNbuOmpE8imT=gp(NBPc5eTbl5hA|uvxAuZ>WOg zA3)MbMIs`dV$ANQ*1mgpAo*TarI}9ouK5?)SK^gFP1So)JZw9#{OhyMm05nA`G;QbKo1Ud7KVm$bZg4Z1p9^uURddZX-%Cqt< z?Eo6wUiVjh*7~K6apzX#27I#8M%+YT!Jbn49Kb{*oafmc>BuiG5Pn7&4v7W4Ka9}A$DV9@0(4!hqv99q^cJ0S;zFe^$iYKJ+)`Hrl zJbl!F*4x5b3SL615+PfEKwmkbJx$j9X#OS6RjdH(^BGaUmY7xvS~Z!Q*Y|Pqc6XsV z=Z5dFEx;eZ>FM!#URSo!pAN3rvYmzd54BV|GJXz=GKuTkHRStY_e}LQWa$y=YU6tP z=FVouQhc{a)qKQ7`P1}KbwYbUh9Sxy*Vz*p6wFzA%F)CpA+aC3qlkL1qj9HUU(Hm2 zk-+W|<83kgPI0dPTQz6;1rY(#y+^C$iy=nD=29>`oH38{Qjjsv-)(LqfS~B>V+XY6 z3ULP;)#wX}xA|mbfU%FyU#$s^P{7|+UfUN;#_VnIK$2RSYh)tB6{V@|GHtTaIJX6d zP#L2kV;Lac{6zA5d#$uFzn(=fupT%A%;~a_z+FFI4f4=I0HUyswe3SPYBbkT~PSb&Iv70Jxm| zxDKWSgyG*`2t3t)6nl<8G+H45f_zxNm(em8qIaR!^gycj0E&Hjw}774`}!9Ezm$z5 zKJ#GW!Ml7ZV&9&gd`E#GC@!`EVBB$E1aDRKMz>bc33nXCFzypK8AJhf`MgSvYdQ{T zGWky`C1VloJs5&CXw6&j(vXrb5G9-%LEKf_h)CYP9EaeIY^b_@9|fzQ*h;``1Xf3S z8=(GbC%Gv;OA$Ms-tyNStpLy$hIbZ{*|$`Ab3kBSag9&Ebwj|%6UZVE(1+2wK2TE# z+zh`xJc7JqeI%DE*SM!%=RdzlK9;|RAs?uOZ-YRL`L>}TV?ziUPcCNqo8p+hkEoF; zwr|z}a@Y!|vuPC5hBq+q_>pTpie?&3{{Rb zA$Tp1Z=d(es?N^)-L!C(vH9BO{?!*xOOk|KeLt zEe-U?Hy!oo=+*g$qw~FeK96;i0fOwGf)v_=C)6FNpu3%~br!P*Y_kEgd3~pE z0MTZe;8AS~+U`%Y1_&I!&ujPhBEDOrpG3eq7PgBZg|y!V&B#0eP} zlLf1wuv5}TjiD1FN){87Vz59eI%sB9sPW3+xlRZ}b;@mrbNp;)qe>eT5SVi!zm;Tr zc=mD>5;ofqNO*lCr7ORfgP2ja)(PjD6(b`zRa;)~)bgsr@Z`<0%JUTP!*j} zfZ9!WlmhdlT?RduxGWdF|13=^#`b5#cdCo{oU_~%CldE=KU*-ox_K>`@Sw02XTRqMt>3usO491+0lK^a@?!CG>r2NeVTT-lJ& z1I);vMkeA^_P{nwuh(&4 zG{SwbL)4@}xMYf_F-#;!p}VC2GNvk2);#`j4~OCg$T$|23Nn7eFaQMcKhNsFVa?Q( zbGpf(^9++BnzRTC%M3LLQNTuiOWrEOUsj z+wRtn3+8OnLIMhz)*-aIh5OQqRfJnNsC>}vkE8UGF|di#*{OwR!zk9n{f$Te7z_%P zTH}F8TozVj#%9;_SNs#ll1}Uo!vIKLbo&?t(t0OC;mAQ=`;vSXi0^{hk9NWIIw;B1l{AA2xOJD z8N1~z!$+kUg9bs>2&?<`ooarqAYi!}z{mQW-`brs6IS5%3<$O`5zF#KIKUXw=&U4U5@aM~V zzYl^Ts9dW6WQwH^HT;&s$#_z_jl^K8hqd`;wZk6%+8Vl+B~hn`^2NnL{ySiG1i%Rg ztn(L;PuT6bz6daUyz4_;@VC1Y1WhjGo%4hlM7DZJ4HGY@C&37IsrW(5bt7Z=+TD zGAmt%O(2#-J&+s{0Zx9`)*IzFEq`(LXq1>SiT?H*UEiDlj)eemVl!CXr&;qbptz<2 zAV{CKycPPpb{T+(h=`DNmv4ygyEGagAk~%rI{U1H`+|(zS$%DQ>2(T!&Pfh@!))G^ zTjW77++n+~v-zE`t9R0mZYlS4dCp+}LtSjmoMX-9zWU z+}AR~$Sx#AG=YMoB`<2ij1yS?1dMXd4jV=H~R~=@)VmES4?sDMcWl_GJ8*N4Kc%#fADA zm0-^_KrEBGF-9M{)RV_1YW>QO|qnNDVeA4^`%!_zS-gJkon+XfApCKC)um z+|s!COD}&X!YQ}owPtar_p>aX%`vAT+lSPdd&s-gnSe@Xe2T%wL0PNF)0JvV>DP;P zVKCRc_stvN=bKJQcL?b7T;B*FEUKwK_gWzs-6;!w>V-eH3l#!4M-A$2r+DCh46RrR zc$^Me?$%O6OOgJ4=x) z)YD))14M|iTJn(HjBQ%AeXj^)_RF>pu(+}Bv5@r%n2dV5uT>FRIR@ad-3R0m5a2z( z1A?0kjlV5$qc2!RZfHrHW7qxSP8~|w-vH4x0LAGizL)C%U8l(R$=<^EcRHk1nx-*E z-Mvf8d;R8>JiCLIy3*>A=$a{(lW=>8Zk2_4qOtI%{BL7J-PH@Q{a?h^`KO^E3B(e` z9Mswm_RTNjI*Y+k7!B(r=o^zO3fehN6EGhs4PZ-rHQUH`sx$45ZDFbNAbEeCJW|nj zqb4US|7t%%cm>sM`Du)_FWHOfE-4FdO=3&~v$1~+8VTM}nnY%qbep($mm>e1Km;8|yCH0w zw(|?a1}a8wN<9slphj_6m>J*ZJF{BSA)VOvmw8 zXhqeTxvpecG*x0kK^%qhbxuHrFrPmg-WT2TwBWGj!nnX^+pEaTsz3NHl;nz6*a#c( z{avvj+>v}K0DI5oD_-WQ44^0oK!BZaiJURWJKts<2p~!H{={&%9`D(0b0`yoe2k`oOJI<{HcqTmKD@&;gC1S-MkCA0kk+_z7&P1O7JvEqz%KazB>#x#Ve9c+(Nd*{ zy}=%l3v|SdzBVFDY=i^j%Aj+Q<9=2I-v2Qrv4Z;j!t#;$Fp=~k4pCs*U==lqGIL^x zz0Ngg-hx;uC$V+Wf`HHB3mOWT1+jH|M<2=-0TU8ZVaY$+^DD;-{k|azfbQOxScrA+ z?4_Q#_MXwYtCi_PUqu|Fuva<4pmF&9Uqt;c;u5T#yUaWc4yvNOJBD~SS=mi{X|^=V z3{Uq2iPUDy-3+9IVwl6%=cg z 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 O0RR8RSRe)fcnAPo&CpT+ literal 0 HcmV?d00001 diff --git a/keda/Chart.yaml b/keda/Chart.yaml index e16e2727..6895b60e 100644 --- a/keda/Chart.yaml +++ b/keda/Chart.yaml @@ -4,11 +4,11 @@ description: Event-based autoscaler for workloads on Kubernetes # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. -version: 2.0.1 +version: 2.1.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. -appVersion: 2.0.0 +appVersion: 2.1.0 home: https://github.com/kedacore/keda icon: https://raw.githubusercontent.com/kedacore/keda/master/images/keda-logo-500x500-white.png diff --git a/keda/crds/clustertriggerauthentications.yaml b/keda/crds/clustertriggerauthentications.yaml new file mode 100644 index 00000000..8876d9c9 --- /dev/null +++ b/keda/crds/clustertriggerauthentications.yaml @@ -0,0 +1,151 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.3.0 + creationTimestamp: null + name: clustertriggerauthentications.keda.sh +spec: + group: keda.sh + names: + kind: ClusterTriggerAuthentication + listKind: ClusterTriggerAuthenticationList + plural: clustertriggerauthentications + shortNames: + - cta + - clustertriggerauth + singular: clustertriggerauthentication + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .spec.podIdentity.provider + name: PodIdentity + type: string + - jsonPath: .spec.secretTargetRef[*].name + name: Secret + type: string + - jsonPath: .spec.env[*].name + name: Env + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: ClusterTriggerAuthentication defines how a trigger can authenticate + globally + 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: TriggerAuthenticationSpec defines the various ways to authenticate + properties: + env: + items: + description: AuthEnvironment is used to authenticate using environment + variables in the destination ScaleTarget spec + properties: + containerName: + type: string + name: + type: string + parameter: + type: string + required: + - name + - parameter + type: object + type: array + hashiCorpVault: + description: HashiCorpVault is used to authenticate using Hashicorp + Vault + properties: + address: + type: string + authentication: + description: VaultAuthentication contains the list of Hashicorp + Vault authentication methods + type: string + credential: + description: Credential defines the Hashicorp Vault credentials + depending on the authentication method + properties: + serviceAccount: + type: string + token: + type: string + type: object + mount: + type: string + role: + type: string + secrets: + items: + description: VaultSecret defines the mapping between the path + of the secret in Vault to the parameter + properties: + key: + type: string + parameter: + type: string + path: + type: string + required: + - key + - parameter + - path + type: object + type: array + required: + - address + - authentication + - secrets + type: object + podIdentity: + description: AuthPodIdentity allows users to select the platform native + identity mechanism + properties: + provider: + description: PodIdentityProvider contains the list of providers + type: string + required: + - provider + type: object + secretTargetRef: + items: + description: AuthSecretTargetRef is used to authenticate using a + reference to a secret + properties: + key: + type: string + name: + type: string + parameter: + type: string + required: + - key + - name + - parameter + type: object + type: array + type: object + required: + - spec + type: object + served: true + storage: true + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] \ No newline at end of file diff --git a/keda/crds/scaledjobs.keda.sh.yaml b/keda/crds/scaledjobs.keda.sh.yaml index d2bc2cfd..9405cf1c 100644 --- a/keda/crds/scaledjobs.keda.sh.yaml +++ b/keda/crds/scaledjobs.keda.sh.yaml @@ -17,6 +17,12 @@ spec: scope: Namespaced versions: - additionalPrinterColumns: + - jsonPath: .spec.minReplicaCount + name: Min + type: integer + - jsonPath: .spec.maxReplicaCount + name: Max + type: integer - jsonPath: .spec.triggers[*].type name: Triggers type: string @@ -935,7 +941,7 @@ spec: fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, - metadata.labels, metadata.annotations, + `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' properties: @@ -1739,6 +1745,33 @@ spec: that applies to the container. type: string type: object + seccompProfile: + description: The seccomp options to use by this + container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be preconfigured + on the node to work. Must be a descending + path, relative to the kubelet's configured + seccomp profile location. Must only be + set if type is "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. Valid + options are: \n Localhost - a profile + defined in a file on the node should be + used. RuntimeDefault - the container runtime + default profile should be used. Unconfined + - no profile should be applied." + type: string + required: + - type + type: object windowsOptions: description: The Windows specific settings applied to all containers. If unspecified, the options @@ -1780,8 +1813,7 @@ spec: at the beginning of a Pod''s lifecycle, when it might take a long time to load data or warm a cache, than during steady-state operation. This - cannot be updated. This is a beta feature enabled - by the StartupProbe feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' properties: exec: description: One and only one of the following @@ -2185,7 +2217,7 @@ spec: fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, - metadata.labels, metadata.annotations, + `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' properties: @@ -2973,6 +3005,33 @@ spec: that applies to the container. type: string type: object + seccompProfile: + description: The seccomp options to use by this + container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be preconfigured + on the node to work. Must be a descending + path, relative to the kubelet's configured + seccomp profile location. Must only be + set if type is "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. Valid + options are: \n Localhost - a profile + defined in a file on the node should be + used. RuntimeDefault - the container runtime + default profile should be used. Unconfined + - no profile should be applied." + type: string + required: + - type + type: object windowsOptions: description: The Windows specific settings applied to all containers. If unspecified, the options @@ -3421,7 +3480,7 @@ spec: fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, - metadata.labels, metadata.annotations, + `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' properties: @@ -4225,6 +4284,33 @@ spec: that applies to the container. type: string type: object + seccompProfile: + description: The seccomp options to use by this + container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be preconfigured + on the node to work. Must be a descending + path, relative to the kubelet's configured + seccomp profile location. Must only be + set if type is "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. Valid + options are: \n Localhost - a profile + defined in a file on the node should be + used. RuntimeDefault - the container runtime + default profile should be used. Unconfined + - no profile should be applied." + type: string + required: + - type + type: object windowsOptions: description: The Windows specific settings applied to all containers. If unspecified, the options @@ -4266,8 +4352,7 @@ spec: at the beginning of a Pod''s lifecycle, when it might take a long time to load data or warm a cache, than during steady-state operation. This - cannot be updated. This is a beta feature enabled - by the StartupProbe feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' properties: exec: description: One and only one of the following @@ -4557,8 +4642,7 @@ spec: description: PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field - is alpha-level and is only honored by servers that enable - the NonPreemptingPriority feature. + is beta-level, gated by the NonPreemptingPriority feature-gate. type: string priority: description: The priority value. Various system components @@ -4642,7 +4726,7 @@ spec: based ownership(and permissions). It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are "OnRootMismatch" - and "Always". If not specified defaults to "Always".' + and "Always". If not specified, "Always" is used.' type: string runAsGroup: description: The GID to run the entrypoint of the @@ -4698,6 +4782,29 @@ spec: applies to the container. type: string type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file on + the node should be used. RuntimeDefault - the + container runtime default profile should be + used. Unconfined - no profile should be applied." + type: string + required: + - type + type: object supplementalGroups: description: A list of groups applied to the first process run in each container, in addition to the @@ -4763,6 +4870,17 @@ spec: description: 'ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured + as the pod's FQDN, rather than the leaf name (the default). + In Linux containers, this means setting the FQDN in + the hostname field of the kernel (the nodename field + of struct utsname). In Windows containers, this means + setting the registry value of hostname for the registry + key HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters + to FQDN. If a pod does not have FQDN, this has no effect. + Default to false. + type: boolean shareProcessNamespace: description: 'Share a single process namespace between all of the containers in a pod. When this is set containers @@ -4840,9 +4958,7 @@ spec: description: TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by - the constraints. This field is only honored by clusters - that enable the EvenPodsSpread feature. All topologySpreadConstraints - are ANDed. + the constraints. All topologySpreadConstraints are ANDed. items: description: TopologySpreadConstraint specifies how to spread matching pods among the given topology. @@ -4902,18 +5018,21 @@ spec: type: object maxSkew: description: 'MaxSkew describes the degree to which - pods may be unevenly distributed. It''s the maximum - permitted difference between the number of matching - pods in any two topology domains of a given topology - type. For example, in a 3-zone cluster, MaxSkew - is set to 1, and pods with the same labelSelector - spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - - if MaxSkew is 1, incoming pod can only be scheduled + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. For example, in a 3-zone + cluster, MaxSkew is set to 1, and pods with the + same labelSelector spread as 1/1/0: | zone1 | + zone2 | zone3 | | P | P | | - if + MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming - pod can be scheduled onto any zone. It''s a required - field. Default value is 1 and 0 is not allowed.' + pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies + that satisfy it. It''s a required field. Default + value is 1 and 0 is not allowed.' format: int32 type: integer topologyKey: @@ -4928,10 +5047,13 @@ spec: description: 'WhenUnsatisfiable indicates how to deal with a pod if it doesn''t satisfy the spread constraint. - DoNotSchedule (default) tells the - scheduler not to schedule it - ScheduleAnyway - tells the scheduler to still schedule it It''s - considered as "Unsatisfiable" if and only if placing - incoming pod on any topology violates "MaxSkew". + scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assigment + for that pod would violate "MaxSkew" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | @@ -5142,13 +5264,17 @@ spec: should populate this volume properties: defaultMode: - description: 'Optional: mode bits to use on - created files by default. Must be a value - between 0 and 0777. Defaults to 0644. Directories - within the path are not affected by this setting. - This might be in conflict with other options - that affect the file mode, like fsGroup, and - the result can be other mode bits set.' + description: 'Optional: mode bits used to set + permissions on created files by default. Must + be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires + decimal values for mode bits. Defaults to + 0644. Directories within the path are not + affected by this setting. This might be in + conflict with other options that affect the + file mode, like fsGroup, and the result can + be other mode bits set.' format: int32 type: integer items: @@ -5171,12 +5297,16 @@ spec: description: The key to project. type: string mode: - description: 'Optional: mode bits to use - on this file, must be a value between - 0 and 0777. If not specified, the volume - defaultMode will be used. This might - be in conflict with other options that - affect the file mode, like fsGroup, + description: 'Optional: mode bits used + to set permissions on this file. Must + be an octal value between 0000 and 0777 + or a decimal value between 0 and 511. + YAML accepts both octal and decimal + values, JSON requires decimal values + for mode bits. If not specified, the + volume defaultMode will be used. This + might be in conflict with other options + that affect the file mode, like fsGroup, and the result can be other mode bits set.' format: int32 @@ -5206,8 +5336,8 @@ spec: type: object csi: description: CSI (Container Storage Interface) represents - storage that is handled by an external CSI driver - (Alpha feature). + ephemeral storage that is handled by certain external + CSI drivers (Beta feature). properties: driver: description: Driver is the name of the CSI driver @@ -5260,9 +5390,14 @@ spec: properties: defaultMode: description: 'Optional: mode bits to use on - created files by default. Must be a value - between 0 and 0777. Defaults to 0644. Directories - within the path are not affected by this setting. + created files by default. Must be a Optional: + mode bits used to set permissions on created + files by default. Must be an octal value between + 0000 and 0777 or a decimal value between 0 + and 511. YAML accepts both octal and decimal + values, JSON requires decimal values for mode + bits. Defaults to 0644. Directories within + the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' @@ -5294,12 +5429,16 @@ spec: - fieldPath type: object mode: - description: 'Optional: mode bits to use - on this file, must be a value between - 0 and 0777. If not specified, the volume - defaultMode will be used. This might - be in conflict with other options that - affect the file mode, like fsGroup, + description: 'Optional: mode bits used + to set permissions on this file, must + be an octal value between 0000 and 0777 + or a decimal value between 0 and 511. + YAML accepts both octal and decimal + values, JSON requires decimal values + for mode bits. If not specified, the + volume defaultMode will be used. This + might be in conflict with other options + that affect the file mode, like fsGroup, and the result can be other mode bits set.' format: int32 @@ -5371,6 +5510,231 @@ spec: pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object + ephemeral: + description: "Ephemeral represents a volume that + is handled by a cluster storage driver (Alpha + feature). The volume's lifecycle is tied to the + pod that defines it - it will be created before + the pod starts, and deleted when the pod is removed. + \n Use this if: a) the volume is only needed while + the pod runs, b) features of normal volumes like + restoring from snapshot or capacity tracking + are needed, c) the storage driver is specified + through a storage class, and d) the storage driver + supports dynamic volume provisioning through a + PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between + this volume type and PersistentVolumeClaim). + \n Use PersistentVolumeClaim or one of the vendor-specific + APIs for volumes that persist for longer than + the lifecycle of an individual pod. \n Use CSI + for light-weight local ephemeral volumes if the + CSI driver is meant to be used that way - see + the documentation of the driver for more information. + \n A pod can use both types of ephemeral volumes + and persistent volumes at the same time." + properties: + readOnly: + description: Specifies a read-only configuration + for the volume. Defaults to false (read/write). + type: boolean + volumeClaimTemplate: + description: "Will be used to create a stand-alone + PVC to provision the volume. The pod in which + this EphemeralVolumeSource is embedded will + be the owner of the PVC, i.e. the PVC will + be deleted together with the pod. The name + of the PVC will be `-` + where `` is the name from the + `PodSpec.Volumes` array entry. Pod validation + will reject the pod if the concatenated name + is not valid for a PVC (for example, too long). + \n An existing PVC with that name that is + not owned by the pod will *not* be used for + the pod to avoid using an unrelated volume + by mistake. Starting the pod is then blocked + until the unrelated PVC is removed. If such + a pre-created PVC is meant to be used by the + pod, the PVC has to updated with an owner + reference to the pod once the pod exists. + Normally this should not be necessary, but + it may be useful when manually reconstructing + a broken cluster. \n This field is read-only + and no changes will be made by Kubernetes + to the PVC after it has been created. \n Required, + must not be nil." + properties: + metadata: + description: May contain labels and annotations + that will be copied into the PVC when + creating it. No other fields are allowed + and will be rejected during validation. + type: object + spec: + description: The specification for the PersistentVolumeClaim. + The entire content is copied unchanged + into the PVC that gets created from this + template. The same fields as in a PersistentVolumeClaim + are also valid here. + properties: + accessModes: + description: 'AccessModes contains the + desired access modes the volume should + have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'This field can be used + to specify either: * An existing VolumeSnapshot + object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) + * An existing custom resource that + implements data population (Alpha) + In order to use custom resource types + that implement data population, the + AnyVolumeDataSource feature gate must + be enabled. If the provisioner or + an external controller can support + the specified data source, it will + create a new volume based on the contents + of the specified data source.' + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any other + third-party types, APIGroup is + required. + type: string + kind: + description: Kind is the type of + resource being referenced + type: string + name: + description: Name is the name of + resource being referenced + type: string + required: + - kind + - name + type: object + resources: + description: 'Resources represents the + minimum resources the volume should + have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + limits: + 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: 'Limits describes the + maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + 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 amount of compute + resources required. If Requests + is omitted for a container, it + defaults to Limits if that is + explicitly specified, otherwise + to an implementation-defined value. + More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + type: object + selector: + description: A label query over volumes + to consider for binding. + 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 + storageClassName: + description: 'Name of the StorageClass + required by the claim. More info: + https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what + type of volume is required by the + claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: VolumeName is the binding + reference to the PersistentVolume + backing this claim. + type: string + type: object + required: + - spec + type: object + type: object fc: description: FC represents a Fibre Channel resource that is attached to a kubelet's host machine and @@ -5744,13 +6108,16 @@ spec: configmaps, and downward API properties: defaultMode: - description: Mode bits to use on created files - by default. Must be a value between 0 and - 0777. Directories within the path are not - affected by this setting. This might be in - conflict with other options that affect the - file mode, like fsGroup, and the result can - be other mode bits set. + description: Mode bits used to set permissions + on created files by default. Must be an octal + value between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Directories within the + path are not affected by this setting. This + might be in conflict with other options that + affect the file mode, like fsGroup, and the + result can be other mode bits set. format: int32 type: integer sources: @@ -5788,9 +6155,14 @@ spec: type: string mode: description: 'Optional: mode - bits to use on this file, - must be a value between 0 - and 0777. If not specified, + bits used to set permissions + on this file. Must be an octal + value between 0000 and 0777 + or a decimal value between + 0 and 511. YAML accepts both + octal and decimal values, + JSON requires decimal values + for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options @@ -5857,9 +6229,14 @@ spec: type: object mode: description: 'Optional: mode - bits to use on this file, - must be a value between 0 - and 0777. If not specified, + bits used to set permissions + on this file, must be an octal + value between 0000 and 0777 + or a decimal value between + 0 and 511. YAML accepts both + octal and decimal values, + JSON requires decimal values + for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options @@ -5942,9 +6319,14 @@ spec: type: string mode: description: 'Optional: mode - bits to use on this file, - must be a value between 0 - and 0777. If not specified, + bits used to set permissions + on this file. Must be an octal + value between 0000 and 0777 + or a decimal value between + 0 and 511. YAML accepts both + octal and decimal values, + JSON requires decimal values + for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options @@ -6016,8 +6398,6 @@ spec: type: object type: object type: array - required: - - sources type: object quobyte: description: Quobyte represents a Quobyte mount @@ -6184,13 +6564,17 @@ spec: populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' properties: defaultMode: - description: 'Optional: mode bits to use on - created files by default. Must be a value - between 0 and 0777. Defaults to 0644. Directories - within the path are not affected by this setting. - This might be in conflict with other options - that affect the file mode, like fsGroup, and - the result can be other mode bits set.' + description: 'Optional: mode bits used to set + permissions on created files by default. Must + be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires + decimal values for mode bits. Defaults to + 0644. Directories within the path are not + affected by this setting. This might be in + conflict with other options that affect the + file mode, like fsGroup, and the result can + be other mode bits set.' format: int32 type: integer items: @@ -6213,12 +6597,16 @@ spec: description: The key to project. type: string mode: - description: 'Optional: mode bits to use - on this file, must be a value between - 0 and 0777. If not specified, the volume - defaultMode will be used. This might - be in conflict with other options that - affect the file mode, like fsGroup, + description: 'Optional: mode bits used + to set permissions on this file. Must + be an octal value between 0000 and 0777 + or a decimal value between 0 and 511. + YAML accepts both octal and decimal + values, JSON requires decimal values + for mode bits. If not specified, the + volume defaultMode will be used. This + might be in conflict with other options + that affect the file mode, like fsGroup, and the result can be other mode bits set.' format: int32 @@ -6364,8 +6752,13 @@ spec: properties: authenticationRef: description: ScaledObjectAuthRef points to the TriggerAuthentication - object that is used to authenticate the scaler with the environment + or ClusterTriggerAuthentication object that is used to authenticate + the scaler with the environment properties: + kind: + description: Kind of the resource being referred to. Defaults + to TriggerAuthentication. + type: string name: type: string required: diff --git a/keda/crds/scaledobjects.keda.sh.yaml b/keda/crds/scaledobjects.keda.sh.yaml index e82da5e7..8677fa3e 100644 --- a/keda/crds/scaledobjects.keda.sh.yaml +++ b/keda/crds/scaledobjects.keda.sh.yaml @@ -23,6 +23,12 @@ spec: - jsonPath: .spec.scaleTargetRef.name name: ScaleTargetName type: string + - jsonPath: .spec.minReplicaCount + name: Min + type: integer + - jsonPath: .spec.maxReplicaCount + name: Max + type: integer - jsonPath: .spec.triggers[*].type name: Triggers type: string @@ -185,63 +191,6 @@ spec: type: integer type: object type: object - resourceMetrics: - items: - description: ResourceMetricSource indicates how to scale - on a resource metric known to Kubernetes, as specified - in requests and limits, describing each pod in the current - scale target (e.g. CPU or memory). The values will be - averaged together before being compared to the target. Such - metrics are built in to Kubernetes, and have special scaling - options on top of those available to normal per-pod metrics - using the "pods" source. Only one "target" type should - be set. - properties: - name: - description: name is the name of the resource in question. - type: string - target: - description: target specifies the target value for the - given metric - properties: - averageUtilization: - description: averageUtilization is the target value - of the average of the resource metric across all - relevant pods, represented as a percentage of - the requested value of the resource for the pods. - Currently only valid for Resource metric source - type - format: int32 - type: integer - averageValue: - anyOf: - - type: integer - - type: string - description: averageValue is the target value of - the average of the metric across all relevant - pods (as a quantity) - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: - description: type represents whether the metric - type is Utilization, Value, or AverageValue - type: string - value: - anyOf: - - type: integer - - type: string - description: value is the target value of the metric - (as a quantity). - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - required: - - type - type: object - required: - - name - - target - type: object - type: array type: object restoreToOriginalReplicaCount: type: boolean @@ -279,8 +228,13 @@ spec: properties: authenticationRef: description: ScaledObjectAuthRef points to the TriggerAuthentication - object that is used to authenticate the scaler with the environment + or ClusterTriggerAuthentication object that is used to authenticate + the scaler with the environment properties: + kind: + description: Kind of the resource being referred to. Defaults + to TriggerAuthentication. + type: string name: type: string required: @@ -340,6 +294,10 @@ spec: originalReplicaCount: format: int32 type: integer + resourceMetricNames: + items: + type: string + type: array scaleTargetGVKR: description: GroupVersionKindResource provides unified structure for schema.GroupVersionKind and Resource @@ -373,4 +331,4 @@ status: kind: "" plural: "" conditions: [] - storedVersions: [] + storedVersions: [] \ No newline at end of file diff --git a/keda/crds/triggerauthentications.keda.sh.yaml b/keda/crds/triggerauthentications.keda.sh.yaml index 699d7ab3..e11ef72f 100644 --- a/keda/crds/triggerauthentications.keda.sh.yaml +++ b/keda/crds/triggerauthentications.keda.sh.yaml @@ -147,4 +147,4 @@ status: kind: "" plural: "" conditions: [] - storedVersions: [] + storedVersions: [] \ No newline at end of file