From 34bdead49a9643c39f4fe2efad928224cd11381c Mon Sep 17 00:00:00 2001 From: OpenTelekomCloud Proposal Bot Date: Tue, 11 Oct 2022 12:42:40 +0000 Subject: [PATCH] Update content --- .../images/en-us_image_0000001121602072.png | Bin 0 -> 52145 bytes .../_static/images/en-us_image_0203982368.png | Bin 0 -> 32436 bytes .../_static/images/en-us_image_0203982464.png | Bin 0 -> 75682 bytes .../_static/images/en-us_image_0203982493.png | Bin 0 -> 32436 bytes .../_static/images/en-us_image_0227096557.png | Bin 0 -> 12797 bytes .../_static/images/en-us_image_0233731004.png | Bin 0 -> 60158 bytes .../_static/images/en-us_image_0233731209.png | Bin 0 -> 4713 bytes .../_static/images/en-us_image_0233732535.png | Bin 0 -> 12188 bytes .../_static/images/en-us_image_0233732613.png | Bin 0 -> 16394 bytes .../_static/images/en-us_image_0279177365.png | Bin 0 -> 8104 bytes api-ref/source/api_usage_guidelines.rst | 41 + .../deleting_an_add-on_instance.rst | 85 ++ .../source/apis/add-on_management/index.rst | 24 + .../installing_an_add-on_instance.rst | 344 ++++++ .../listing_add-on_instances.rst | 290 +++++ .../reading_add-on_templates.rst | 373 ++++++ .../reading_an_add-on_instance.rst | 257 +++++ .../updating_an_add-on_instance.rst | 334 ++++++ .../source/apis/api_version_query/index.rst | 16 + .../querying_all_api_versions.rst | 105 ++ .../querying_information_about_api_v3.rst | 77 ++ .../cluster_management/creating_a_cluster.rst | 791 +++++++++++++ .../cluster_management/creating_a_node.rst | 1002 +++++++++++++++++ .../creating_a_node_pool.rst | 882 +++++++++++++++ .../cluster_management/deleting_a_node.rst | 199 ++++ .../deleting_a_node_pool.rst | 737 ++++++++++++ .../deleting_a_specified_cluster.rst | 443 ++++++++ .../hibernating_a_cluster.rst | 77 ++ .../source/apis/cluster_management/index.rst | 56 + ..._all_node_pools_in_a_specified_cluster.rst | 663 +++++++++++ .../listing_all_nodes_in_a_cluster.rst | 153 +++ ...isting_clusters_in_a_specified_project.rst | 174 +++ ...ess_information_of_a_specified_cluster.rst | 186 +++ .../obtaining_cluster_certificates.rst | 241 ++++ ...aining_cluster_certificates_deprecated.rst | 216 ++++ .../querying_a_specified_node_pool.rst | 609 ++++++++++ ...ess_information_of_a_specified_cluster.rst | 159 +++ .../reading_a_specified_cluster.rst | 387 +++++++ .../reading_a_specified_node.rst | 410 +++++++ .../reading_job_progress.rst | 228 ++++ .../updating_a_specified_cluster.rst | 255 +++++ .../updating_a_specified_node.rst | 165 +++ .../updating_a_specified_node_pool.rst | 369 ++++++ .../waking_up_a_cluster.rst | 72 ++ api-ref/source/apis/index.rst | 20 + .../source/apis/quota_management/index.rst | 14 + .../querying_resource_quotas.rst | 113 ++ api-ref/source/appendix/api_permissions.rst | 48 + .../source/appendix/creating_a_key_pair.rst | 30 + .../appendix/creating_a_vpc_and_subnet.rst | 45 + api-ref/source/appendix/error_codes.rst | 115 ++ ...ow_to_obtain_parameters_in_the_api_uri.rst | 66 ++ .../appendix/how_to_use_elb_in_a_cluster.rst | 140 +++ api-ref/source/appendix/index.rst | 34 + .../appendix/obtaining_a_project_id.rst | 59 + .../appendix/obtaining_the_account_id.rst | 21 + ...h_request_method_operation_description.rst | 57 + ...patch_request_method_operation_example.rst | 279 +++++ api-ref/source/appendix/status_code.rst | 120 ++ api-ref/source/change_history.rst | 166 +++ api-ref/source/index.rst | 9 + api-ref/source/kubernetes_apis/index.rst | 14 + api-ref/source/kubernetes_apis/overview.rst | 67 ++ ...issions_policies_and_supported_actions.rst | 125 ++ 64 files changed, 11962 insertions(+) create mode 100644 api-ref/source/_static/images/en-us_image_0000001121602072.png create mode 100644 api-ref/source/_static/images/en-us_image_0203982368.png create mode 100644 api-ref/source/_static/images/en-us_image_0203982464.png create mode 100644 api-ref/source/_static/images/en-us_image_0203982493.png create mode 100644 api-ref/source/_static/images/en-us_image_0227096557.png create mode 100644 api-ref/source/_static/images/en-us_image_0233731004.png create mode 100644 api-ref/source/_static/images/en-us_image_0233731209.png create mode 100644 api-ref/source/_static/images/en-us_image_0233732535.png create mode 100644 api-ref/source/_static/images/en-us_image_0233732613.png create mode 100644 api-ref/source/_static/images/en-us_image_0279177365.png create mode 100644 api-ref/source/api_usage_guidelines.rst create mode 100644 api-ref/source/apis/add-on_management/deleting_an_add-on_instance.rst create mode 100644 api-ref/source/apis/add-on_management/index.rst create mode 100644 api-ref/source/apis/add-on_management/installing_an_add-on_instance.rst create mode 100644 api-ref/source/apis/add-on_management/listing_add-on_instances.rst create mode 100644 api-ref/source/apis/add-on_management/reading_add-on_templates.rst create mode 100644 api-ref/source/apis/add-on_management/reading_an_add-on_instance.rst create mode 100644 api-ref/source/apis/add-on_management/updating_an_add-on_instance.rst create mode 100644 api-ref/source/apis/api_version_query/index.rst create mode 100644 api-ref/source/apis/api_version_query/querying_all_api_versions.rst create mode 100644 api-ref/source/apis/api_version_query/querying_information_about_api_v3.rst create mode 100644 api-ref/source/apis/cluster_management/creating_a_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/creating_a_node.rst create mode 100644 api-ref/source/apis/cluster_management/creating_a_node_pool.rst create mode 100644 api-ref/source/apis/cluster_management/deleting_a_node.rst create mode 100644 api-ref/source/apis/cluster_management/deleting_a_node_pool.rst create mode 100644 api-ref/source/apis/cluster_management/deleting_a_specified_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/hibernating_a_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/index.rst create mode 100644 api-ref/source/apis/cluster_management/listing_all_node_pools_in_a_specified_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/listing_all_nodes_in_a_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/listing_clusters_in_a_specified_project.rst create mode 100644 api-ref/source/apis/cluster_management/modifying_the_access_information_of_a_specified_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/obtaining_cluster_certificates.rst create mode 100644 api-ref/source/apis/cluster_management/obtaining_cluster_certificates_deprecated.rst create mode 100644 api-ref/source/apis/cluster_management/querying_a_specified_node_pool.rst create mode 100644 api-ref/source/apis/cluster_management/querying_the_access_information_of_a_specified_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/reading_a_specified_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/reading_a_specified_node.rst create mode 100644 api-ref/source/apis/cluster_management/reading_job_progress.rst create mode 100644 api-ref/source/apis/cluster_management/updating_a_specified_cluster.rst create mode 100644 api-ref/source/apis/cluster_management/updating_a_specified_node.rst create mode 100644 api-ref/source/apis/cluster_management/updating_a_specified_node_pool.rst create mode 100644 api-ref/source/apis/cluster_management/waking_up_a_cluster.rst create mode 100644 api-ref/source/apis/index.rst create mode 100644 api-ref/source/apis/quota_management/index.rst create mode 100644 api-ref/source/apis/quota_management/querying_resource_quotas.rst create mode 100644 api-ref/source/appendix/api_permissions.rst create mode 100644 api-ref/source/appendix/creating_a_key_pair.rst create mode 100644 api-ref/source/appendix/creating_a_vpc_and_subnet.rst create mode 100644 api-ref/source/appendix/error_codes.rst create mode 100644 api-ref/source/appendix/how_to_obtain_parameters_in_the_api_uri.rst create mode 100644 api-ref/source/appendix/how_to_use_elb_in_a_cluster.rst create mode 100644 api-ref/source/appendix/index.rst create mode 100644 api-ref/source/appendix/obtaining_a_project_id.rst create mode 100644 api-ref/source/appendix/obtaining_the_account_id.rst create mode 100644 api-ref/source/appendix/patch_request_method_operation_description.rst create mode 100644 api-ref/source/appendix/patch_request_method_operation_example.rst create mode 100644 api-ref/source/appendix/status_code.rst create mode 100644 api-ref/source/change_history.rst create mode 100644 api-ref/source/kubernetes_apis/index.rst create mode 100644 api-ref/source/kubernetes_apis/overview.rst create mode 100644 api-ref/source/permissions_policies_and_supported_actions.rst diff --git a/api-ref/source/_static/images/en-us_image_0000001121602072.png b/api-ref/source/_static/images/en-us_image_0000001121602072.png new file mode 100644 index 0000000000000000000000000000000000000000..a5aa2e92f4c2b913da61421970bcf3a10c03167d GIT binary patch literal 52145 zcmeFZcT|(j_6BOfiUmY^6-87KM5IGdR8Rp?kzOK1iu58iBv?R7fT;AYB3LLf1VSfB zNstz)0YZ~VCqRG%NFg_V=X|GlTuv zFxz_(GPae;rd7nSA2bL(ICNpJ(C)aM*d3rJO27TSu zH#S(7a&#BZlO0@AJ9h5ByyHJV%3f~Rb3w3vRd$ka;CRaM|NX(Q$L`S=B)5$-cTVpT zniM>_`#+!mSF01J_A@6?7=5N@%&pg4f9Q$lNyD>-Ovy0kWi)!|3TyGuyl zF-cIefDfMdpW*)MPW6Bk)N|57_RoDN@m*$WPS5jd{aJi^XEVZBdokiqw%}2B-W3hR z+3Gk({ZTx4>d9t#OjP#2bp9_(;*54s7Sak07XK{Hp-R7^SeL6TgB~*nrANiyB%gr4WcfO-qf1btvFDAKx!naBBX5XZ@=Wg|{ z1IM=bx50*oE-rUuhyQK7zgNS`3P%@-`n}h7JO#@H@!wN85?hlSvi* z=k}@nQqU7notUS$U;n1RIY(0b#6g+scI1vp!AZiWIH%R$_6r}rU9z&!I!$m&PF?sb zd&yfQu;APlN^s813(+1$1D1ia6~@9-?9;xsbg@J)?X?>l_xI)ot$7?H77ES{p^dq3WkszYMKybGS zPjvdxe-PLJ%dMz!sCsuhiF+q<*YEyzRBxiJ86huF$Cj=OW`|U7jy=^jd(bnryJkED z1&%ub1LDWS>v^gM(94~NDej8zaNipu)1tQICoPV@i;brCB60lU(+Kf;nr` zP1=t|+c2%BL+Mdv$FZ?1`9v3J4XdJMQmHRj=ywAL?2?s%)@`qZgl_*>NYZVRFSvWB z?OlB55pc5oPhk_zn+mHnns#j)sOo33Kux3?FBoMVOaUK>)*Dq{*L zI@GI+Ki0x+^zb8i+lY(EHWwe`W(50nq(Zhhtqbv9KH7=*e7Ne54(G^DNQXxUs8;vx z;*UZTuHRfh%13X~Lcqhes7?BH^u@wS!pcVwf1vG~QXH4v!_SO1QkXINP*0pa^ zc;O9NkkVIK-dPaNJG58#Ix|+8lx3QGUM)80buKo=v%Q)cR3MRCauoT6PTTJhqr8DZ zL<39-%wJeA+D!Uk7 z=P8Iu(aVN8+pQGFlnKo*s&wK~uKOg7ScTPaNto{!aptt_o8>9$>_4Q{u-C)WdGI^U zVJ-gMAkW3Z-=}e92iNUuOzVTHX9FAzT+TRQue2W9>EiKW(!#P!zx0ALoEbl9YU|zj zN}z&TEPDMRx00*JuyZfwXEDIPbt`g%)`b)!tv#kVbZRVhQb7h_L60vE3w% zLH3DBi+FN6%)yMO2x&b6;Olgx21Os}Jy*cL^Lyk4ZwqqG;hWhl6($q)5!p?PT@jyH z%gj=o*aEoLNZuyevU^GIjxxm~Olh0QTbtBQM5s#qwjE!7aLVV{Bq5{qA?npU_fWgv zc5%PzzY`bnX4NptSlgy{qJIB1MSHWm?qSF8aG_|h*9e6k|8U>h zPD^4mj$B?jlAB7qKq>67U2rtZs^SMNH|D@>BfqXuQcotEwBtyVYj5{|6k4OD=H2LL z67ym;QSR?a%j+T$7t^bp;CiuV%(=dJeb5m&3&~(tlocB^9sAwgw2wbcZp7Q7Iqme`u?K&K|fSE&7`pI8Ms3puV8r$D^M1cXQ8S*RKBdGoDH{j#V~Z2sH5o zi*aqQxzELKC%B8sJ1pIg^fb&sJl>k? z7&6mL-BvcwCuBaZ(lVSGWpxbJd9`odUaR3gfPD>|`e zQJ#eKzgCbdCl?htC?MrC%(Z$QDiGM% z0zIe356GO~=nC?5HsgD`s8`-q>85w5PIxGpM$s=A`6-Y&Gxz!6>C_PHlg`f~*NQ%| z-U^uA5O#5&i#M@PaBTc}x;-MbeZ2ttp06U#upQ4b@fa+r91UZ{ALP`oXqH$kOm0o#mCV0&(}7tZ zvI(_QOGY|0ayp+t#n52BJdKV-PAFyV7I80r-jW*Wzad`blnDsDYTQR_sfsrfC+@lF zM8Aj^I3M^d{*~F3`n1D>B8l?m5Od`2aDRHS8`0%+0`(CQOg_&=mQ%UNaHsYHI=zfP zLYkGv=I>fLD`}t<#6UzDqH~{fZAg4*P4c!zSLp5UNO7zuVBE4s{$YEZW2f&=N9EX~ zq_mTG`A#-=>ydd-`>}b+q|5o-_Q!M3D3S8ut^s_q06fS05*(RZda&Mn z{vGc9&iNT^`Z!=4R9hHQgawryEWJRobhk=XTuC`Y?uI*H&L4%L!887nV;NczId{ z?VvkT6o=P$723YsI(!#1xFF~>g+P?ZYAL z2f^B2hPrtFMVE#6r<*HuC!$9EwAN~QMzC0bSU{lR-R2GI%R(Jp+4RFYsz*K*a?88| zw^mK3t!4KY=ZZS&FlfgkD!Jgw<4Y$E;2M5qY5NkOO9P7sy(>iCh7Ycy_oL*4Gs_4e1Y@O$=(QKP4Zxph6N}TL^e*P2YS>6sg$SASp-`E>Ny* zi(IuwL+vXxm$Vg}kY3?mDjVg9)^Roq=cwEe{}D|INC+wTFs_rw!g7=c^Z6z9>xO?6 zzGt7+_lvxr<->o#0dgs2cKijyprn9NB2*dnK*8vd7%C8x#X+`e=Kao5Zj;l$Pm!@u z5sap@FeiL9kU0nR(VP0l$u<%xz)*wc6B4kwSMx+Av65`F#$s>vLSPoKyogz zM(8C;T;t{uo$b=QggnUHL)bCIuw+;eIKM7upQa#EW%!5}!81)#7`Tx2Le#Ko2wxIf ztJwt_4ZYz`l#wj9TRIaa4V+VM?qhkLf5d)enqZosrt^U-(d}wb9I>VTXCnBFuH8Uw z=csEj>*=NDtmoPC^5y=RWnEdI8Bl)0M15oUl*`t@5TuQ*^I}!RGFNdE2sFs?W^#$ z8lK(yT&{$uM^q4OqnH_(F@*ft-gr`f@C{~OI=Wr~3Q@#2-h12TY(BTBsP@{kBjWSj zC%4WP58c^$KL24o(F4(4-$Cnvo`zB(QMl!hm0#G^gfk}`d12%2dDPGC3Vf@+|0-!u zHB5lzh#0#O$6DMQR?8#iQwFoaT%e{aQ=UOYQpYB0hA5L4fF4K4ej_>`Mtmz*R76>n zBI)-bwpVR7YUsji1nqVG4?&88^`?~DR#QiQ=v8kXU&^ZLBIio5_=Kj56p*lu_zN-H|ESABldayq|!g>JIi@y;+o z2KP9?E1ZRg*4B@fj7`L;-Sy4lQp`w|5313xWPj1~B4rJ`)H}q2PT^dP>W37bP7LpINuV@mnjX_O@M}iITW`4{r31WP7({v8co=f2?uX zf^SA0dQ>*9sA&v*-H@-S7_?X@#;pXGd}h%6 z=0b`H6=mJF)*cd2mRN;*G1)c)=ji;|Hzxi%_z__vIaq&y!YB}mr!3BWDEES@%{!8( zvSb1>w#=Y1)tSvFzxaJ48hxy-8#JY~BTha>r}tmMAZ#RTC?Cl}&qKUs-UKtP+ObaU z^~3Vyl-f(|{JdB7ZU6y2#0BZ9~P=SzcofBC}cU%sFh5BTK^?XWo?2N8t_R7da1 z?gJWd!DkLG$1h;HYXTjrox+_Jx1BBlBN!(otICVp4~LHpc-v1isCr|=XwjETx)pPR z>-CWH>~eA_@1pAb3;=Mf*Bo#@9QlE~57A_7RKyrW7sJRGU+Am8{($aO!Bj5lB}4-| z(Tc9Rh_@G3oHbt{5?z)twIRz4KXH7o8Gqg4^w8uo=nGu@Tgck<7n=$hjU)G076bj| zgiVH_7gS0Tv>!v9G2`noy2VWsHN-?3h)1M`Y~yZ&hAaJ~F1a{_;Wy(|?rJHqy)209 z#i2)DZSIo@^_L_YN~+A0Le+sGbp`_9mdLMxwstUw5&MD8jhDHl-A>{a)Bdw+Gd--m zHcGQPRC2tsH~-toP>FprkHVH8EEiMla*l?E={S?MYyf53pz#3UJwct*kVF0cp!J$S zfUY)N!X)kz{aYAI>p|Ih+yqY$XK@c2Ks?E!^Qyz%Bp>37P*@062f}#J9!6V!K6aIO z;JJI)On?okM}kt=S>FQ%v{Sx)z%-Ub`_62oNF2O>DIQLnBx8_t=UU-Y!{bY~A-PID)^Vc<<-%UPyXO0jD975t_* z!ErC5kakW2}CceE~H}sr5R%5l+Ixmh? z55ZNsL1h#bB1FL03*?LNBv@OE3X5)C?+*}DVWi~sh4+^<4t|WHBkW2QH$>s0oKMNcsW=9NCv*jSFD#fuZt!bZ7gz9AE9sQM$N*BeD`wd-nN|uet^S`{hOX z-PYHm^cxPhK4B1Yw6n@ZV?7-R$TG7Bcgcd3DrWVoVB@oovvQYqNS~HkNjoqYSpYnB z>&?{U`ElFU&S>Du0^(kO=DTq>_zbyK!`kxTs*kK(Jf*7gts0v(n`SjZNd* zVPS=%LK#QlbsKOs_mCPKIq)>3sAd|d7%K?Zj+UGw!F9?+-x~u&Owwb1N?)luvyAbo zc!a~@K=e_mzEm|a*r0I?-b$&fM1;s`vcG%!Smxb91a-jeSsh@RfESl8<;y6bcbb4+l!sL#FQWC>2GNbSRL ziL&2ajDGgo8VKutY2Y5o&2!yZgBVK%u36L$unX;qaSsah&tX(WuBSdg(WqIPz)vQb zUrlilKi@NlDTx@<7rqVv6)3X1%HVWo4rK{vgHC27rBRv3mE{6uXRdgw!n!xo6Y1)d zQ@JmLq7AMYl$#OD{C!6WYtgI$T+=N()vow#@1r+ZZbsF1Z~`^By3^;#5mZQ2b;3-r zMi6Z$b+LZ<5L7YW=UMk!)UF|mdI;R=$M zNzIAv3FQc@h$32HJXPr{tuYkb;j`8H25@gPQkR}kcW9h$}*H*QYft%Xp9XXDGDQwaBOC8m{U@t#O zo62VY`&!qK%b@DRog$IL!1-auQH^2gwSs_r+?}Z zT*O)U67EjX-2b%ke_Ll_;8#SC=h^+|w&BSfPXHAk^8Fpz`^Qj6GC1O5UdP{{$$#oG zf#ekDLW`15C_LRfAon*H;CDRnuVMe+#Q(wV{y&=d;1Mn;lNkQ`FD#dp8U&rPW={dC z6#u6-yJOeC>-6eR8jK?p1>5|9{{#B&;QDuc+God3!BQ`J$P@02zgN<~6_q&8aeD(B zkzLOlMtLerW~r&{CbqByd_=OPqQ_z!qE=V4xeS|gA0O{!`;)*Hn<12dNU1|Nrv z(XDObhfp^?5ccm~@HzP|E`&qFbh83NYy@`W%7iAT1XvGX=fQh{+i;e+0|QhY`5(&|7pw{l+J6q&vA7xXAQTG-k{17fGA6b#y zET&3Uq#{dy*8Xt0G*p>4B%OKi2p7tKYl%84N zhOJLR1hbAveb#%eAo)EYoR1$vs~Gd}ok0e8TQNhox7Q+D%h7ckwpMyf>z!*CGR>Iu zLiQYMogTi0Y3xuKUv9KWSY>aKFs{1>w?A$~1I;YA=Dn#y4jjCaA5%X->$kc$T{h^c z+y-r*HYpdrZwju;-72hqY;HxHLiIid)34BnF`vod3x%q%;ugWzsewZYM4`yM)3cA5 zK;!Yx^?BY5} zeg;8X8qqtfF1tO$&l-6DjDif~xprf|DMB(D3dno;)U4`s@1D(ne3Igvb3NLB?B|UN zuecadiYOM8SNh{ac~w_qM($UA34}t)k(whm{gu3!BOrabzjv>MR}D8~fC$~NoSg7Y z%_;l^n@7hJO4UKArc!lkQHNI>3gcD-8yQC*mCnFNv@wPkOEvQrin?CADd)G*yj=bo zbax(rQ?`CfmY2lmwIsiev2aoBS^EYEO4ThMjS`%T#6Ll056!?H%0Ha8@Urm>buP*j zhkaTEJ8-^8ojye=ua_T@+bLL4x@A89gjh~xMYc)%$GvO`!Yp$qyzCZnkIwC2yvho`OAoO}sZu2ye8 zk`>lER5Bk;qtLOE+2sQ+Mg74FrL(f=*VxzOL%!{CZ?1cI;as+gn&}3 zfvHpP8izl;OZrTyd1L0EsS{|`jIf{}JF;*?g%UPUpWbU<)5oQ|_IQ0o%p50a(eq|* z9P^>b>9(c0Je~?a_r&u6uxfcbT+{y}e#vbYL8|(_{DrDnM@Q3Ka(_fdq$zJXZOEVK zcyhl^2pD$a;Pp>kyZnFLFggV5!B5U_m^}?uiv+~DMAsIp z?nSA)hkGV!-Ku*h^wC%4Xi)X{h?rt4g)36gaD8khJE0k5T-*0{^0KGmIUds&WrD>u!weUu&wcDlor z&f`LL@vR#4bG3cDs-rOV+NgE`>6&Vvd7ta5An0>A;%RxI?+bvL&>^PY5ku$#Q|?0p z26jtl$@)Wj?gfCKR&Kx`ct)lZ7ty0?9{YXn8Sz~<&N-~wv-9kRua`pU+1#PZm~P}R zSmGb)M?z-9Tr|*X#P{vTgBHfKcYmBA$Z>0pnQsi0a;qS-59p4`4xV|Iz^!}s(?ou| zbnqv9F$E>;!vD4`9%mLQ%eOpSbe^KS$>FtRDWz68K{a7r#E=c=@D76kLRA$%U^(*% z47lZgyrF&r18o_jB!h%p!a^`CiulDf!)77=`;RsHhi)jWr+t@p%)rkM^JEH0-#a{p zX5@j%%D79|`V*6B!1$Td%9v@f0aCB9orZ9{3D?(C@ww1d-w7ci?cSbJ!YeGf zX1SeM|Aaz^X1z8gsa;G_CB;>@RD;J#U-^I51JdRklY`3fJ>z>yUN&9uY9y7|l&3(D z3G;@j1UI2wPJ8|pNW^5GCh}t1ir#PEun)dl6Rl(}!yorJS7GKwkC)r{wSv3%?|n5) z&9_4@DCfO!06lxHTacz}=hHj*Fyw^7xB4^YG3*!$Xif29DAR zFt_?{fSFO7C^o>`7H!g!b0SAdXbxc4EI(x&y#lhr#$5Lpw*4xRQ zCe*p|yE!^*hjn4T6#!Z(zM*8b+w$2Lfo5%C8=VU&|2lCr+~iT`rO3flwr6t*`P}Lx zg!ca4F8(h1?-UTlWRHfDW}z5T9^WJuHzptLu? z-R%sGUoLlpPp7}>mDDIBQz@-d=INJzE?4$^J~Ww%Rwj;pD07Dge17@9eW>i9p(v#o zW+XRBxR6;q<)XysK3hCOgB4SO5;IM6tB~b#XM(G7Q2UJ&S3;C(khc}AN zP5HohZ8Dmg3VC7WCCzXYS0<&aSAMm(E#3d`?dDYjhm0e=xh{Pi`Ki;@ZPIe6-djI; z=&r*zt`FNc-XG9aHN17Lxaa2BTE1Qy8s=!nN79qnhkfK*wPL}zkDQ}Vreb7^Fdg!^3ONh1nS}-7xRZ!25@4 zQ0Qxt{7)J?5cK^I%c(8n>=c$X$sR21#9tsU0b!?lZ3vc&($8@@0on8JXW6Si*Rz4c z?239P#kP&~2iLRO;n$!_5c0-UwzFAus2YPfc>#O=*Stss@ly3_&RHjC9D0_j#B!t$ z8vqS~9?&+Untt`Vf=1;{n{1^Z2Ga9c{Mh%X4UOvzJEJxtESRTxUj^u06t}JP#Y(AD zyY6nhd3Gh+E?*fFHUzwe(a8I3*&m#D!7MC!5EM3LXQe_rJ+>a^scP1W;5Jv5+|E&q zzkZ#MC{fvYEpaj2SbdJ7xJQV$RC88JBE^9D8UGRytA(=0sS~+ZlH&(6krX5!Exq9< zT4q*rtN>bM_3052VYjeaojWvGxOi=%v^u2tMX=FJs;{`;EY%9}K(L)#2v zPPLw`Sjx?3$V@mA7L~alpvcu^XkL>hm+JnA%*T&hh_D?GpFPzrnL(8_f}YpqmS^ku zxkyLrDyRxREafL-z#;t-${h?N+Y7{*xz#C!s*m@%Vo;?edXYq;XiY5N^d~&i?`jn3%sFfwtINS7T=qUC6WELt95=BEbECf#igM9zAYMfu2TpzBpJS3wV!`1!0F6S z3ss$M+vl*tZPz?}bRrP!0k?_WR}Or98IU-&@36$oucO)RXAQ$0m5DbJPW^i)%i|QGsk4UHp72zPKgBT9fumYA z?#9R4AzSeQWmX3(VNS^*zY;3 zwV|*6qUkR`qR|3VZS8BTPs0C+5;@;aU2YCbC|8CC(ByU4D=$u|sM^&hsw@2ut)7FN zo67jyn&-zz7G0m0pV$&=#San3y8fOa0==fPHS{VmT&5fzPCe@RP}#+JP<0v z{);fbxe^kehaWyS*F{1J+x@~7cxtfs7Ms(7&%N{?Kr|B53Yhb}qSR>H}C5P_j4IzF>4Hq&njob$V(^K>OY; zH=ER64hyhQr7|rfhimP7rXEx6!07~dAq;gKI~HI(rkSI2gsh$phw11rmPEx&RHws? zM&5)6Z3m~CyNAneP5W|iFND9PRq+~SGX)QHIF#z&SUx#s>Nr)@4z4y1TtI?1d&55uEGKPJ9+x;gp$hgY7?0s!PYku<6Zx(_oa`Tqu z;58*q(Wda3q{m^?PBnlLy8_+1&Y*Q2?D%9|IlT3RRQ2=Z{$)Q{jSqlLKWpoc$YmVC z2DdM7tDZg*D1>9FRErPZFQH69+u_A(6%sZ3UMO91&r)SBKup|omo_Yg8^hcSO>Qvf z;Xj?a-ybkAi#scA#Q)gn=ec&W5`gdFXUm7}aEzSq5q z@{<-PZ+ow_9jLbZIXcfhyM8-?F5{C&LDBalT8R%Cx40=py^bN}g@2M54tEV&2;K`O zeHNGV#^@Icc7VbRYU`~THre4~HzZsLe3*-Cfkz%Idy|yoe$)sin`;2IDuNg7YZ!0E zvus;Ms3<)cC3PiFd^LE#x4N=UC+PYfk5^*Ug z2<(0Fv{%oJKCekVp-~d+{cznm`^dKt==ho?cDQrZej(r6$P4CuG!4I+4C^G8%{TuU+W^f0d zcY0xF58aHKmkYkjQVzYU=tz<7+VOt9}or!@njDy-LBAT(I(S$CH#Hn{D(nezcoB?Qi!0WhJ7VG12V7_%^Y5G%89W~7-}%U79_NbEqGll(eE0#?Y!ld zpd%PRC!g$pGp0~-?J9r}XNa5j7@DM!+C4Uu5K2L+SG5bn-3OVk0mBd(F~$)63czx z-ZV~e2|-t4>8|pAS=Njejncl_T*B!t6=!5cpl!M&f)RxgM7)C3CMeNq^U#!KW{s0X zc!I-S_D#3yn~?d%84b1Nv)dM35Q&YgMO&wkc9oC*Lhd46Gn1wzZ!bY5*P?vBFdH@U zfRaWGa9n~E?lY;e0-l?a2vj6wtKb)am}*MnyYL`_dq)QRqE+9e3So_zk;UqhV;jfy zL%jy`+u^tmPOB7vu1QE4oVxbD8KEF`xU!=8?G@WcsHD=ET72XsMqfHmdMP?SveoP= zlKj;i+Mz@|17}hP)vk%P=jm3bgHTYLEe=>hV}8EFK@NE_!-p!Rx?-f#e7Crl<1<%Y z`6UfmzkbdgDUvC#7~EDrjbHTk;bWWl`3CNixKftL2zKn0tq5K9^7NY-=`xw`!74T~ zryFk+D*)j;mW*+;u#DnNMMaVbb9dcjHDOM7<2$!vbUrzlsee=XpSeNM-m8#B#57 zdM-cogn>hWZ;I&lP-WInWh&oRR3&cBPRJr3h=})5+LkaaUoJ;#haEyl^4XBiEt{s) zi&d5h#fE$Hb>;sU><_zTJ7%!(g`d!>Py#NQ$6aq5+LA`g1q6DzRh6x+g;YJI1}>q> z2-?z7ZddU#Z|$K)pT~nukHPz071ynGrrmNc=(|f4r^t;v2?Wh8tH8F5=jWi8DtTYJ>T$h>VIJxIG-Y%qymW|EZved#~35si&Y3WlZSvZg#YtM=_Jx{kVh;uf zT)kgIRu{X+UFguUo@Qg)cBc6q>EU>}K3sRx9#n>h6YvWqpq`CK_U`SI6txAo{wB%Aj>rRC1?5EJhz3kG+8f@u{%- zj|~9}Vfve!sl1qLm2FcOkuA;|@$ZuM>qs|P#`M2XFl5!(4Y|VdT$M|}j8e!sy~7l) zuQxX4{8Z(TB{m?E_||V~VOM4XS0e>(FW!|BI!_Cj8&|uXa_YrZ)|phL3Um&crnvol?JlvpNZZq@ zK7#qov9%=pz?67nUW1*q^cU(h#=Eq;_c;T5b4w)8Q`>^{Z4$0PFnp4+<%%-^RoA`|lm zz3#u`)EPoB@k)S|1wlI--{w&F`@Zt+Ig2j&G*E61q4nOtQIXWplM;&WvJ1PO+zULm z_2rDxEYhtw!cfTnq~W8AC_~+`KJSkFHJIm%1}8J-0wp)b%_v()gy}%X(s-Og63;HW1P%$E!ASq&%&{-*4Xtf zTiIsGHIB&HA2m_}OYqxM({{r&q?PImIsxessE-j@uJrygjzcb=(S8hGD-0~IieveB z955ZN=Y@e4ot-+|ayvS4hF%{T&z@HHOu{o6T5Zi;bYJTh#2qzE3QX)-rte69b`&FK zT+TtP(9_DkU9FkFD_?}I&&qq+S-w45-*P@7k-EmvHzK78sc-tCyG~)h6FoP@E-FG+ zd-sKkd2iq$vC)~tN0_gbCBy3C!wJMw>|&(?=Ozt1dX(yqnyV!TehwZ0DF+GIWEUos zUqrKPd(-1`B-xrA`en&u-ZQa4^yv6h{-jX}a`+2`)vcE~cPV5%*^^*p0odKvEFO+a zKJw-YvnO!6myr}m&UO|lRFFIt6#vNXp*1h&#gK<_94ZZ>Kls$Q%dZgrpahpcVyPe~ z)^s4ax#xB$1tw!F#rXD^;+l{nw&s@$6)$jDxLHB3NMtqU?6p|j0v-u4+1hmnsDkS@ zX+OVyM9^^os7YuwV7VTu7V|pYE_ko&JYz#K=|mg!tBaN+q=4xs1{1ljDgp{f!Zg&f zlKi7}gL*2W(!K}&4 z&kNg+nR*B=e9-Ak1%5PSj}$D+vA|v`lFPDtU7#~8M@ZuyvN7q-fFDT|)bn6!`mDE? zio(`BvfC;Ngo0Z+Wu~^L;Q?S#ipCGkjl4imxJ|F^g0BTLo)zKWu4psp>H<fONPqVUz(l!t0T(b-U>#za;jt zZ(VQ8_b#A+l7GX**kXu6>9UWmCN}R4PeNn|mRU4o)5Yt%m@M*$nIHb~`m|Ej>6ed( zH*U{z20^!pdX)*yod=ZHkBoVsYu&+i-t8H=z@r`Nt!W>}O-|(UAJIq&vrCiI5yRo! z*kU%*iMX+cVXidKA?%zF^cB*bY~2+wQWQ7kjC$wBLX~H+-`V`pOqkXG=L}WTma(7EcV= zn}pe+%LrvlPXTil;aA#t?$x*;=%5!86}lN)KVaK>>~q(K;tJ1G+)vgAy!v#|((L#l z@@H2ww~PDjC1wg?>$SdT97%3jd~Cirb$Wm9w4=reT4Jr~%R~#Uxx+wf zRANN{Au!ah&uPO{cj~>?;v--)l+wRZm|I`I{{me`9%`U_UX8pA{7C(&gMPH&7&Kd7 z8S)6Smv|!QtNjva*;1rls>OnRtWDHEypt$;P&U3Ph%qxz|D$oRCP`bS-ofan;`h;Z zrbSt~Vq=T06f|#kINXKuRxsCq;CgkBlJp!W0gdC>RNxTj zTNr+>@*eVxayRL8T$NA|PwKwySXIB6Uk;z(SzS!YdWS1iFl6(DcN8<)CEl9^RU*qg zB*~tAz^%PU^NhbedX7jSKJa?g>x!v3f`r#UjN6c)gr!uth-!}Ekj@L%a5G)efPw9y zxyq8A&J0q}z~I=xLJ*b*pN3!6!f1-plXV08m(x7hlb>Vlr_|9K+*`(TLU`B0DN{E> zIz6G|R#>F4^g@_kojbWNupJU-5)#kQejig;>JDL^UpNEO9fYY`OSmH+=5)#KdmB~` z_e#~KomXXFZ9?0H6-j;|Y1sM4adzqCw4)n*7>iw^<>%YaBY0ZXRSA;>^4Esx*eMdu zuo62ssY(|ij5-aC;p&SF#|AWu2-UWq8csoqudWXbwU8ygEuuEMeZL^Wy|fNGD=(CG zVn5kx&DdQGEYAOlQNcF5%{eP?uN4uz*l#jEhf{R07hRHUoNjY2Lf&&}O6bfGr|Ab4P$^ za)cXA`cv33FJH7`;vx!mS!8A))$ohh=saGTZhN|Jc1erKcxmW>H_3!aHqaY&`eo zXa+)Rsj!`e*)7)0GMLhjS+&`EJbg2=ZYyI*RFOxeL8v#h9%=G%#^>%khDQ}eku(6Z zfORihRtzHiKO-4P{w~pcxFoF5_Yn0PS-W1TK*0N>fp%0{?j5*8oI30)cH39j``!R+ zR>+f=5XmB)TUqt@d2neMp9SgQpH|>;jeF%(_LhNlf`3@~26YDXVH6ADJq8Q&GiRtX zxD=djk4;G-ywt*aADGL!A@A@#<77~&$?d~}ev(V7!wgghcD%i!o zywHdFY00Pr>Zr{HTT@YHGmct)z3?g?Tl=$tS=Wc^01~mTQvshKWKGAS_6b)NxX4u~ zAr+S<8Q!t*LuO#rPBqKq`3IkbcCe$TUa<|XwMQ)~l%bN)oEH9F53`_cFK**Ba&ysZ zgdDM}U3E6LRwCHA@={OeVzYZou@ZXa&Je>A&v2nAx`{9sC|2q%dbjsR>!bTytVX(a?cG%#-!1%}~E079;hU_lDvgV2~))iTvYz=9<-` ziW@5EHPN%WJ5v?gn1V0qGTLYN~R>Y^SGGQ(nO4JnHSG zQj~spOPYZw@4jyoZ6ty`g1j&Xr>TpOHlPm6@f>lH@ow`IZdw}d<6v{La0?9tCyf~B zvT74ITt`yRZfsOSfIvk3&!)+wwKvnfERVj9XNkBt4mVxbfbN@$n{f?SH)tK~18Lx@ z1@hK7MkRZUv{IJHf-^l>HJnbf@Z>yhs3VskwUnq=*7DV0G=~w=p)(VlBZn(q^V~}m zq6lGi2a0m!PzQ8RlfiFiW(yBxwQ!{@m>q7XWL~A>owE|smam{z|irXk9rA%a3sDfOF4eNd0 zmLNLBVoViHt~$yvPsly3&=wS5d3eT_nhzb;2o)3j5j+q~@)cZ7!&(ieg8Why){L?R z5IMxj%APd~Va0nVjr}&gDB3o*AbZW*)?yhz)e?oZCmu2M!66acSgDr_eYJ9u$v|VxSX2>HI|n_$TY;>eL31 zhJwk2mb;?6NbOAr%TN@5>7t$ZWleAr|*uliGN3+zOjx)_Pbyr1aalrV$t{N711=m(^NqnuEzwIx#H7ifkQVG9?ZR@Bc2^RBW z5?sIYp8LJB_7{1nfy%k!ZwD7F{+mSq-(2p5UvGrq<%iw*v$({7!(0!obv^vAV#0rx zW_+%37~TmVEh7&8S**h$%@au1-TzRN;FNVvN^{8N*IK0S@7ET4n#p=h;m}hblXLgg z|9TyO%iN+zs)BBR9HJ+L7>Ek)8=fy^Wr0~|$Hm&01a$d}(dOb~{||fb8P??5ZH>C@ zhy_HNAP5$eDj-FHpeQ0DAku4)P^24rOCl;tN2J%-0I8w3K%&y5OAWonfDi(Pl7x`J z_n>RN%eD9We&_r+fA+cdFUnKzHlI1hJ?EHSFIH|}+}=xGvfI!ju6Q;&aBU*nD9(Yk zI2!7d_8mU*!!3p4I>*ghl%==&U#J2tLD2(21pJbC27;N0-;(rb+5dZ=ExiQ#;?(EH z6MIjyv5ehhw81PI!v+l&YczyTA3Q4k#2Gc7RT$z)c%vknrl;7?#F=1#2eH3U7!N%_ zZWkK=AtE4%Gv7N9{l0Yxc}4^KYXWroP5=?&PMC8Vg?E!|^J@05QQWirms$|~E^Rd8=vAx&9l zvtxJf%NK{luiQ%67_c|UST{8S@y#ODMnzEC}Lql{}?$U+ROIMIk=6>q!Z$x=`;(Picm36b=z;&n@^ z&s-82#oQXx-qJhYz%yi-UIop;H+X!&&ohLhPmSlm#Fqln=Xq{BcK8N%5KUI3ADGA{ zRrtY_0SPjR=98v(EloO0k|4d#-}V#d$`PvI0xE8dU||g<9SY2EbxA)gUHtp>364KL z!`-lJcaF|ScSb&swL&Xg)_s#zfXNl!ac22(3nwR>VZ%e`T4}95Ab9~iMl-sJU>v}i2 z=sWptsLykBu4PqpCUkCbMmJHi!iYG^=MaG%HKkK&$G%;~PkZZwD;F!z#Bink(GGV; zm&ELnPz#@XQ?jtq?00XpQaKWT^?Zb2RLf{C^1))7N{mD_^%3JXsPcpKKy7770c0Xk zNvo_zVd7Itd!Kl%!ns*Wduvkn%x)a!a|zgN1}DG#wu&&8&zzpuvlT{B6&*1WrOZl4~zHn(?E zyKG#!vSo|Go-MvBQlYgJH1=3>v2g60nAvJR>1^{l--tj}1X%LN!^7%~6$?h6!}#qJ z5y}gou&jt(=Mad-eAuk1$jHQx+Q*9F+%xEvfwb*X>Ph(f=vg1O^Xb|goP#Ug!8coi zako6nwz~RMMJy`1)n30md6aaOs3zP(N>@qR=X`x+rC@Xf(9#$)$IH^^TbkbLQp~T6 zfC$d*>JK9*XW!KE@OXo>5{lPMA1vIkhp$8BN7xX@-9M<0Vp_nIar*~hyPx83PQ<$~o=+;p zch`J}9#O?{Vw)9J_#e2Z4FYIp!k2P|7PcOLwR5EAJJ(_nwZ}dsCtS*vc^(=ATM6KF zvl)MHRR$7;cRqU~I^hMqBYUzXhE{5y5h2ax(-tH*@yU>s;7Ih$BR zlC;G1a|03j-CIG=O)C3V4@>8rW!PDD)BG$rBRf{eM8tZa5 z-@R0v_MJRyfNSr}oh+t;c(W#|6G5QObB~LpImvmI`7@6vs$YNtIO?i52Km5IZ)QjB z(?2w6qSMjgGQzuW2ESR8+dneFw#KUposFgoESw%YO5yPP4uP17jbmP+4k}4Hm8XV` zoo6~&+(43h%3a%;yYw(Nd6}Q6j9xDzRy_G*&pYbCS;sH_qKr(d+bhv*JnXJou zpbUSP_-?r0F3J(o(cK)$8XRlK&-dwF|k=}R1~jmHp;9n>g=)`kGi18oq;iJVs_ z0_QexJa)J4SWA#nhh`Mo`b=dE?_DC>hB~l42_Kre;@u-e>lQ0hHh6UJ`s=PmRY&lbBcTWpVzbUc1a`+0fe(TOXZ6 z@>k6JWmms5?_Mj>SYPOPEpL==p8FtuI;rXiq^R@t0+#YY8IpnCz853p#_^aT{h14Q z!AO0uzB^g>=%sFfRq0{;v2~U|2%K{-M~`7XCsTbAq9Q*%M3f61&Fa1YPZ&xXDo`{!9sb?7O4G^9az>!s=ie&(aPa9D<&g zePdfWbS8A^liGzcbaKeL^}dhNe;b*{?AEi~d;a+Q9=}E6OxXfycNs2@nuq`G;a%j2 z|B%l2sC4HID$CFQ9X|fM&-9qq^dHjc6iop~LB!nb_|t!ztOpo`|B$>zwr8gZ=xNjZ)43w(XBUwgUNnSBHCF@%%k{zn?k74f)3#{A*VH?=S+h z@y}s=bbl}W$5X-gF(CQ{<}i}UyKVXOx_#pCKUIixZUJkrU-S-Wrw=m~gT-g+;LNKq z%CG~&_sISfQ~Q>G=&z=q1SX$;{)LU5LH3*3yAmn&43)-$NICV7B)>;aJFBAb?YBL^ zcu$4xctl;}?UYeaYL_5@Dx zlyvziwibK_m{B1#@Ao&7ihqMJf6KY)M1TCHb4tR_31Twe)2>?9ZHucY1mFDqMFi*sj^NSx&>)$L28HyjxsJ|_hS%2Gk zB`FO2RFOh&n6tb&BG_53&X(28^`cpol2(A)XuTrtcbC3A2_*L+dwf_Mr5aHr_Rm&- zFPGq-%dB@wsNxE^oxF{+3;AyQkOrCU6PC=AD~Z(D-iT&LA8Uf?H;-0;+3pPUn>!RW-}Q zd=L(EbgiNm5bAY4(5-Y{yLN0mt9}oJwkAXB>gwBaIacnw+<7Rc47kdNoYUN~;0pwY z`6SI3Nw)zJ0I_wv&R{sU+k{X zA}cFMvm&yhJ}NCI7%eH_MC=G5_RE8t62{Bw3_9)U+5~zz>li5dbFTts#Vx>{s@aB( zucjl{nI80Jqcq~;CSEGXce4IQ;EYlkdRVm)ResT9EOLQKX_HF}^>)`farHvY8E&l0 zUE30;&%-NH8zdj}bw=l?ucL@?Q5abCY#J%+p%0tU$v@kkc^X)DA|_t<;h*<{wpZ7T zmzk?;Xv5k<7AR|CGHJnkf9t!3I+42r607EEm^W^LW$;CRPu^jvK^Ggrdk)D zI1(g(H)Z3vJ7csX84$_i?l~PDfOOP%=;puLpb1$4B?2IIMLd1npI$G2CTA`SV;&@v zCXyuy|CZjI;yE&z=m7n8>IxTinM~;PzcudWusI|CM%c(F`dswz;e7wG8@4BLrl^Pw zgui3i?oM2j;ey;EDZN4F1+lr}lRmE2B)SlYcA+}^M>(qA@0p7Tk zazwt1QJP|2(J2Lg337bWFEalWTrld17o;G3@)uPxc_)cCmf z6(G114Gv#;a%bE)gs1AwfoBvbIB=gxL@ukGgb}v_11h&Vir2@M(ZVN%t@&3TJ`D3c z{$gXD)RRddGA^Gs?<#;`^%$kq^$0@kH@VPDDO#M49oX)GJZ1yP756MdW`BJ5G_;A) z5-%Z0)o*!6Pif+6(X3d$+bn(QY6p=I|5?3qRjg25Ciqg!r2Jss%XxB2nl`%Z+E2Nk zosY!`(7l;H%+{^e<1}R$JqwYFS#{=~Uq>DDObM0fax-U+^aQrtwZz=M$qM|K~(2(KR%h+;esvj%VByL%l(;fCz(l?bDzBGFfN z<*VvMmF8WObF^K3W!i*K{_hE1dJf`AaIV3;uisrl)Z2Y|M}ZwS zQP=^6p6&ZnEH*mCe2VSH>*_>lg|ghxJDqd)R8Q%S&>+zfyr%ZHC;Y+*;sXAvRL;#LI0)T3GC7+89&XK~ z;gzcLt~r2`W(L+9QP&rp)vRnG8w%u0hpd8e7fxKg2HF#RfD;>3iE}_^>G~{lN^3Qt zl!;mnUWFKJ{y_*US-ktWexU2%P^X}Ge~aK`GbBd4j$QBd__t$EZl;qAo;^9eYe+m( z@1;q&w(H~M?yb*1T%3`Qi`kOKOgJD5`&(Pm;=ApFEFWInq%^%G6*N5&F9%^F9ElqEplGgdro!5%8N6*KlX-}<%qKlTCa#F+ivSW?|F@hSzO z{3TC4@pkAsH@D?w=WN*ZO+w27b4JDWp=F>ujeo>#_Vc))N8?G_7Ybs;>Ebd~`tU0& zhP8f^4p_qnC1DRRRvuQJ-K*bZRo>GGWo4zWFLPjB(!#-_wgaXQC|_)0UcHSdz0-Z5 zm|Kk0h@;cbVJ9kWccy3*_K2OiRGIZHvPM(*AU1j%TJIvz^u)g-;>JTZ&5j;H;9T!S;}e|tNK^c^T%}HQ=QIg z{?kR9y3H~cL9>eyh{jS(>>X;RI0ela;uYSU`G8`Kx;b({Lpa7^))*$PC3vhn4W43} z(8QYJn5D4FJg>^St3eBsuZ`|;r)Z(&IhtK?ycz@U+)_cOkG*YXi>WdTN>xE97tf|R ze7`K6O&MalB2JkeH&*{K#O16e?hNgyG}g&*E;caUY2{fI@9H_@iZimwD{t$HRk~*M zg`DywaZy?$y7!OT#C}UjqreU{LntrCL_o&?_3}wF4|F1+?u5dPblFLlzhK&HAT`M8 zg2_)L6s&*xk?M?bkZO{O=tJ4k+S6QnpfyML#gcmJSMwwJ z(bwH$uwg$EeA9;R!NYn4vYgchPrph|E(?0r1y;5aXaIC`pZfK{l7?j^Pd<~**z^nH zHh!wuXYM2P-mMQVK%K(2-~=~`T=@@;VAP=^p+Q?nnPM|ZvQ(l`B&zu;2{v6{;e_qF z0`d`|TrM))*1K>hvI6lT;s>uEHNe@T*Xpx##FB%sm6ei!>`6~2xYvUlC!%DrdAq7U zOMMfA3|SJGFpCW%&|kjwBf#y`dGb@vlTDFjH}wph;Ok`gM+c&_q<#!j=PnijUWO6c z=j&@HoAR2JYV(TiViXq6ysTx4O%|s>dTwo0v`~FExX)qJG0>J6W&7(=W#}rzQ$MIX z{LmZ{*A=-DkgTVLW002cxmiZGT~1wW&9aC<(oJ6N(VL^_tD! zDi+tKY=O;_jJp>#e@T7F{Lv_74~L%p7oG*4dJTXm7mp6K`5hZ~fJ&z|;}o2K>1e!((rQcVKO>`LEg&1h%)o6-@aU2F$dp zB~M-*-8m%(XfAM{T){oxj{W^KHsB4^1%7$RA7eRa-`~ab5^<=$62|8lNSLf_`y%aE zp4%@x6|BD_9PY$iIzIC!xZB5inSdfc2~W zhxG$$j9`~o#O;M1dF-{Szuldw;=BzcoO$a?F9!mZT69o-O`F}l5ymi_cal|xiqj)(kG>h*i*lRYeN8wO)R7zcXsayl?#!Hs<@U!_5ebOmPq0dbPPzK+Wuc|bokmdaH} z_mIW|%RbL90#{iwa;3}YmKiyKVpDCt)0kw`alB;{XET1Z&C}Du?}*R*O5g1^8x{g{Yl~=R0TqbkI3~ zX0Pv!&}q|6{x}CTaG@TN3ECP4;5qh(*1Rf)+TH6ru{p3d4yI|$qwen1t6?iAhoPL$_t~=gUr=zQQWqZ!>-NzX)v34T!d(i-Q)%b? z!?1+6hph0W5wIG7?no3EDn$YV|C~)k4R^NyZA{J&7fo{Auf@F=5KTDGBd)#&c|_kH z)5y0iFKh3c*`^n#$#pS=GA*<+tAlSQ9M$<{-amJl3)wNNnHwQ^ zB?mg2PN^c8^80H=Esz!$~idr8+6EYxS5cvit0V-Qcv-cp;W(#aJQgCh6 z8=4SsBv5ItxMR8&>iWarmg&tAo|r&<4cmn1?TcKiRa!~L=CZq;;Zjn4It%t{3rjKt zNE6ZC`yl376y5HxO_X53T%ay;$*Td|jzO95HPW$OU&K-dKr1ot)AQZ8FEMQ;2$#|v zv-CJ(ZuUzDYY7}E*VscmTsnvuQnFx-WCq*&tg+uT@7kT-XsCZsIIZzri5FSC%ZBv? zmw!N{7P(!}e@&MY|3ur!O?}7bl3`tZx<>Gw)Lx$5#;ioi@VTUK*vVEorGWuM+`Bhd zxAy?nq-t)fw%a8h2Ht9m?PBE3G%VU(-lb1YXvMni|%X4pULM`f$wA+mX zasM-E4q<+YkW}#{m%3H0y;*Mgl1DZT9vymX@V#2~Xaz^@gc-vu+@WdfLU_~@+}(o_ zu_Zp#y#n_c0aYp|H;!<8!Z2EpS=|PVJmEyw?SgPi!?W!(rW_rhxGnEtK~%X<3vK8f z%Rb?wt(}4B)+ASX8JF>WsftDhUmh}@(wTkQIB(^JGS0@xu*C2;b@jqpanr^K|ebgp$4R8{7KUF`d%()v;w#f}F-0k(X`I!56RO$9~UDfTfc`2XC3hHBR-l4_w z+#UdZu|FXREhQ)=zPu6s`CdwbT)16RTDTE$#(14$B0;WEy5oL(W#%yCr50I~#xAV` znU}@3p}&}6I=jU+=H9Cf6<|U8uVi&K^BwoQM{airgi%cCwp1(jG6P0i8OG}tZebH0 zeyNhJdqrHj0%spJ&d}3X~4(q62IJo<9=M3+@u&kl}=dU&v zr4DyjQdkbMLR+Kcq_f>#2Gwb9STy585=-5|hljh&_$$W+{aujiwk{TsYu?%+d|~eh zhL!s!hB4jghvds7=0^5)eFrm-sP#Kp7V#yOA0sCubg4KaEYEfXHehbdNXJR%gthN+ zfDib|nDc71Nl9r?&f%Uu>vObr`Lm9qvINkZy7?2ftikcUbMu|M|wQ*NkjcdtjbX%z06A`oXOcfGBT zWs{i!xnW_7$;U1}gqty(ml4&i_|;?JtO%-Q{|Y6u3Y9cuyt=AP ztCJ3XaRM9UW5gA2Ka=FD4;b@;t707jDFrb)sWiDmwj*;rz>ZFj&{%QI=fr}lw4fSt z)gRVGJFbokTOUk%=r}#uqNL7uCYNITrGM;?eNPgsiYcjjt|eXMdF9e`7w0u&lGp*L zV}$3?i90*}xDo3*L3r6chydajbB7EVUhEpoHjgr~Q7*CzNgt_|nE@#&Q4m-?e%O2-U|K~a!5T}?Uu?;qY6EMTQ zF|H-&8%w!bTmlLGHT$)^)qz&tSV@%zdl)LoJiRE@#yW}@2XVfwT<{pLe$PBhIL)P* zS>rhAYpraL_yU_*eMHWuor+Tf4TO*V<*LZJAl54>N))GiTs&- zRvWUV#Y&eXCw5`6h@gbsPi}X?rj=W=4GWAbVcWix@U2m3X$QgnRbfX6NjxOI+Vi$Y zgu}wFv}=54G~o%-b*o--q1@xXDJuB4*LnJCVp@Ema-p*IcHC+U@+9hZm9M;N>M2tz z3R2qKr}*Z?$HejCn=8*HUWGIbDqXg`&(bO(W&PCPjtOsT&0gt&iqC3lmYIn!?a~As z@2E)Z|9&ygzRmD)K%`mOHSUa1MRqI)^~_{lifPJnRL)tYWsSxSKb^5Oc5I|VAAX5Z zMH^|^N^KHO<(veZzEC-Pmy6L`wGl3|WX*S)8AXf`YOW!Zn9gij0?GtbET|q*4=$k` z^JWK~S~hYAI3X>+^{-6v&?H>62yfICL)Cy{q44Gmu=->3Y3`K->BXW&IG-^*0rl6c zQ3RZCkx#!wWEA%XquH^GzD}HfbZn2q2G{yY`&;wu~>$2icyb@dnDDeP0x0I*JKf%hM^U-Zb7PxSx@z+NGn8Hs4vnlYD z_FM5+KNH~I0!AvK`+u%Tx7$CNkmol-mws#DfgNU}_)oH==O-}}wRQOAZ?!zH0Uji$ z|D#{DjDyY;dKr^uRUaUi(GE5Vx&S>X3;E|(H~$U`(evld_I~nW3WqRgw|R z0&e~YQ?KKAbk z_rIO|7k%^p*_1l0GesJ$>hlF8lwqr#3OgYo%^gGkj3Ck2S$XB*ua51|6rWgvE zIQnPw$R%L-0ro?$1?2x*31)HNTC>^DfAY%ufP)kYcDU-r@>@y8sc3-Z9A^ir;!Qo; zi-E}i-d@W(Rzo##;C^|as=s`Fs+D#(e1*LBZPbTYt1)R6q`YsmKDbbkz7v(H8-+;C zcG~V)TT~6O;(Ko74pUOupaFlbJ3VdU<4W@AYSGQMd#~_~NgrPOj+YyanC5*w-`WC; zTCGstKS-~~5_jHd*}Z(4gzT5ZaR44veHdtlrU4Eg+_1huo;0V)<^Udrx!6-lt9&3kQ5#GHBo8Gc=J88rYZa@DMnGBKpn;NN z+4#}L=Q~z74bNi!uWsD6du}J}nBjbTKiiP@R8`WpHGLhsQ6@(BRZFTentmS+9@lx_ z-|Q>Xdh}iYR_od~5x5kqv*x#p==NEgHWsLfi{@!DpFX$CXcPL@H@y+Vb*U}yEhlu| zE9CKQgmi4HZ&k{W!D^c(v8bRDUAP#~3vU8f65c+D{zR(UI%*KKre+*dq;iw-^rpJzPos+);WTf-8C=Btd{fif zntH*|F)&z%ySp}`MDuDOdC{hpL4OgV6e!8Oq=K!}4h*#M8-nQ+YIV%G)hzIQ#m_hO z&Ckr()K*ugXKta>`Ujf76V@2o9Seh96UsZqt&>Z1>S$-hBBU0S*b`8%e z@Hm8<|9A>Ei>Ijee4YCl$%;2E#v#zS&9v?}xT%$m6O)k}SIXyvVhD_-&hFbqrfA=| z@84Mg!#(8(Ox9>)eVHd8_XlsQ)NeF6^lj6pefzf4vM+{#lQum45zGeUT?F|B;xcm* z<9l4j;^Vw~;;K%1>yzieCt zCprI+u+W9yy|mDXoSIy5AL~HQCGV^CLCroK$*AJrc65(5Y$8vNf5h}yr zI~Gi-b*2k_1Bi4P+tfvB3&Q;(D2-Jmqts($XThq?`HGtFR!8QUVc?TbngWzQe?Jug zKDic+S9#K&2@(mhe}aGV5azI@b12W*Yj(ysV83?1+5WI%N z!1SjtYy;1ydNUMvqQ5Tf1i}0PP(XV)XyeGcQmPx9eJJ?y(|Kd;wr=(|rFAlGYb_3O zwM0(B^RHL{=J4`%6mSByDjSSg0VpZoQ^?aVy{L@xLsA($@36XeNN36UEP|rpd-d8# zqsAl@j-WUUeb7?m3!Qf>oyw^+=fIwoA}gpGe9BiHwA3L|UeO5XFAQfuJlNSkG@~)+ zpp$vQS=`6+e9da^pz~Y>BHs zsXJ$`JIGgU^c)A*00u8aqBy#`nDp<1470pP`*qwJVLsaM3aG7JZTHpoGoLh!MXADO z(UF5(Sy`6j6K9^>X_MNdWZa1$TYg{45@U$6f;-NuR?_N|B_*+`TMc$&PzU~AHNU7T zOI^lUjrv)5o2TDNoCzOizSDL{oh!S031c*8Bma~+m#nzw^E3!d)(+75vj_T6TeGSuR$Jul%&mZ^kZ@6F z*Sy!lHg}I-XF#I1Dnex|VDf&ow2C_OwuU=C7MJqCqelzt`oya+nKVvc*&6JccVbS9 zA~!bA+Q7zH*r+VI5oM@%o0csZFcF=QBbUbFBzZ0OwtRbo(`-#SE$D>_SCLH8%a-g@ z5z?dO$>jnI)7dT5b8v#CHCP7;qfM{9VN&~$bK};`E>yW^e)&cVSO;75q#ulhFqU8FLhZzmVW4n&^CWH7h>@cAFt~?&I`E*2!5~Q3tyDR7gT!#{5e!zlsklvz{ewlN_xp~orhYl$ zVM?f)MLk-Vj-zkN=F9a%910k#CMfU_tkHvVzR#4OsiZ;o5mXO;fl+y+6Y@N0s^1p)X&R zHrj^-ZN1B#{4p?MuXpYs|9m!!pdHnSvn+L2pO2-S*7}FaZexQ2mbV5Z>jTCuZ+z5n zy~a(6QyMcY@(bRrVmwRgC00K?$hT1k_LRk)H6R_wjucg#7B@X=C9-Pdx!}_`ziw&} z@TR?nTLV=L2@+&3n(`?*(G#PW^%?YH_~n&3&Apq8s`Y6TxirI@1zt=`c69h{`x#Tt zjtR|ek3~V$T~Zer65|+b{){)jLTbrt`Xa9P(d{`&tHwXxvMO6L%<{LCDQjhQFAdrA zSpKN3UZYS9H-~Da;h~5&g6JqMXpS@lvL>~ouzOdiVC+il7dbuC(nEuxi|QnK>Y+y$#d~pI8G+ZHqGniq*w6 zuR(=c%xtAUz+DOt35Xt7k3Ac9NAhz&WjO7S&h_|(r!}I{I-#0s_eTitp?2>+#Q@~< zhkNlZH5Uw-;)L(%Z>Qvzv308#%ZaPVFh5JHi;|-y1EBk<9v|ki+_aRi3(G67Qv2a2 zZ+8qYJsYvIYk_zr{v1+6#>%+W@`N@P!#EpZDheMik{a)+pl_l}FUfOsyCfx#JzjYD9G;B!N>dx!Dh<7@Rb>5soE$=#Xwbl#QcQ|=Tt+~A?V_WJdT4W z6RvCrEnoH5`1CINh0f`RxG40uktg#Ydxr|2>uOFF7kJ7ol{ziJ?qT|V*^~gQ;e1{0 zprmHxki?8(zPjV`TYFZ?u$z?Fc3Mxh#F9~?@Jq8gEqwbTj;1mTe_=Q~*<#Wp9wr?z zcJ9Rj3ZJ(~huW7sBbzQ?87JAO2xZ#p^VY^KIR|QZDJ&Yy zR17WFxRJaq2xk3r7|J>nYn}F!LfgMH&JU+G18sL>)8MqZ?T2*1NxA*o%V@+ECJwPh zYFLO#Ib@4@}iDY-K}sXTqKXGN9W(jTVcL*iGAdCWse7g(&fq}wEq#$+|m3*X~5 z=5(0>2L=&vmdPwouIUd$6iZtH6zn~@ryG-z$!t`Ya9_4bM$Qe*Db0I?D;&oL=*grQ zU}Lf!CP8TehI(SGriS944@3#yp$co~KF@11BVys*uoDw$J|5l|6k@+W6mDkcuIEe-OL2?N((%Z3R=(gq~hw644M82R3Nul{cF_RH1UAMyLZGO=B& z!bRLqN7RbJ1zp{qia>3Df4p7wIhKG|%3iY~s6FdPoJ`(p*`}LV;_8 zx=UhJTQa1ov=7f_CZ#5x9=K_yihYT(5?MBpt;iu)5S=Rng{~2+efXa&>69Yj9q(70 zN){LqC~nb95~ChHGYez2U)5ADSINmwOpZ{Vq)du|y(2Xy z^e-z%71^|woPXShy2tg|N$17XE3tA6Z9)xWGm z<0TwBSSxFGs#sXx13s}&f$W@}o#`>w;Iol67yK32$HHg{pn#$6ik3R1_I)T?Nt3U> z$__0$2hgHLL1$NjeBgwA5L&XXSzW7|beI%rj4MqtvLeL6%A$7Y@XEIL@MiTrK?ihKp}M_> zb9&JNviUyYxNElTDaggS^d!2Le2{_}FJD)^SvvtmWedb;H_#dV0@AisN&t0Ry-FLYy4@0-_;oxKOs0Bf#T?2$Wva~cU%N@6S_%faR&N5bs;yLVoqhJ}`vZh{${E$Sase>=<21`y6wMB+ zpMTJL3&&5Cs_MqNw>P46;Q&h4tXZ}hSoHPcd>{s^(^K7@i$l;?%RR+Mz92~CIIYcy zS4eGDEFnfY^|iy|(&8jb#3!Xym{-GtHx{o#s1gRie!)5_aN>Sg;y*)9t0(7F{4V_$y@5}T^t!Mf(=GCM(&m(KnqW`quaG=C#z3IJNu zOugaA&!;PD{3K@P6y3u9+MV7(%u74O%qes6pO<}90YaUDfRh&wUTFRH$_MTOt^0%f z#n+!bGezHv*<3=;59Ay7)i6SuUL4Pnmi1x$6}!2^kA3U`?t1Fa)FkUiyWJ--+QQMK zU3hFCZ}Jbj{}M3wKb)KWlfR=*B2;(yI~={6Zt`F2thMY6dO^UeBRhs?8sP8N@iD4a zX;0TnF#qT{pc#QmVQj#OS;G z69HpYql&tfg4-S?A%k~gxcMe~nnu?*0j21eBGseD8W?uWZeAj>hUpQ&1nx`(r_YRyz@_UsX6LU|In*a=CN;Ztp~A;~oa()7B97E`-(u7!2so+>a?=r9ojnq_gmz!6TDaz?!-8stR+uSri+CNw%8Y2)ryw$9azUI*|NJ(-S^{ zh=W8o{G=dmUWJ?JKF*FUdX_vi-iF?0wDcqtyA4@;r)N9-s9pZTw|{k4El_*&u`t{2 zpSw9@0>N>63pjm6*2hiW6ZSP2J6^xK>1bvaSz*cLFLZTV)5pZ?Au_>o|HXt8`Xz-V zBf5xS3^v({UKG=>0Y7BI)i0N5yS+M3(3oxTjR}&jFBvy$ea>R<4^?b8hY)>j`e`7f zm8#Xq#yNRoW~EKGX6D>Cv~XUGu7g@cW!1iMd*)is`}`+2z`7~P=KO*%xq5Pj_vg1B zI=LOhDPE^K$GMP2`X#!OhYxnmXp?YUR7d5YOy26wE&tm! zBil132GJ?qZO6o(g{X?OetU~tY-m~EF83`N%!!;7T-d}!_IZr^VlU#GZF8+s<62NS zqs({FRdjQ%p0ZA!h)pr2HHPKuiu*n*nbC|vi~~^SiBh!emqlJ!N39!KIZrw}0{cd&-=ZU$M>1hit-eMJa#3ZA7_6Jc z5o3@jv~%J6vf{RYvCk&aZ>>6MgR=bPV!c$I?%^ArYjuU{n9NDf5LEPo2$iUa3TPg_ z0~z)`AEXd=gNg~io;kofgELKt_*DdUN_4jfi;37RorSdX2AD@t&sV(n?K|kNId|`PdFWee2_oZ%ZSOKScjv8vqxwV)2oMAB87`L!^=#e2 z()z6G)xGT^dbt_8U!QiqLQdw_)S$jxrmceFu4UfxdTq)k%5Gonz=%v>HLDAuTYf1nl=*@hi`^C0pSseh8Uk<7cGoIoy; zeh4={6@e&poVe1<)hZ`Ro%6Yoc|WGN>q^DRMD>!EGzJ=(oU_g%T^JovGg)WSO>sKh zcKOs?$%mSAh)i={eb6nr11gndFzidznnkq)*2>R6aGiVPK+(h%#DE`BSVDy(1k969 zpZKzIUiFRkx8)LoZ+grpMiDvi;*t$S%&oJ#Y3fRMk&d+Gl`@}`x`Be4?}SbKln^aV z{FWUlEpyD78mg=C-wfKj9pYY(==37Q87vZUIE)|VC zOqtF=pND_)Sf9%cbQma!9T7wEIJbRr-FuX;?$sm#S}z~%RWQHwvH9z6L*%NWZ2p*i z?C33v@XpBtpKeX3&5*CssOjpU=JLo+a8S=gLq1;WCL0#}tPV|1@(_iq!D@XzG14st#p;YUIrXc1#}h9Q@@#46>x3wJ!8h&2>*T5tnkB*{dz`D&s~5?Y*W}i3qOY zNoQ?)y)~(yIOCww#Zy+H#eu!lN@+4PcX<|8AX(Sw5NtXR8)D4&EelPqGAn+vJQhwnksKgqGZ?mMkl8D#GO3rYye4nzCdkrIQB-17Q z;+_@Hs2bHl=~{c;BCWe_ur0%poU|FwLae1Pdjq{6TK+@D??sgSdGSh$%H_r)P+v(o z2a>pcc+g&i4m#?66c09Wg}K*-ClwoD0}AkR&44D7#n;*{yo)E7e{(#9+cQ+%(ud?F zZjw&dS->Bqc2YGeJ@3qDE*E)ZE=g@~T{|Lzc_H(Zvc-8+=GOh~t-6y5ARxi?+9H+T zX?s-}*ck8rsip-0qyjcY&5yO3lb6GKHSfxDiCnvST}3~ zizhbMvSPp{#WJaSAV$|?WyVinm436d>9|OY1hOu4HAb0+Q;tP8RmoqEtM*<=kvRhM zSlohUta-nn4V;f_`|Pno8^sL{);J5I2TQ(Q)wC)U7>+r_Nt!T&Z`3yT(hFK(qT8nE zS5CDc$g7r{t4O|_O3az-&Xs=3-7WL8bcHP=h{HgTam0+3%R`ks4)71jjn>NX zoaJi=Av!)mA6nb4Eo3h7J^ffB?v-WPUMMICQ(owa!HtR!8ZicG$8*H0Yn8?wm;-r;LX%OsuadeF)b5_#AZb(cnVXa!tu@($c6i#D|pmIhE!c*oINKv%d|MNsqv z=N=*Ku#&WbOm^baibA~9-bdrh>Nx%!)^6*~iSt(|{B)k~MSe1|eXs(W> zJVBaOUcUGA>i)q@g8%knse{d2mX#2^eu8jZ2ggYFQ;A}sqMm1AzvW5vLV;USkNQ~p zZUBPCa@&{=3cp{=N=3Bgwt%p3G|d9#P>zeSBylhBXAYRe4Y>(Qt>?E~W4}>mHSY7t;aRBz(jb(QKivN+=eGJTKiwmz@Z5J`DG#q8faIZi)2jACDyl9o-5E=bDPdt`**~~1iA(Z;F(W!EB_DJ7(d)Ce=B*Uq1sT+N zXA{%`Rq{qLDB(rM35u3lT#U%6J$gJVbMJ~1O%fcwNHh-0e2+<772gUf@E0McNm}Y9 zwY6?4aa8fyEM~5LbIx>c>zU*T&W#?9PCD4cbtg}&ggrT7AExEhQi#d9H(trGKvndK znY*x2C28tXb3xjP?D_j&N-l{mzl_(gp6`C!gl}=H4l*q2dJETm2umdqpq8Eqe)?VK zf8T>@QG`-D@=X*b-g zVk$;bG8&f`mi=oi+tCC1Pv?=V=}!?-tgz2CBrYfV#p(D9aUl+Bvu;69dHb#+F% zMCx;P1X% z6oJh8gjVCN>L-;biIw2WKFzkabwy~OX1u`Ua~gref4f>O?L*GTbC@;msmqj98~Zr; ztD=bAXm_Twpt}PGlRPo6Ld8dv0m{*Z{=(?4rmOLqw%gLYB?(9MBd<&*B~frCUb`GZK3PX+RzHrpAga*m=jY(y>10Pu;hj{3FPRHXXK}v9;~g@;vApH7?en3G zB!lmKq7l55S+r*R1)^r5uym6o){Cw8k{wC$oDE5K;mbPUUT6mzxHiR3Y(T^Bximg7 zKn@eG(XSCWF{G#3?;7hK62-!> zY`JCrz4HQ-rOu=cdxtnV?_Ic{O-xDM%i8LW*_e01EQi`p)QHfV9N}9(#p$L>?@v=7 zjks}=#d-Dg@=q>+>UzfbF#sv6{~Eo|2Ldj51_qe*)uRl{P(k!kR(%fpUy;d+uo_Mt z;ETt+1;-;UkK_#y7=q9BoxFZy5`=L~v2ylxw7{qJ*YDDv{2!L@t60}BPf`h(Y#6{D zf&^D-45j=cBzx3Uz6&}bvg~*LaBKqhL8s&;y850_VW`>v4UySv|K2+IljycD`TsW) z^B*eV0VbXp0D38(*HPF92D=#MvyrrKh&d^~P?fP+DN*zwX7dFs%!Lv;6x5K?9uHm% zLQpKl-C)nxP##u&N?Xcnyf~XNz*_fWY#&MYX(;*K)eYTe{c^4?Ii3qdm4#7^_b9Ai zsUAq)s)zw5m>TdzdXQQY*qFA5;Q)|J;K7~hzrWY@&iamKt3(u!#o?(fb%!(tmy5zO z#z7m(XbZQqZEe1)ny=Ql1HU}$4ZbN2g{zE!`LcDrmAckxJ6y}1Q6Ik_1|UQ?I(XTB zLwx8J%v2IJwM*H})Wv8{wrIXDV#V@-LoKW%ehBcxsIwun;h@8%^_ zKR>&H8^T$Tpb4p?Yt&b*$jj4fG{ad}*`xQzhdVD$h?jITzqvo@9X*z*%&0kx^5mWX zBNxaZtoyX5kcR(Bh@Qcnx4 z38K|!igsR)ULwz};(9qb78N|njbJ@OG+HrbWY}Hf8-rSu`u9640`TVMh{qlwX%8q? zut8hq=H`rox_(?Ta%RA`w;_4aag-ub-Dj|Ik?_a(YtRm9!e3Q2);0EB`?ZS9kVXkq z<_?2$+o@FDCBD#;PYpHNL6+ej(bVx{|7` zYy#Gpb!3r=0f_$@`70l4;Qf^PoiCcJMiZOyg|{NpXQnA7>Ijn-t8VNSmxWcaTGy8T zwkzX-Y4f2u_!7ibE+L256t(1W-Vt{`_r&EVBy3UCSRPo5gXxnGa%2uG?vjn z730#4eQ7rB$}7$SmO!`d)k4+hU17 z9&#Dz$z|tlVA5apwVNBt7F3QV_c!U zh}1C>pN@Q?FDTOmefE;?N-e&~bE`eo` zEF*25SajLN0>@o!IyUCUxBWc!T9dHlSnfxL$1?X>=yg(+My?_C%{j3YtrE$jq+HNv z60=F#_o^tjv;YLZyJGsIYPfNJK!a7PL?gw!3#BI<(p)fC;O8kb$6o6j?BIp5N6z+1 zI?b;xLX*J`$k=G7udq+oP=h!7JJ@%sI&{j#G1^qg>v1Ama*7_Yfs7gs?{Mz0NlT3@a$e}r-Q&*SKCM>#sH%{UfGyRFrkI!>9eQ(sUd4)c3&s)>t(8-nUj zK;qvW%6XAEY_ODszwn*(#X{?Dp$F^5WqbFp>eEC9O^tjXD3yF);Yj<7_szZ`*&_Ah z!W!X!U(z@jc_XfNu-l8cb@lIAkr_ea>DkdGA?hXl;#=hNID14H3SOyM>n4!1c2J-` zLkWbj8*bOF!QRg8yjwVS5=Z3cz~II?=_4Hy{{mw)i>2Nk2yuE!Kax&o*Z%MRz?tiP+5E9 zMnAL5s?b{Vv@3)jlsFASH~jgjGtfe9j{e-O!@iG)TP?bi7uJl{FPSZ37tYIh4VdC0 zlqHIb-_L~iFIGoYRhh(C1g?87)birDDvmpp`x=C_<2WGJw{8yTC`I&*M ztY$K_EZ`pA(|^ctr|K08eaCe*E`OX`RnlBhZ|a&fH#emd&2e=i)H*#4HJjT$^eW4} z1>K>$QJd4430CB9+(1FFZVOpe?1w98n;_rpv0>WCs&qmbWT)wB_Gr(m>}9u!VMrb= zEKF4rjBqc_iH&J=4;@b>_baqTTNPR1YNV~d+@^3XcA|sOa9xrMEjNePg&!g%?KW;C z>v9#j-p*zaWZja|=1AE%&fKi}dOfkH>+?Jzir{3>DDrSdeEZUOPcJ%}BnB#^)iH8rh@ z8u)Ne^GZ^bsf+kjiWF3$WZuM9=W8^2P{*mehNtkDdex|{RI8EZ^-2D0)0f}#bmo8; z5nam#uWh^Z+-HWDXIi6SFW$$4tpPr5J}g2gTJQDJ5zGTHB)K*ybccEM-Z+Z2r*c*_ zrdfvLi`#aZZ47NpZ#!-NYYBPylt~?k<$#&J`=EMTddP4jZ4Hd@tY9173UDRNi^b0J*SlktX}s};~M_)qn=UwM-^d*|H)xCfyZ+ zP%f%MFwRo=lWkv`*9%wiPS!gbQpc1Rmtz!_RCn2A2Tvy&@4Ym9WpP6EPq(R;B36N~ zPl{ZV@q7{aD7APg`C&H){YdR9F}q`kcA+e&QBFW&&F3*>Y?Ev&Mw8p*T5|#LE3Xny zbM9KVf)H31q+yujBRZX?HiMU_hYp%lBIS)@x(Q;6rNF5+o7>IWXX?vmah1WY2lD;Q zp(DPk1l%C`HoUtg4XsTT&lpS@Qr#THLiA^g*3;39PZZ*f8IIuoUJTJd*FNMAJQ^}) zxs9bF6(2APJe@R3H{WW+eJIn_;O@N_Ukzwj$Z6<@VJz7kccMNl8=ezc7fCl0Tw;av z^A>`OtHG^yXn=ne5SlR+z#-~Fv6Tj#b`VXt<`*OGAl&($+N-!e&wc_kI@_mFa9WqA z&5;;Px!3p!tZj={t8cuIL`Kfm`|&^}q3%du0(ZVQf;edBQ!dWgyQ?-Dc@cei&mUp( zJiSV-k*BcLdM7k1mpTp7e`ZgQOzgPy{H>0mV;85YGs#>y#kp@l_<0{(&y>nstj}~+ zV+7gG8?YOi*AZ*ckG_^8-kD{~Tx<};R9!Z_-U^rMFogCPWF|*i$BE3Q3s3uc6|Y%z z3)(@9rdWCG#>)-jMX01PCyIGStmBT^fD6q|!7rI`mncqz)QV_s_CK7EKQWc*UAPAI z{31=JLe^5eh@N>YEWE07L6dWVD-??c+ELMy&M8V8T0-FUi5+|Ow^G&Ft`ed^r-~?c|9t;5Q+G$UGmC8x>arZfzaubqa2m zpLifgU3b(y`yg~lxkxXZz*B+eH(VonjjfHXqf%eKSR8Q^4%O(YFzmHk!g{|z;<+-+ ztN*-1J&*{T=J-cq3o3SGmB_XvIoLdf@D;6f`9R|+A(Lt0-@ndYWWj+AaFs8W0_*#+PGJU(&|-_d+0 zD{rVrE9X|bA9#YX;;^L>JrJlu#?N{70`(l*P4=uv_@fd_c%o&d(tNqz%WezQUB94? z+=~W0+pc*!Gd8UTTQ;1k=NU|AB16^+ASNCkb-9!3qM!^t(2g8s%Q=k6t4NGE*+R&*S)d_S2@1Zz+#zeX}~e+^{<9 z_4%2=Tz_3uI(Kfcyl`9rx0G!!>uTm#f&_2Zvh4O<{ZUu*KnU+@a1?kLx)nIi1-7zj zE{HSfhQyIGp3dS3k2du{o6_7?d~DWL)g-jq=R{~;sLIi$7kAgUp7^=+;>0JAzG@rZ zINZD5F0~?!?ANrw#}?mIOtM_o>{q@G{Yx9ecX-4Su} zd>mTviqIaA*5uC;eyUS)Fl3Onom)R65Avxt*C+|bbNT1J<9lfIP_ho6j z#kLdD9x)7hPIh|Zf*%rj3=LFJ5|ANkB1d7x|0H? zQfMzGV0Dt3tBpx@?w>=O2K8-8XF=C`n0c!0e^ONeezR$O z%(vjnN%r#vfTIiI4N(3syZayBE|a?kN%8+j`=mnPTd^aodzJeiH~2+7^*?SN_Pf}h zTFT#@{Ie&3G4%g_NL{|MCno$!M%rRL*hXjfNV@5a&CyGTSrrdI%(5f%{xl#P0synp z=U-JAShbpjBLK2B?#f$%eYV(crB5(_R%@SC{Yg+N0iYRkq4&N_JQ0tUHm3etOQ`;8K`#GOQ=Q}SWVJpTj&}17Pj)FDO{w<{`XLLVp zplSqw1}HMz^xp-Y7y%8n?|1q{KA=FE!#|^6NoBW<$V-&HHl7W$ivmw*q-p?NwmFfL zjdt-_95=|i<&`&9Px>|rNDl#4G!pr+W@K_ShQlI`JT=;_QSC?0-IDJ$>95F!s;LJW zd>u2-I+J#?X59WepsoXSaxb_2mDNLKWqG9<0yV6x)iSMH5Cr_6O<<-1=2|sr^YOOn}+ay;1hOV8ZSjpi6RLxMyIU4Z|?87{$AEsybU{+$>^8N>R0& zL2Q`EpOfsilq~D9J!7bvOf>>XLxLdSf$p^7z?7W|NT#nfc#Q{mmAX1omh}d#EMGl- zh$S!4hb?sbUq7c6zgOlf23A3suU3lV#-7?z#0cA9+=_(VFggWoUM@NR$LTP!B~fqB zTgcAk!f8U^$~Td!_lS*E(|l*Z=eS=kNyFE~Ol6(d)FmBb-78-DHNskojwZ=+Nwb5d$L_tIU z0*NHE6cN0s>+KcH~2Z5lDmhG=A5$UZ1m==ddsciLby`h?wj6G${E-d_tt!5lr z;D_5^3Jwc+93>(+|4fb^j?rAjK?Pxh3J;oE_&L3DZ%Nsj@pD3>FB>1q0mW+*#VMW# zy0=T}|*fUUix0GEt1<4S40}7xp=0)ORfxs`=9%Pz6{y zD;~#5m|CgHQaU%UjgD(lbX@bDivyj&-s3S~PNOQ-TLQrQ23JaXOkkfM$M_qk8pyhp zO$+mWOxf@NolA&)AE~z&80XlP{@j?c{rHEoDzSjsSa4%N0e#F_)mi zm)dzFge|WFVobXEA|s%(x52vF+2=hv-H@fh7D@w+RYt*nRz2Y-9M+5DL}BvYf-b0- zyNh074?!?_0ZAqZTTI*Fl&F5h9X5<5)abcn%ljYIr=y23lqpV_RW$qVfyYW>VF#nY zjk=ILDoX7^?m_>eJmwtj!^RO zY+b&7z!fHuhW#hR;W4;Tp)LnEYT z?vW+043MY#{bM3&X^w6w{x3&-cbx3Etn8QkqZ~A!-)DT(AG|wfO-e?A$J~k=xDktu z=IoWR`X?}NKUda}5m330hjJ){4=&Bdb&gsY(S~cU+mKQVZis=lLlt87QJ<51g1_vEeVk|=i7UZPni^Vgl|sl zjjl96$QUDtEqrNbc37Z`3WB!WhV?-g`*XzJ+}`{=1&FCz$#b7VpNC9TGTq+QZuS-w zU_nt%w7$-@`u4X>CS~=eNsGl3qPJ1-M{85V{YBe@U9&s4Jvx4+^(1DQPE7d6(55n9ni%Pg&)O~QIsgF5 zYbAAhI??MLehSj;{J~v+a;^#L_)I48Jkb4NW5Ckxmy;vJ&;u;)@5qJhcYYob@mDq- zIdgmQ8#6FF+b{sH8HJ2fd7cV4*?W8=C93_H)0pT#_&*Vq)!Du1GvE^oQB+aUnp9)D zbXEe-(zbp{QuXH=*DFlPDjUbN$1)XB`QPSV6QMiXD}YRnwfoWZ&wY^+=s-IDGxX^X=2zIR0Y1dOhBYkw zL;!WoHSGk};2P!l;n)NJpk6$#M*+p*f55zcB0K+r=N>hU09IBiRJMeFAf%r;@%}z+ zR|6_9WBD)NynkJ-6bw|x5v;}bumAn)qbYztp{_q!_~nlOl;gPT4z;Lz^B15xz=^?H z&p-;4&q5`TC@WW)2v6rIGeFwkEr$-chs~`5q{i6gZeS1Ks>b4<3$Dr;+cyF{z_bEn z%|U`0{}O`&El@mXGd0xeL-9>+NNCENN{TWUeufTEvFcd;42p3yNSr;rwEcb6fqmdZ zo3=>W*g3DdefvXcfL6gfk#?fPKJxGXM!9EG0WY@~f@jdT{$(^7lc(uiZ1re3Y;HZX*+%#KySyKs|OhJ?vNdem&Y!Df04`s4Z1I-p?wc z48S-7FO~AU$F3POLHM5@%~bwzY{Tx>2^;G_Sxw*O~n0rH literal 0 HcmV?d00001 diff --git a/api-ref/source/_static/images/en-us_image_0203982368.png b/api-ref/source/_static/images/en-us_image_0203982368.png new file mode 100644 index 0000000000000000000000000000000000000000..a33337f18c593868f186f2c6832f56b51e8032bb GIT binary patch literal 32436 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%0AarhGRq!Z(@PRs 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 b?wHM8Gi!;vD9!aZ@JC)o>28j+!OQ;zxy@pq literal 0 HcmV?d00001 diff --git a/api-ref/source/_static/images/en-us_image_0203982493.png b/api-ref/source/_static/images/en-us_image_0203982493.png new file mode 100644 index 0000000000000000000000000000000000000000..a33337f18c593868f186f2c6832f56b51e8032bb GIT binary patch literal 32436 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 n2%Z3h&4Iuaug;dNW(7pt7*wx$hO*yk2CiRF9@Z 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 literal 0 HcmV?d00001 diff --git a/api-ref/source/_static/images/en-us_image_0233732535.png b/api-ref/source/_static/images/en-us_image_0233732535.png new file mode 100644 index 0000000000000000000000000000000000000000..461ef49d800acf4ed1f07d2393b2d89270b24d23 GIT binary patch literal 12188 zcmdtIcTkhj*DVYPN-xp{34#hz1OXE|NL6W~NN-A&-aCmjL8_=o2LS=;y+cArdXO5b z5K5#9gq9Gv3BUJy=ll20y)*aDohQRQhqF(6=A52K=aYHxQmP3f}#^GF^ z|LIqoNJ-(4Sj~^nvD;0hOOYkqbzWjZLvFXbBsb_W*(W|UN-&TT+tq;PB!QGT9rWns zzrDW-=9kchut#*hli2x&OsxjEoM#Vz#vAOtUk6c8byUpx)wQ!5R2b#L-yw zsvYaZMzy%a$}#cr@#>?_)Unq-b~4Q|49tLbm+(4M8|4L$Cow&ro3n~ix4_*cN6{=X zWWqWFMG0(|AuY4IsIXs`3&bi}NQ42Z<*@$KA;}K2KC!=b4y>`jW5*2=$uuI%;ls## z+*f54qLsds(__=xwy@GKOY84_6Y93|Vz^LQ#osh%$!l-{$Uu&}a~*`3d4huEUSdlw z6(QIX$fC>_1Ce89%C-%*|N@6<}IM!k7u+#N`j+&K4J5*ZFiA|Oq zl{n(7PbPWUX}M3ak3MIZXkkM*TTM4$iLsr<#5>fcPbpZbxtK8H?L?g)6assIc}}1g3vSbLs20WTLpw zO!n^+p%uh5y{o)-F(Mpgs+j}FRqXei4dUJb>Ro}K_RIip^EmmY-!wjc1j=sNzjpw( zeaKVn{%59Q>iRnN*OAxIgn1NST*y$EBqVx9sjZe>|7bv}kh2YNEH7S{e_^be-sAlw z#zvjvcXf~iW3`hUOV#Lf?TSy4@EmA#`nK@VnS--5Xy>+z>E0~S`OxNAzOF1HQB@TCJ+&Y%(Q1H0 zquAu^SG^~8)xbRwdm<#{dMUI}C^=zYUwE%<|f8QF1x##dR9jos;sKdNus)OYh_ly(n)oZQ#3At4PtyvY>BApjCQ>;47cJ>R4k}-#@-fcWto%QcbVzV=)74$(4vr&+XebHsW zb5vL8%fta_euOkno=%^_qrfjJGZgy2iu3Fn$+800fWf)#NkKBc08C|-b=4>NM(A0O zX8fZl&1ha1ufL{JQvBMnmy>bm}Y7?b1Bm>*=Gt5bL2la`PwahZ>cX;qRPE|z+1PT3k zlF|0>Z}0=ORNm`ls*PC(S3^{o@RoXGc?7il3y{S#=;i58C0AgmQ~t5eTzz=fImgpk zevfm+aZtGrV?g}n`?nCuoQ=|pW{g&_xfggWJR%@VOpayz^!YB>`3{vBt~#RT7eA9r zNMTV`A)M9XR4q^7!h>^sVIVy^I$pj;X$s=>r8O2|EB}EX%I(9G7aXz! zKeoc9kuI)300E^%8cZbbN5O1Y_BRh}qz9_yP_5)UScrEXhkBd)hE$)=pjLBs-qDka zCg(-Vy4nl9jzRV|%HW$W$qa!xCr1AC&+Fz`0&>Na>44~{dw}#AAxOsF9ohv&z1FgX z;EQ()1#l26$u`aJiZP(ABRb5n! z&fuY%gb>(_$b-^l`Dt;>Ml`^LXU2U&J`n2 zB%#M#>kNNDAQY0S_`)kr=2KDvTev~60!DW^JCxd|6!$~$|TQF zu*+drJ2oyQ!fqp`_v_v`401YjUAnw3@n3ZLDW2ALJyE^t#FFA}&gC=&yZ8-x>pw%? zClF-zr{PyU2IC9C)-PxYqlw=k%E|6mKJ}D`=qS82#kA ztXZ&A4g{<%vgq{kL?t^FUSUvcSf+IzXzn6y{7|M^B~V!Yhf75wudEwSgAFPAB77^E)yv;Iaq%W) z$hyzuobrsDQqycdvV$GB#@tXd`aCC@=J}4iLSe1HzrxwD;tDO;WQmd^GRUMqXB$kG zBZ4@JI*&{@K(B7cW|_~!Bdf`F75`XM;Cb#x)l@PO%9cLMh|Fw6Aj9^&w#v)yN3(i4 zOuCObBL50DxYuU_c+emfkMKMnXEl-FRV~HsO9MCc{ph5i~6A7S4I#`U7vHQT-(E0$vJths>BGRZetL|eqIm@ zP+&uSo_|8P{>>J1diwrY%gY7jRl&RbDe@r+JZQ4}{T^D^%R~E6DhgPlY^7@fw! z(~(JTdgJ5C?gCVDiBXN5%YHciyY<4|9Vi*DMw)Mb@AG96*h`>-<6;&Z(u2ZFp?7Gq{A!^jXmie~bJ6Joy;>0<}}H z94>!*48`yqcg)S+GG$U`6ZVuHB=h#1f72noc9~5(D*YSFRyK-W{rh2gHOR6?ZzIUDT`P;MJ z^R%buLreF*)_bV!SxsuGn9BUS^t+?A@_;9$=52r0qX^K*2Q#&0oPu#&I zg*!v8qX9N?6ty;JzCU)hyuFb!+}oSk45d^U8undyB^~IYy3{Kc)fy5u*w1)MuB70v z#z@T_Wrlei`z%qF9+~)b-;uQ+HC*B1b*-}V;oXcs1J{@1oquFq9P~uh-+MR942}Y( zTP&b@mvJcOfL#?VEjaaG*^PCKdH}YEJrh@*=eh`1wE*v{T;%hghyUj8T>C+xh~kqA za=Q>E-Tk|DC@w97yi5<{tHrF5wFRHZf%zb8jg=lGc%*&xH2!U^*!J6P*v-&~54lcHj!m2>89DxrBFxBf8?u49BQ?`JDFMFC@U!r}7wK~a^8XuZw)xNrTnzv1w=o;-<(on6KJ)>a z@Cyn`pkgw`b6C_Cp+22kM!=v4Ji2;FBF76%Yy(T+owDGWwSv5SjQ;6AQE}sRucNkR)a&B_f!LvX1}pqBFTP#8Ln+vtt+5hZ zjog>k_;HD2RQq z!-%z@2w<8mHq|o+ZZ9@wBsA@PR&O%;S0jXybwT)URIrueN_LDm#;D@G-wedeglX+G z)FDUlqHRk++;H$$SO7MwWtqdBi^Dc#nBZSFMNZ?K((D#d300yZdV=9-D2S zOf;5t4o!|*n46rkO7n`X3DEF;#eg|sB9)}5U=Dx+d0cuPQ%UMV7vYW!PQyPCKv$BS zR#}IS-a+fm;qr6BH@@zbidfGwJ;n~iJO`ZhQpTCp9vhpke7p@LkqKGTt!7|(JyPq* z0eJmre>hjz$+L+8JZC%1lV;whrN1U~bLrrE?{N*JNo)>?eOmGU^-=Xlulz@-LfNOW zt&(Cj&g^ZhB@?fkE1g19`uu!u^>M$=lyVs4No$UMvu`_70#Tq9uoRk1o z3#;|Aav_tGaQ$akkpWM(%IX7lf1{Ry0T*{M{hbugD>83UE4<Ns$Qs|{O8dG{N=v_!J(GPPb%uBtMx8HjDzsQJ)x)=++eMrB*J|s@1 zWFvBHlvLP*Vo6L9#>U0N1iGqHbj?dF->~On#PV{9OGJ@YsChcXV(x!f!b| zO{iwNc(9oJun4;bB`LXY!Nt1XTFLGKnRn`n&(8*ZG`J<>4NU0bE-W_VBZ|GhxCZP<%f=lxXi$X`?ecQ_2q&!@E8;KgJnHk~;Qx#moy zEq*(mgZ<_vFjY2Z&G`z(NA*Urx_K7$f31?_@}haEg4e#pe+1uB@9~jcq1?X?O>*^+ zU^<(HA__h_O7Km`n-ycxHvW0Msb73NNA_9!wCl4&PQ%({Ax@mv4H_k^j4)2Pm@;{T z96q_urU6*SL|S^D@!yrGuU(wrRkK z?g;Fmw=3vXB&VTIIwT_8=aWAXi>>H1i#HlKHC**>OBx@#Hl14H65qdW$GwbMS3* z54=2GoS8W8@hj|f)Abz46@Kfqb9Rv{d@<4s_D{o|cy>93PSI`nx&Q=@dRzyE72esb zzkor;K8_lrkjVu=s&A!|IC(j{HRCL(Ws=qtSa@8g#rev;Xh>}m^!$itXKz^db0%LB zoDXnxf<~~;?J||ygg*c9`r$WIF7xr4iZ@lOPFfM+gUJ)A77Jf**@D$wd-!YzIK^@?hacvpxhDR zp^|bH7Dp>4z%Nga&c3&^u0Spx;|$rse#GGy%R_JyLU3Krh+@F((9l_2Q-b&vRFV^d z_cmDb8IwIXIy+PvgXd!@3dGjvLx7bEzVaU-Q3hFOBwEJD>_gdjdUIhFOO7W&@}49$ zi~%&{*=JO2l|)no@g(aS-@nl}(Ab{v-tgWliN$_2q@M~$K}y8>A9dja#dh)--CXZ0 z!b*uk7`gG%*MD&>ZZ}OlBeeP*;Y_HLB*qsQ*+?6&qzrt{E=S?M+06C-nMMkb#zHLC z83M3RzEqJ6=Q^Y!EMNP5`*4Z4H1aa&&z~j1W<}9 zF<@-`1Y6=6uy4zF%R}zyaj-djOZhyKBhXal`F?fGjyvX%3HLE!L*t5XqK^fToN+=cmarY02?PFE#-ULX=jLPQcmRd+qv`E=3*SCqM6pO-^x z!SP4S2C5c$e$Dclt-JkGb9*r8_n4Rqn8igXDC7$hhWjAdmZ~|>^T}ucX#@BEgNQ{e z--^PWs^kbHOZUSs^=$N>;?GeZ!oh!1PZxPPmEEPX4WkAkDmrZ%Q$C%(WI5B<*5wZ* z6XV!n1`2>U-@2n}K-`=*u^ko8yUET(zPSOs1xeEBru`vQ#^or)ncj+{HY9m zV?7=TE52{iB&rIRP!?plF+CnTAbiUxXc~&hntdpI+DPAWZkx#Z^H|re)&CBt zlDem7G}e%1g_ox%IEgcw>xcH`{qNqY)cS%aYF3T;r(sc)f};h|%4Hz=d>6ZFx1%vC zGekYx7u8{@NuT+bO)dPr`3JDoG_3i{J|rNuGVXptZpBN>h=yQcuTIx=7Wo0&;=|I6 zK~s@7viviJp>dd;z2-c`qIIePgZW@i!!`C*U9!SO+lZjIL^Shp)OU{D-EJfIaY>E< z&gzY=0UegiYox$|l}EQoMi$~3Fr5tn6WS#|n&^?%zEmdn+l0C++h6+FMU0v|u9xHv z97|xMM=77^boRadPE~HF+XNQ)sqDVrsh_>FqEU5MIiEX!rPI}9v;4I+T3mjF)eTr4KTPh=|UBa2KFsQV4q{m7m9XCFK~XgEEplfn4G8h)>wc zJ52wjsAQ};jf9*|-{pW<=tW4f=8NKi630#2#xKrg<&e)Tj{AL-7BK9f zGN*SCOsZ34sKCRIcdQ*FbY>R;srF5^9Q1RBI{vF{XCVwybsJlbQZYjgx8tLR)(vOJ z2l}55L@7U`|KS}w*_(RqdB4@KppPzU?)cU4jjr#vy4b`|jLz(`$g)cfBR>zACyYku z#7VziVo-88q0iz)#+jjmRC4Ud0GN&SNw08dRF~}nUcvd?24KQu{5{+qR+l=rDO!5b z$)H{8=*&txESk4*>c`N-8)nmo$YZFMEIMkkHiZh+Ep$^)*t~YWVW;f6ORCDnIi^hZLD;d6n^2wCIa=DpACg zEs_@Zq-|51N-F$TTEBlj)XiR6t0EQU_`5G_S8}BF*HM~kKSja2Jp{k{g-{SPM}GS~ zai6f|P9}rf8r6f&rBR2$chK`bf9B=Axfnm>ItvNDx3Q31=K&%i0J8#tY5Y;;MPQ{FGmJl@C%&+1J69&s9NnJ#29I-U2Y zz+$x$jkzFTfe zudIiTlJN-fz8S7kHrEJ{z$62l0yJqKPk=6{aqDNF`trBCMj+`?q$UI6uH`wVn8~=> zluMh|sXR=8zS8J2!lHG;VrUlmZ4k8Hu={xouM+(bc^OwpCFd)`5q|Nq&-P-oFUn#e zWsfl$nH^B8U4K`zH^qN;TZ5&!|LG1-T#SzRbn6Q*;z*w`JcDNOKc7^URr=-fFOUvqWHbQEZV7xqs} zhbmm6!Gp+fr=`=b(Ap7K(2!9dC|EjuDhcZTVCSn*wZS=Nd*Lkk5{)E*3(Z3R|8sjDix2Uxa9ncci5a7CEx z)c!0h!RWZjaq?(53xNXo@DSxJQE=QMT<2-`B3H?QoQG%02hU!fth!_T*W|12^p7l>jmK=3K(YvnHDK-ey2JRG2SWEv=HSHf+h?lN zQy1^|j|4FHee|tmB{CUlrZk|=KTU20E-u+u^%S9~LENHmNYq&|Eg)8ODSa1B8`xj_ z*|uN~h)2jW?3Ay{HQKQ44OHEn~Rn|4GhiXSPnZOM^+kgbrspOrSC*~e{ZXEtT2+^*ZlKKX_RLtBAwrQ zttzMl-dAb@iuvFs4q@4=^~Vo0*XvXj?UnD+?>E)6N zQIaF~%Jh%Y6F#@|k!xnQyGLZH>X9`kFvZx+QU?I9i>+y!h9S7&`YEq`<1j+AMJ_in zQ|W3<-dk4108l9#ASS3fRr(UmYEF*}{xxKhDr2{?i|UC)R&QFivEaOFAPO8G0jf=Uy7E{1r~3W4 zeB?@=?KT8|OwO6suFil_mZ1qG2--v>NW6&OSEHmwh~HA~;cG-r#!k zwS%6}?L5&fGhPVOopvKXH61v})*QbjYJd=V=mQc<+*al4x$Ig03^jB!gW^rj(S zsnib|@4+lhqyI*_>=om&jj^?cXtjk%Ods&m*oJNwGkGmJJ`HH3(hzM+kA8`M-RP_a z*etUD;zYY#_Wj;^M;3xKLxcyz^RL0{T~KYkaeIOOdc^qB7wh%1q0AajU-U|tZ@Nn5 z!kEDA1;Z9cvesK8pU2;64fruBaHd6-< z5PXWifOI@4IJ~04Fzs{xK>hhx!-+w2RZ3ike%3$ldl?V6Xw?DwpOh<2<-M$V>N4O4 z_49|7Md61h@^i0Y^cad!`9`n+X}k#fzDfNP>`;?`DG!IT?BGeC%sx4v^=b2+Zk_T$ zo-E+|nVN>2bhs8P@HTi6S#cEnd^!ofRrPGB*&tH}Jhl;Ml_cQ8x0>{HFf}+xaApJ5 z3-)~>^+dAyo#+z=azm0n<^TqV;cw0jck)JfoNKTlv0%mUdxEf!Bmhv9#-ZGM>woJS zZ_>vYry>4Yd&B z<7LnXFQ^DdhyVUPC%-&6ctaeWDaCD{60R}T9$Sqk+T?*)@6~7$UNB24ju!u zu1l&7csJzybIjg3Ixzh2J%B%s`lEdM`nKnM>zwn%1o=n~f6?UV1S3AQev-m!Pl?AM zUOYOn)7)3Os%F7oP>G=&AjnmgYJ@D`EzNKe0_+Imtyq}9UXjLF!p#+l6ml{Gpc&(> zga!Do5jtmQz+XeL7iFL%Kv*r_%0%zQbwX=#Jm<_Fv*ckSfTKO$s^RB%YC>yU6+9f~ zb*S(Y;1G_ta@BppPG~(8g@;D9u#YbYQ~9onzXX#TDs}~}40vdbz0R0}H+ruaLlh2G iC9}B#Q(lrw0B`5H+MoP^DEzH^qGzhwD&x%&0viCY=Qvov zJA!o$q#zIjNLl{5jyHHOOT~#sC3$1#<7uh>G1zjlY_?dxCjF<0aHQ!(A*Gi<9Rrr} zfTMwRPOvF5m@V}rPFD*A9bn1AetaNSuh0d@<0~M4uaag1|cex z4O0JmAB22{^`H4u4iIXJg?r$|y$Q(RF~@52o5O+cWJZ-Mb(cFhC`$X@OHckcTgfe=3h?mr|eRtAIW zSJ>MLnL5TRir#$roZdHT4&oAE$oK3tS;ZiL3*H2NVVVHkzw) z=rAO1Oo8ML%B6KXv$b`jh8OWhd;+eBTP^q}IQiL8ErLg(S){pk^ex`HWJsN7Iof#q zF>*1RG1M%7kGF|oev;%YLP=mD`+A<5=t=XsE5W*!SEzW`=cvuBpjI;n7!3<$ZfgCv z6}0kMOF$ToNN>XS@=auWNl?>^nQ(|Eyd9652uXl=K;+9F?!bhtLyQ$1_B|$5hYZe~ z6C;NS;c_YhWyzNbq8wA__kXiB(3-eAN6V@Q$!RnjY;Dq`UZn z+NM<+j;m)q_alxcH#0Wh69SjK{uQ|7NgN(S&If(1GIXyMnT^5ngp}K2CkTQ1D7it3tlZR zb?R>FLGbMDs^jKGhyR`WQqXN$;O$v-d%*Q8vyQ;8d}i$z zOZrzwlY7^kTT7cX8z#SEcU(`y#Ao#{(JwlX2WOOH!W!Efq6ab!2W3u68^hUK$3+?^ zQ9<-Fql(vm1F~hti-yfMk5j5n*5-$!5B!8t01p3ADpm_#3cOAVL?^ARqBu3tM`6-I zmLvWJvGg)ymzO>_0jmMooB7x=vK%0T=aL;?XRHoq>92b{@OCd>pgOXlXApCIjo!Ct zEf`V3@AlZ=?Zot(UDxL)w+j-!Jsk}Pn|t#OCwj@i|CaNUeKfZ3`AX(uc2FL1cKgH> z8-J?-aPxm|x9Qd48g~R0We43Vn01IF18=<5>7`qXybh@Noi+zEMBP0-6|9`R(L8PD zhy3rUln!J@u*1i{2HFQ*2_DEeOWhW&QGFoj0r{SptX$42=K2dnQbuSNHT-0-h_t;{ z*U;EH-I;cGb$!8BrM@{?rhoD(neAkI^=VeCbbdljgZtH)R94$vqh6141`R%{zR4@) zw@8dJw9<^~75!Fb=T&mBFK3R=>2|6qT}MF*ANt@THHKP}Aa}ZI>vW4lAhqy1Yjn%- zOhPJue3y-1!`@Y@lD9+yKAdwNN4fcBJi?85|J>hYnf-*PE$QR;v=-T7wX^xqL`Glk zJ&C-0O1{mX#~UX%vqHXSyVOzv+d;!$#>Y4KHfKMkoZPH&`MS8i;?r2-Y1+_4w~`eT zBmaU=ecKLqoW3Yzi#hPe%%>R9jOU2vlqFAl!i;3A}zy2qE*~VT-n>4$6MBo?PihVOnLvPZeH2*U1ahRZF?Ao84(+^dAGv^z0 zc^X?=E4j4?%gcx}dYQtWSi13i#aL^n;X691!nPjllg;HgI(q3M^hVFgs)esk<+aPi z>e)18W_&OZt4e!r_nckUQx`NZB(2N`K^{w{2Hl<|wfnFCI;Cw3aC^m86|=SZQ^?o% z;{Dk!q#;KgbtFV6DGB*C*aV*=IHM2jgZ+Z@rVy@zvP19YL}L%@~H3 z^~7g3cgwi6{HxhgMOJ(aG_xyBy0zB%#!vH*gq=;UCb z^klc)6RsZlV4(!PugOATEqgiTTFB6vg`%}a>F7icdJ>laG??%zQ}2_vSO_h_v%Y$p zk^|RVoO(a95XXN(+Pshc&?|l)lipBljEkf}Klo`TWo!0_L{M(h%*T592BXc-Poap7 zs4_x>X!Bpb)T3DXk$qka%ZUB`#-*W{&>^Yt2VI-sJG#a-^mTRY`OZQ6>dHwxeGz#e zK@;`~!kn!>fX-|f1B+2HIriKpo7py|@UnjKj;i#r3;p9=6`Hd%x-oA_3cqiaCN`7} z(Tto7YiA2>Dqj1)bNBWf9z`p-U)NtdMAzHcUGpxqx2WVVNX-R$%X*!g4djS_sEmgk zV{>;EIqzgW^}$2o{bm}q9?|wT!VzD_$}x=WZ%*#r-sl8j?auHpUwm?~Q+Zyp_vS8C zhVClevR}C!$GKAI!pObE!>`@{mSuD&qh|VKdkx?B>;!jDW-LTJAb+!4&-18;h6Rl=bo2VCKZKvd>L`ZF+E}C3#mW!1y{OmH z+Uggvzq>m!v>z~cniKFti$k$a) zsXxUOO9|0tnqd*I6H%3>_L|(Bm{G5B3-(???z9i#sMoKcOhKGo`p+}xomS2^H0Zaw zt{dFXuE^UYeH9`!&bCGuQ}+)9Q>pwLYKQrfQT=L1#>ns$hftm{kg?8Q}+s)>;wRe_q4AzypxTCZ;n* zxV?SMGT=-CH37JJ#la zk(lsea}tuw_(X=-c!45EkijW68@mu(iBUBlgzole_C$-L-S-}$PZI7-S`?-$O^SA= ztHz^uL@`|n#4o=&)c=fIXqTIp)N#23FVM@J#I0e!mVA7O*gsgz&&rZ;k6?CcfA+gs zS+uEjuGvK{Pdi4F{11UajIq!B%SyUxQOB`5;5N?<&b#w~&PW!#L8$t*@>Cgk*_R(1 z4MPvtj`r%>qK6xFEhWg{49{@$62|NccFN#NXIP;Z;UTiq7v1xCmnxvMJh&-rruzxT zSyziFZ-@oz3MbjA%FEMRHQs4{!J(Fjq;Um8C#b|clR;2@D8%2s$7C86D22jALZ-7f zon+ARLD%ydkU6{QN?bU!8Y}YgmSB$9hqkssIq3N&UF_r$1}9xYQqis75t8#_D9~-e zIHo@%8-q)+s$uJFZ(g{0F9L5yTF(Dt5U){3lShW*V!NDZgV*NzP^#l%kZJ>+wB6qo zWU@mk7%6?ELlsp{5hwkI0P*y1JeKVim3^Q}l@{DG<#)Z1)TO6nwD_!Yv|iR;ZJ^b8 zH6r@+H<^0wg6U=FamEnQA~th^Gx#0Jp42L~+_{a{v<&7Sm?PcY331E*{%;TBunUpj zu?a^8Jh2viu{}0E1LLvdePc3`@r)6$h8u?qk0>KC*R{yxd{r7l*B=87=f(=**xm#B z`O^`8Cvg$j-(mPJH>c9E9o4ZbkQEdMKRNy7_s+L9m9%prCPx^2=Oa734oeHUds!xP z?V^Qy*s<1r2XXt$jQVy%F-D;NZI*`f%NeAQ_}_u$VczlknEp z=Opusl$5*13ccIAMn&Rty1p`_e;ySA(bT9LhNvZ?xCX4>2|hk8vWxskC+bE~u;*It zxYV0xLWvgsDf#l$ckZK1GEG*p{TM=bpgkg)f;Y>(7`(K80rGy=*tNq48+6iN<$TOi zmaI;Rn`f-!jb>pL zLfQB>JID1&Jzl3(VZ1&Zo2Dcw1i1ofQ!yZyULYdEV1mwDW8XF?zy75T*Iq$-&D;$NA` zQ8PtoJmaq}a4enjkG?AFCNJ~L*vG%==@02i53j3+(Pc&&7j3Y!zyFvoyTG@9!RUW} z$Q!yUzXOq5#<1EXv%7ei@?}v{qJ@J)YFfzvb?jlYvCdIkDKY7?G8MR2Cs6+5Q}}0< z{;jg?Z9(4hH7&NU$e65k^lWr=$s~8YkM9WoBf~bCeKX4~7kzithlWnO-A!v0fa18E$y#qRqmkR%G5RpX*$9CSJ>7#XO?#qXEaRMuRRfptqqIXyt;wpqFP8ZRftL zw0ed-#jx3Bk#uv%wrkLHid!;+JCkUN_(23e zZ-*8yI`&cy@EQ*u{Az&QEL|KgT^@^K?0Vs?I^CH`TnG$Y9Nc0!Us5bBt#g4EvX|0j zvXeSye78D6QD?)OiReEEBp1ZPt#3QlFnD+Qu79;R9T4$*uQBtou^rJu{{5>vMt|yX zVCbmLIwGOE9f`hK9Gji@azES0$ZC@*5~Y{sY51#o{TpCEHdvn!Jin(~UIVGP4zc}z z$Lob4kc23QInF(A62}Qb75c*Q?~nOK0jnluT)F>hI-THI@O8@)$qF{1Gr=;I^^riF ztBWHHWS>BccR^IVLX|o!z%N=*7`~1@Gr?Q`AOBNUg)q&rJtF&G)KCr>xXXl_ER8ro z{U-#}e;Kn*hmU~z4+|h{L~;_AnE*y-PzQu?u6Aq@mk& z=bp+rIB3N8j9C9zu{u=aEPv@L*y(t5SEVHqLdnjbx37?*z&c&r@|=d|-!wH{#zcR` zdVQuz#X)K~ZAFn>efnQ>wyTl4MU%W+Ez!AOa|SkR-bz^`XA^8ZT@L9(U-RnUgzjt- zY;Bj8vW@eN2Wp~CE?IbN3_R{s&5obAijW`$Gdgv&yNzE&#?`T+Sa16h2_~@Lg>D}k zyRfB5ty~mvV)yT!Hk0ZFXNB~klo%)j{`ebN+R_U~;vz}C6AcBWodq$(F>=3ezR>A(G)OzURs3Y%ws`6nZv%D>bm z@{QAK;e8QK5jx0Q-e(_=-*a-ee#WVQj0)^ztS`(t`+Up7ud$i^L#4N8c|%0kn%AbD zem1tWHR`m?Nf;oGh94R{!BYj#xQ{&#FaACb`3)9rn>^Lb`Xhn!YTX z5i$fzU3zS}9rsRe{g_{Meqkk>m@tv;yz<^d1d}2+)Aw`Ixn>M^@6E`Yhf3)`O4BE`G3;ZY44685aCCZg%lkE8&!~NNZOb`(pd-2rF@3yL8rN<>x7oo>etH zTKo8UzxpS8>{k^=$UPR$q34@B%l=>ES)>mY3M&e&Jn=lbDrVGEdUrQ` zMVJP}q?|IwS;oH>)Hm(gvcUV{7L%zEWTsSFn#jxmxU37qg@a@d>MW0GC-Dxv(~D~i z27Ab>6a`$Oe9IP7sx$ZVLusU>D*rES_1cz7t*ZnFke+>43dQwWMA0(Tz*VRYPx& zDVYUc&3%6HQpJ{~Y+jdy{hFUvzYyELNh)XsCra!juV_fWEPIQ-cfGIhiUN)Q$hb79 zoL;D0lo-fpR1p?n8?$lF*@Fn^n1DfGO_^eh2Nv>3a{w{sq|$B(=AwMRE%2MVne1iF z{0vp6w~c}ccH8cIw>VEtwSI4Q1C*sjmc@|ObF1ag7~&|c7b~EH+Qo7%H=5SH=TArs z5Xn)MZZZyS-8ZdZt}Zs#H_=@j)GSSek2)U(y?c7Ra2ET0T39S`h|l1g1L+l8;+NxB zq~QLCKrSMM{~X`ouGVY`LS>)cfcMznkI`W_X%dYmgXJh9x%@aM5OP`j7EcbdJG@ML zuV@YVlol5hLZ*e;w&mgO3f(6|1ZMc8Ucxf z(~KxPlK`k~2?Ps~nx*BZ0BREgM7)D6TjxsvwbM&Lp!tEo(CK^nPZps6z*(4-z--oq z0B;unC?oxU~p?V6z2^}M`GB>g^#)sGc_}IAq9`!wgpej}MQ6%ihbiB;iEe*8v zX<6XibGT1?+dkSC3ao1z)O5K>i*}8r`*RZBh$P{x6mS-s7XXZ}IFv z_HhudXg!9oXw(n6_tWHpzvaVqXGF#;R|okbjK1tVoX3;JzxY_#@b8wQNOv@i^ba(5 zIcgwqdE94Vs%(6n438x1W~~Q50^_@LXKYX|DX3olWd}Z@VhW3c@O2KTkE~Hyg}~nR zqT63GNZUua*Jn48rB}5UZ`6L z_PUiGAtm_`N~D~=un}XoV+0;F7FrST=%%0e1OsH3$YltHtH^g&u5)PO&A7_WZF)}Z zX%>-gSby*uV&3)?pWsM4;80)Qc=vGT)pPthyo)t>#@GQSGS`c9d)eKMWM%Msm^_0C z9a_LZQrwEEj+qF(jv zqO14K_!hzuhOTsP*%Ap2`_S!=;UD)NE_atj#G=4641OkDAbXR(@B1&vQ#l`UN2Hu4 zJWu}pD&j|ZIZ9Ze-8Cb-Q;4jN%jZkUji=nh@YqGBYaNL4zlugP_&)Q|K0mb0gM_49 z_ieWa$WsBV<^Pn79hwwI&}AL^A@0=zUo4rJ#``o3-CEkb5j^CRr>f8yYgm8sHF?08 ze=EW5OxC6E^Qu%ZBHC!66$>@Q%}7xG9ztzT#o)`uyUaz+`@nh*?QgfYV%hI@JriE! z_GnGqxdmJIY%22{Hg8(+7>V^ep1Eq8vV{PyeHRj391-C>`Ez{?few7}7vNm7mo+ok4q#&Dnws&EqC4>+mOQzQ|fe}N==-hvQW`KkO+s8J3AW0&|uqvK8r z9r*nq`(hsRhRz;;&KO1tnwcvIGiM)Bf-c@pWZ+C;Hn(MOIxxeU7>Z~x3_QqGn5;oS z4k)}sRUEa^kul3lRA5P~w8?iu858_RfL{owpKyR^#Dvbg5P%*NUjg+lr5Xv$gqq_5 zp(@dgAn?7`rvjh~uZ1}!fI@ZpfY@*?2Z8`8t7Zy-Fu?DE7g)=#N;UvNOI$p?6J{24 zEc{{6Ce-D3`@~!-RvXx)u2v`M(h}WT4NI}@61N<(6xPJOcsrw;z2Biq*V|8D6GMMA z^@q2_H-<~uO6GeHs>Y|I@Si}*fTK?Byk)1a9eFVnSp)>SQ&A44(?pSLDZDrn5xAOH zbyX){4Sm_MUJgWf9A%d-N!bJw)DEWjoJQh~1)bfpq{XSh8_)@Q*;41q4XcnPL{vob zYlxOqeYOH|hc;*kG}g@%^*u5X$C(Q-irE=gGCU_CnVzN}$r-kpByqwsfOYJg|I1N) zIQd~X!!_4g+Aw2^FS}zhVo>*yJ~$mz_2z`S(EPKc+#^r-ZK^Eyk)$n8iH8B6ifM$r zUMt)c@QPo1%?;3ne(Bn8W`{TdTcgFpjhle?)wqEPoTVGe^3H6o#N9~2O zN13XmOF-dI@QBWL2(-eApp6)?NLijA7AF0P7t3B>5f;4Xw3<&ACVonvGf7qi5v)90 zH4mt$^g_Spl%)Xetj~PNhq87c1i!Nn^=*SFnAGqk@s+X;IHO(%5F_`h(eYkm%41yYB3?V;=a4dci{vu=43e$0gnXJ+ffA_s2I93xqD7PM$x^;V>{j$#PdCWV1l{DHm9VkrD)= z|9RgF@QGJ?_01+xcOl)7j6g`;-*4T|^r9hH!j?`%8dz_=64wU7G8 zAg+evCvU&x65(H1%Tx`E^qR1{v!iM)9?G+Q{o4I)k^vC(%4vF3or-uE9E1(3mx%F| zPHgi~RBA?t7HiOvz)W{6R3ATB@oQlqcvt5wa^OuHmGGug@q#YKBbYvir05tUc!;!H zSS)Aq1Q$gr+YR&N&?aHT`;;JDUxpX}XY8E^uF1xdG&*=$PRI84J-`Op#eSG7pN1Id zu{E_FSfFr8>^(DNmWxiV;C-FiOH7f-addiYFpbk-0=B9CBc=xjPu|q~d&psi8tA`) z1snykKw)m>12YfsAHC%SfH1}~L2{iZ1k{C#SgVFudZ{eZs<%TaWzz-zyz}n7VqZRM zxHLIaX53#capL*m<>%3{{+9L+|MOyO#N?vmWVHxN#OR4cW-j43O6Wqw+70;wMAGl- z;SN@V_mDaOjMg6tDGh4MDq+Dx$?7UDB8A$?HDPM}1W<}R5UAxrniejALOaF4aZFo` z2$1t29{^Ao_UqFt0Kp6tfn$$dk6LN~!oq;^msj3W2LiyHIDprcZ>#bL0r=yV2ZKBr z1@j*Q5IF^Ct)8@gv<~;uJmWoE@|ijbfIMUjaJ)0KV=V-%hOY%+VdOwDCNQZ7P)D2e zm?~!63$Kw7(C&+O3QwTW_Mn2}3dn6UBJA&V)T2HxPXXm6WdTQOsl2jT0vOD4cw zbw>M<&ffmL@Chqo-ac{{xGcwpUZic=?2_?G>V6CyoKI8+NeFbL)hk%mc{sAJSv-81 z_0W>&vuD`DnFRvqIf9qD>(%)!NxO)Y{F>SsGV8Nv7Y&GKPr z3VJ#Cg*aE2oi;z?b3VJkor|AAf50NirKr@~ z6v){W{T98aezofg176o+K3<*N%F5 zX;N>X!JbXb=N%*`Uq)o!BytaAB&F^dt@;H|c0pvNUp5$53>J>456cQ|XX z3M#y_%`*u6mDGX1L+6j?La)rGl#}1C=+&pNlty=95s1g=bn!F=Gf*a(hbhZpQm#!` z-%gp)r$SM$MX+`nLS>rnW*plfPeI8~-9Fp=tIr-cPAnnr+&z>Ha#PI+h;|?Mf43y^ zU%4loO>Y?)+E#JUYWeh#d11cpZ@G)&^G|s^cL(XvOaHPrvlZ_Y?i^0&Pa^&i&iT1@nmN}Q5D8bb z0d{+Puv!8DDV_je#@mFUDFqNP(gU7Me8u%-qEtLOoce$+OFzh{rF)$O%XOd={gm6u$`uCk=wUptE93&g#o?C{|2xuAwQ1tjFkngl4qI+{CNex z4q!Q?&JvWCeh*|v;SEqDC1C>y-!^bGX@HLrrNngd5L4OpO{>X&!fyB4cnKU*TZ2>Y zuVARZ1Ro);nG8RQGMh0-glyGv3Z~%Cid9e<<(v1YzA-pa&6^nWcL|?T6Pg@ZFX zjn~iPKS*UxMh$rKLh31V5NQ}6?YKbG8n2!WKGuV3zIr#88>7BsLSp_Zt7|3fvY6i| zca-g8h#H<=uI%&RN1&a210i*BI&WvA9AEwK+(^UpkE+bhp&M98V-Zxk5GD-~vQJ-h z^i5O+oQ&&~3!bmqLTAT|5Mq5|7v@jkgs&S8Uzu7`i%VVY&!Ok)W!3(K8)lA`@!o?y zj!Tmm{^Y|`P2DkEkcT$|FEk!2bNk)aUPmwGayj&!2#nSgDeEDJl~KgVte2c48)?J^ z5S&(Fv6Slx-^Omhdbq+*>96xg53o|)pE%^Jj9Y@= zcBU!YoUNqwii(9m;rNgE{35XJKo0A}Vaq3%d;|L6&KGUum%kr8|0!3~CusN~mkf%EmG< z+upC^fA!M*3EcUPmtBHbt+cO-BMZPYNn-Fv2TB1X+$utg1%DjGWRQK~*w37>3`89t z9iQ&+BY-HBWfZL7xJ-EG3AO0WTcE0!7LcnK5+OSt-0Jq}; zT&<2fOAkH@?WnwXHkb(MHJs6ngl#fCr84|GDhN6cCbC*xcx>T zt{Q?=Lu_}?5YQ}t^trB)Bt7bgOxQdb(=*gc2lTFLjFHPET*Ee8Q?RTvPm;*F84q68 zUy$==MsI*#B-S%rWWbU8)X&pT4XKF%=K@O5W1#-BmrnY);CbwEdUGO3G~}7Bkm-r{ zXrV}Zgur@agZ*i&cNT3{n1TeSdfp~_=CP(x$FNQQ@#>2|>qKrAN8)wKrzV`cB7zJ$ zdu-B8PeU@EwSA0T6^wg@IYT{WJ(C79z%o?!k!f0qD{90&j!gSCs;WYY_VST?jnIC| zUB+xsS!Taqomau>9JN;<_i&Fgo)5kjZ$5ov}pH5A-6{TOPlIi zM~_>C#l^c3j$#ogd|a8BIuB0+-x<5_0W~br?7`=4W7AywKLyx6))6H#H5nH+b3@nt z4s7HV!&n$9!6YcT#DNyw8G2?Rv8_Goy(E?M6h*fL_1(UsKTepjEhhTQX}R|nnljR9CNScbCRQeY&e^{%6dE$*9J*;N?Qu_Q>O}Yt)ar^=z4eP8h|AhXXvW2-1z%(Z;F% zevnj4jlGoYH*1v}zT5yu341GtzuUC|jImb_=HlwK=F3ife>F>UIh9T27EYUs1)<`> zIl3bX8UHcsheBs;&)r`eCB;UWN#TJjBBYj%xUBP?TnI_*Cz#C2LQn)c{+k$MJ>Ayo8lFeS-rVz$X}Q0js}VaHlSR zFTxKW7i83^X9}?8RZllwD=KVoF~ooetftAwQpBA-t%yel8ZdN_$ByQLxh>Yv^#~Ux zIJ&F&6@Aviv*ZDft4KXwGS=oKhvUPc`2n=k-%hs@k=cZ~7uJ6QF?chEb-3AT6tu`m zRtiX4swJnb7(UNMBGmd@(B=d}s1lr)4lfX2_7D3fDuuZ}+38)zr?JcTeB<4)YJ3n? zZ)$fYhL~vR+38=~M%qq-H6qDsTt+$zo1UJ> zY11%fPN4C`!p$DD;t(hEg1E1LjZ8IQdQ(0tF^w2%NB+Z zHq{9)pEMMGZAf;l-l=HdNXQ(agIw~Im9#p)(a`>K3@BJ9HvSRe`PC6VDcIaCe6n12 zDHm1E1tUU(UqA-mz7W`@+9lHPO$VkQQUr%N?845! z1O({VMGY~~efY17o)uuw)L&!U0Ev-oFg3uHTRk9t`5#lC0GzOugbD-cQx1v%$k2o$ zBl7+;QwB~FCZ0b6=F)^?0qGa@4>_&>%vgXEZV zX&|!H=Rh8a^-q)RKQo}s-ZNfY3CIIMcmp{AsTk_b?hA#+$6D(LWnSVXTXDq)!2Lwt zvJ*lx@7w#|hjA>o`(_91NvGw#Gp{7$g1|qf!-og%cc_AcG0vfxd1l!El|HM!CdG36 zhkNtH-lh%*D^Hqdw|efMLR)~p`k_7ctCn4Nyh0UHJ|OV4z`Pj7_wZ7O-x9W4(qZz* z=UVQ|^sAz`VtUZu<&};dX-UZm36W+yYnYWP4wv;W-3(wPz=e`;MNYMJ=J2~2CpAnz zXU_UGEcY{1Ya=G!+F;K@iyvct_SdctdkNvg47v$AM7YoBOJXq|HV+9St8o`AL|x6G z@15LyIo*@nmdnbqkFU$8ho`?1X{Gat$JANeXV5L!Q(ptal|T^DIfYWXNC+d%SFyNf z$!WcqO^x6;n5C3L1!5@HNmgGP{xCshtOj#)cE85Q*ER^w>p{=OWdHd@o>Q}3zi2!{ z{y;x3>UQvAAU#F@J-Zo5Umk%CRr+a({S4>*ABU<%LHuW~pmYbU#P#TYK~S^!_>B+d zPENUJ!T#7sximBZ@{ze)UANiB%Ypve0s>uxn>w+fOiOux%D%SQIDTpw^o~y-xQ$I$ zRa$#Li&bc{K~pc3g$@O=6K8oLukaNjo1}AMNSS{}Vo?HPOqC6k)8}T#o zIRd~5UjQCS$t1)X47eTbJ*)j~dejo|yZ=Al)yXvlyQxI|-fIb~-ZOUG8~*h3EP0ZPtBij`7N8JIB-G*AS(_|K!C> zP&?yl+vl!J(_7BP9Tj-&(Bz5KfKSb2s7!%=$|7X}?fz$>!n*}RSl0cGs>=;1&kz2j zg+D2lu|tjUlQmHsNCwoyQSUfeHHIRs%CIcip_eFu_yJIVJp{+$hkc%L{rEjAUhit1 zjFBBMCQf?yJ*o3jfa>JQi;V^4_K_IDpr@sx?amTd7^MF)YANV)A^Agb3O<6%cO>XOD;9*^MA$$m{LP5Zo3)@Q4V_)U^KnBQ{jFbPTu*X>C&5xId^=rCcS2 zE_*>LIR*c|^;c=K&;<82gB_=OAl)E!b>Y*bi;eA6&1_>ickj-Nj7!E-&d9G{Hs4M# zy471`Ks8<8r-DVIoCB`$*C5M%orbjn7ShD~xoJeL@6Ufc;F}t)9(v(s`5MlF;Q8dn zN#$W^9gjVgn*Z9(&MZFLK|;^Wy=7Q7+W9XI?77Ky_QVc|rjh%UOQ&L-1i8j=ekure z@QeQ#Q8!(A3Sn>ZfvAWwnv>T8>LOy0RrI7D&-2A?u~jE4+vUGyoXLT}!v=qEMx&m& zW-g>K3QI|u_+s;OuthMbZ%=Tvd94_~<_V&oz8IIC%K@72>POE!?(N6>xq!&*{gWa^ zXDqHL;%(SK4?@?uMNmL3T&?`U4&IDmIL`M_-WYZCr*Bz|E+^FBlD4N7m>HK{U)>%Y zzk~=il~x+)aUh?e(yc3mU#zZR1nXj&xX;P6oXlj;H1PtB9+c zc)=q1--~RY>dT!VZ`4f^NmSl{2(4U7b1T(38LB$ky-H*tS zc-%Nh0zq2XDRHa2aZp*C2L{e1)e9}1|m&r() zVkEQ6B-`~^eQIgjrK87=BcCqSOHJkh-=pG!J9iCBNaDKH@<*+AM6K?s)2~uO;)7vl zA9Nl0uswCfV5C#IAT2e-B-^@+4aQRnQznTvwBB+f=JqxE-;_8;MgYT;oo`<>EnlII zx+(_az21=CLFC_lu;Y4kJo3^}0+E`=&_Q{zua*qn*=6agOK1Q3OlFx7FyaAH3(o4hl)Q+-`I4oST#~i{wh{z}>iP&BzkSXvHN>D&9xe0hXYO2I7L|E(Pj<04P zvm%tYe~o=5{w}=%D@wTT9KUog)&^NGikyD+?LAEzR{BgweyDsT#3JnPp{` z0`F>C1_Ud4E9y_tJ6yKXiqWhKNFf0kZ+fqWrM{={^%ky`9d9|!9ouA9^6~O^%)7iE zCOGZ8<^@jYf+=q<(@*~Cn`2)qp$32KEc02^PPRR{SQ9gaEn>n7#$BK7ruH%|gp~?C zF1(FWskdK$YolW}Kz}9XL~57Ulc1L2OaO&#X1@F|+4t#}1*as&TfOG_ zEt;|#=ppS2c;3K<_QLUln5ildP`(5`8;K+?#LtjQ(ZnKj!AOLtFt*z z=a3Nj6lKeX&fD3R&+*)}8deLNsyCYd(THc_~rH6)$l;VjIJWUW3euM|`=ffwT#)NkczK5MF(^AMV5 zNd8za>~tw;7jb~^f`*{FVQ$gZe=kbxny=vIMKx&K^wUxtRZ*6Qd*R>oMoTvRO0kQs ztH}dCuUnbrsri*hrI7a&I6R*PHra*)CosT}!YXg6Yfy<+H<70qF9X^2H+#f{P$PS1 z_&_kv$K1~J*-9eYoIb_cuKbkh;eDH3v(pKmpFimQn_>87>8t$G1*SHQO)bT-&Idgk zndDz!y9WH*?l&$K1lx?Rych=D+f%RR%%84_VEWn2zA#H&or&2D-T%1v!R8zLwRRx( zcb_+gJX!^_pgm+78CZOc{6rN1fW9NFO)2e5Hb8wOf~&flVGs zuBnJ=w`zPst*tjZYl0>^;?JR`qbDBoxz`@$wtcF?}E?vn!BT*D=yl!j%N810~z3EaGii9CWTD zcvku7={B8WY-$d=^?K!MQ$V6bq(6$MV=vE)A1yK!OH$aXjU@0z#|ewOvMH(_U$6aO zSJ3s{FCfv^t?eExMe-?kU9`VL$Z37(y=`$>UG5M!5GFlSB{m30)DMPo%BQGjy!nw8 z+yz?C^Tfm!LcK?Oh6N{H!lMZKn zETk8TKV^rp3q555L{A_-_yX}^%1hu8&<%{L20~NHSIKRl{LMK9f=k808{r2)aIpa5 z2Cs_G1keE@y94CVu%(~Y3_$qmzmH7GN5%IYAX7l~Rp0(`R2GOW$@j63drgZEu&Dql z2ZsR4{9qt@ao-0f!@hje`}k7@#Gfl(1&n)T^gi@eCn~nxM>ta;!kwCY!n$uy;RZHm z!4d0wuYI%uF?6SeiV)~k1D*l~A^Ts`odP!hFJ8dm9XOPiG{1gcm<|N|DZf;guY3Uy F`5#hBevJSC literal 0 HcmV?d00001 diff --git a/api-ref/source/_static/images/en-us_image_0279177365.png b/api-ref/source/_static/images/en-us_image_0279177365.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1761fcb72c8fd31559cbf603a749a80f3a87a5 GIT binary patch literal 8104 zcmbVxcUV)~({9wG9z;}7KtVteun?L-K$-LJutz4NXAEmvhhg-Fu(stM~q~llAUo)}A$M&AcK!_U>FRJ#lqnbJQ*KFVG?(lR00|ihMlSmfy1$A7#a-=W-^%+mKfx(Suzla z+1X~6JPVlj_mj~uNK{n($?8IGl3dN-p8i%~2MqN14eZwLf}_0-^C zJeE!&W+F1NL^K*rU0my%S;EhgS<4CuDQ7b2gg8VfsQ?}oMQ1V*nPe=H1`Ec&AQtqj zGf5K*FGl9casmO?Sa76oGlbGB4RbB!S7GuC<}Jrm(PJbVyug{N!rs z2$M`kcWpCw7pW@58U!L_lw}Ua7I}Ogfq0kuhGji8ex8}s#$eL1%qY*du(@jjFF>GEEq`5ylEqK)gFqMWX{p~c^ch*nV9$7N z0(^3l&xJfM!Yt>st=!7!BF#K6cs8XFBwa|G=Cq-Es|4z zx8F?1z`4Xwy|1{^=nDw7dsnaeq*SX3m!5h6jJtVFXr}F36MiQFtGgdtD;XGA>gr&oxA|I;f3oD<)?qxj2*6wCJGDt_|)ZA ztObV)jhk|^$y2?0{mi=r<_dDdV^5aQ90)rGCRRHrH|C|se@qf@cD61hx1IJ{-xRHU z!~f`Xq%~ew)4HF@Gbpg|aNF?XM)v5F15&cv4!tmNf)Kd0!o06=B$w6}v^Irn2WJk4 zDcA6!T{4HQyzL$LcsQ#x3%9A}x8r_Ydilvd=E(7K%~Fp`l22%HjbxYG9~QRgH}ij% zoH`{erRrBVA+&Zt4LZ1CUbo%p$~@_O+uTt@&#+yNp(nSU8ss+~BcL?Cjc`Z=#76nk zS+g6f@o;u>@2gn8^vEoFrg_LpCL|x`()68^PW$u;DXHkSfB|Dr=`n)sStHYk=7SxZ zU*=Ettbtd|mF$AfOi^3(f;OZg!w@&Nr=fJwn$x<{c#d&ouhfE479%0rxtmm)9RVHo zZDTYV*{ej_6&c5rbK<~{G|o~FR&2N0y~_dy4Gpg^JQ#*7xqJbi7UHhDsO;momZR2O zQ5fTXY$*LQ_g4*%p8f5K7u|P%+l;!tT&DVe7m#XDn~-_g-BirOW`->^W@e^@BBh!b z&rOv!z(Z2wQ}^t>08=m7ClmV%@JlPpUHR%9U|<0e3 zDS1Jm`fchU`&Kb>?DMLgf04MO<E#oaK3%IukZ{dBocN!Ss?dlO>x;ypt=6BH zzGtJMPC74li%Xwa+%US{Uv#UnvLc~WVtBH+(jYjmd?BoL3e`@%^M!;pBeME zd1ZUi%i%a*;NGV(wt{YO?xcqmSjcxRM!EZHzA;72&8euUF!$CdfOgq5{2cjo^ z{JDlqtzXqUV0Br(^Rrs`?=LD}oo~yY!v##T5p22%yT^rs!j<<|tidd!6{stRK*<`H=ZoZa-+r$tckyEDz0S>_?h9n{BXUmj z)SwmXkY%-|(==jt#T(L(;xa@zJ0(Wq@>^@C9|)$ma!K2a@YdL(1mp>eO=3I_JOb+r z?u9^Kly<*y29Q7-0%HY}x}M_RmR)PdRVOIxz%c1lNq$A#1)O73Croz?{4hq<3R0&U zUq2Ym-7eC-?-BX(v8+E``ZV=L_p@csl2}to9fzEKjLx*!S@q*C(q4A%vLf;H*e0U! z1&&P7YWVb*fN4HF+8!&RGqU?I-oY1jjW(BU^|WdXekHx&*wx3R!p5p=Y3)~KIyqhe zwmdsh^ahje(vf9(s_ndoG$!t=-}pAZnjCE^I)~+#4rSGPFpT&KLQz-8Yr*1&XE8`f|4? zv;0@z5Tjj=-$Zm+a!&Ln49(n~$b519ltp|TH9@A${&>0hj4O4>ETt7Oj33>@ITYZ! zJOg+9_|M7EPv*`5-Rrk4c(IO}7&YOZwrW`%^o(+#^4bHnpA6)Y;pzFXuJ@nGP6t%- z*VTc&4Z)F()q}R|24Kvxel_(gK}g$`Ns!#P{4`10U)8K1k76O$|>Jy5kVE=#$9F9Ps_M{cgBnFX(l{p3U2_y@fR< z)B1P(%ESlVwF!qRg1`H(A9~Cb{hL8xnm0>2a5M6ChRn0{eM-CE>FBDBjkLN z;yTpz3&9FZ+Wc@}A20*&Sz=x2;r}3#r7tXNelV*n=`UGatCXPj#e-HlpRVqB7!CPa3?zJ8OExyOHuIZ$aMi zM>Vy-VkqSyb&t&(l8q%}TMwE%wcI`&gD|bMtuxl{q;7!*t&ag0yW7@MyrYuwmr_@u z9f5?N#DsN6XcwHcO+J<0yPgs2Cx$=XarXjw39@_rB@D=GOl`}QpNgEAVUX*$% zxg2K1M4Qan-Rt8Or$?C6+fz>f|k0hn(xBu_lN%ngtj zdAnWu?bvl^+~B~(1f-M}-b|ezfFL(nDzUz{A}wr@&cYY0SNEb32IbW#w%%<=F_WEy zEKC+YBTnFz3U0Yk%~|iGUaT-soSX}50Si0v=7~Uy8agC5P828j$re?JtGoGo<{Q7d zw$x6?WHl=m|7wf=9<731kX=x%tf*Nco~6Brl!0r|Oo@g*bv`Tn7MrESrhsi{zFj-p z3$M@0A?18r=F2$>T}I`nhrs1RaIOe8ZLQM-l`VdoSq?Ct@*cHuTQ8??l-WQxa-1?^ zTv90I&Vv)8+M1G|M~+woMIh680!-I}HZvO2A6y)X81qPPg^Nr}(U$(CD|)2P#M(Hd z2c90ZX?i~k`F_2aSvpY$Lv1JdOHR@kH47`1tz-T8YR)|pjQ}h@dP^=yE@vZ@q`GUx z>e&sr`7gCYJ?bw$+;Wd?6XZYx%U8t2OhSx<#;4V9?>qu0;P&?(s@ZUr&PHyW8!83( zJo~G?C0&BB0<|kNUtkHMqr%^wah`IytljMGr4_5J{bXzHTYhNZ<9X_IstELY7#?ke z_#b*$&NCe7dkE^^#Hf@kK7 zh?ot6S9agl-z_Oq^>6}?#AclfW#6kGRz{Ze`&}ueQoLD9fc?_{u<%;bNTlM0TET!v zUDM(NH5*-00$&SJ_!img$|n&}Uo7~|%xj?7YN~%xQstqa2hQ?}ZR?the3(`PLI`s|Qb-no;NX~)B z<(JYZ$~viea;4n!|g{(XpS1iRjVq&3{OB{7{T+j+IA_t0?w! z5(7NDj)5=WOsk@cf-%iM?irbs&ptmJWU-B+%tUGt6E^q}J_q(a0DJ|e( zxa~LaVxtouu1*bhT>C6o)iiP)>_qTzn1A5N{|#LJi3X%ef`-Uol)$zx$~eKn>9JQh z(RKh8&3Mv=d71672$Xels^7|FuV4MC@IdWm23@D1?nw^!nOOcZ3gxq|H4$@b=~#)^ z*`YK59@$3&0!C2<JUA3ed9v zm%zq6kT*2`C0&$tfNLo;<8cKpfxi81GQRwm>c*<>gxwjn!Tr*pd$nr>Ucs53l0);G zy~-zX;Qf{%$ZXphu$$N5D^m6o3mS2HF2w6;-+FADJl~CBb^kN7knH=Iv)OcGT>We! zyK$Q8$E2}t+eG>y`RY#tMB5R~xv+py?~t4x*4@X{<40U2HJ`i7zsaSGrt@R{B@_5{ zsu#0s#VZeKN^c!b=hr@VfIgUx{5aUy^JJsZPuC#n;1v&Ij0m%2Ig}rtFI`9Sqf?u^ zgA$xaNRT$YM_PV27Q$YM0-hytM*y!+9r|}X!lIzRIp=>yJ~bNQuQ}iRE%O?}@xMzv z7A5@$O!s$*_rHq2|AaUdZb27`4|>$)txBZ2Pp>poRwymib|3xhC2w)@bZ}L^yS=W- zhM_lY2Rhk@lkVqtUDq=Cv2thhmNQK=74Ej;l1}-xr`Sp?R!OM|1r%|~(r{7d+qa-a zJoyKaHaHQ_>k?KCOLPU^XFLiV=gM7A^19mbE5s*WQ$A0lV`pSh#m})u7e<-hBJP zA%tt`G;#6~rt=kx^gOoo*HDS9R_L`Hh^1^Qrkz%5FtOY_4IRJaGSQ(XRIEvERus5!Wf4&N4J5CpNV8|ed?uH6eyiadV4Ie6;|v%(XacI$3@sA!ISb8>HFSorev&&>AE=!Bz_4s zh_SadPkVx|unEaffZ|C~Iz(ZneV{{wRC~fV@bD_O21ww1aw0&X_e}eo`IT8+*~0s0ZmzMQ zb4QGEu3JUN+{FD+uXeMF>fO3q@-uTQogd#15rXPGwE}EwMEqMCG^IMs5kJ~AV^Hf# z3!@A7JdLe5BK^qlwRqPLg)(06EJkkC+M;&z7T#BeDc*zvI;U{@V@pg`-A~}1WoH6V zyj$g|pT{(rgLgx-5GS4y{jXPBC>{IJ0V3 z14o(R=LKQ3h5}4vsI-3jrpaT8?pll^R^oK>E+d*&B7rS>*wYWq3GEy$PRa5sG-6}N z8ui^7HfC;r2@N#SNbE*iO7TRJFnl~^-|uX~tZu9$3x#A~zPoE7+IBcbJRj$u+ziTX z(aL{Xlq?kKSH2%Mut6W0rQPEXxa>EYC~oe@Pye1@x1s}c<(cWsmr4mH8V$@s*42e@ zb)rF*{Q_T?p7-%-T#eN~FI4tos+I?`uMzoT-f}2;n%99yiRYqgW8!ku@~+}Vao}Yf zMCu){SUrY4KJHafLn*^Y&O7ln;ym^4MT__4$#4+F)5f z?vRv-YH0Kwi`*?56eVKjo|zXUo9FZgLCs+sXCE%R8WD>UZ*7bEnm*P``_XUvf(-V% z>-%%^^3AKaPvENgc$T?um=)^t91kyR0dos1JAM(>t$#<v%MX(*gB0T8_A86jh~;+R2@KST zt`KrG;w<3?y+ECIX%rzs2+33Ffb%b^sV>KHI} z>?TO=6kD)E%>J;&83(>_NZl^{P}upr#F#M3>zR@MN-1d1&$~{v-~8Sc<-E9)0=DWh zI%3`WdN6;tg+%APem9gXv`GFplGU@wUpbuz^^m-M2q#MdOZsCIPKwfcR0H9uP-8Kp zFg58VWt|fJ7cOIx)#Zx~K^_)3Zrm@0(L!kpm|zEP!%`2quiBp4nw8FjXdEjDkF@cW zmESjbv<`-%T4C9CPMIGW;Q5n+wuZhaJ6Fy1tE%0?A=+-NGL-;Ol##0r6)VJgx633} zw{bIO5d7liM$|eOYnzPf;uwDYp-(8^uKCn!y~(*SFGddU?iM}0xf5qP?t%10StJ$Lg2}7^QTaNW z|Hh8YR4{ z`9F4|y;<#LfthD(gnd$wGdqDnIiB@7h5f3!ID@0fI0h3@o^;NxX}*@{n9`w(g@9y` zW(JFaX|UA%!epw_b*R%ZXOzVyXpt_0)zEZp1q=NmJJ_AufH1f3UEtntF|h8eWxs02 zGf@n)m(jHB(~k=dEy@y4q?zIGOJvpoTb82z1Ae3~Z&MS45^Y7L(JJ7}eT^H#kE~+F z)=aZ1{L9>;$A+#Tr>1@Mo}&sRlS?-m=2`h=>(79p;U+Ty|9jH=YA>b*&6kS9?d(02 z`6As_f4|%L0aW-*K0h5`miDDvCB=vnXB=muqaf&yy_&V%2w!({TQS>9j z(tz{Z@OSXGME9VpZ&%k=@LLJ}c2;~Uv*N;iS97Sr@bE?;Ke?SH%FFPaSI zsqn!$ZX~2?d^tDV=o!(WktJBYudUkH&iE*`Ly`Wy&?EiZQ-Ce7H}@d5f>&3en_}=> zB;vI~EyiAgqxY6im85h}G)bQgBK5`w=f&P+takivS_xLqUW$bK_4=t?EfLIBuYN_V zrt|_X2@Abo9!U~rsde|-(!imE*_kzRp+A$c#Y`%^vm5R;AJ`x6umT6{zOBa*Gw%5?ER6lL0Un z&ahC(OB610I$$&D^zPf4AZd1$_Mmf!zg<| z1|aLDToEL@5q$S*){C3x&BUQqCtc6K+IZK%i2EG+coraD(zDxs$qoLT>grN=(r#fc zOcB@f{H3hdOTS+Blj-(KKWvc3p0uE~mP|C2W4{}oSIRpI}6Ggry2dR(FC>|KX|Q`cE<7(rSZ Ly6WZkp9TLL{|6+M literal 0 HcmV?d00001 diff --git a/api-ref/source/api_usage_guidelines.rst b/api-ref/source/api_usage_guidelines.rst new file mode 100644 index 0000000..2edc400 --- /dev/null +++ b/api-ref/source/api_usage_guidelines.rst @@ -0,0 +1,41 @@ +:original_name: cce_02_0344.html + +.. _cce_02_0344: + +API Usage Guidelines +==================== + +Cloud APIs comply with the RESTful API design principles. REST-based web services are organized into resources. Each resource is identified by one or more Uniform Resource Identifiers (URIs). An application accesses a resource based on the resource's Unified Resource Locator (URL). A URL is usually in the following format: *https://Endpoint/uri*. In the URL, *uri* indicates the resource path, that is, the API access path. + +Cloud APIs use HTTPS as the transmission protocol. Requests/Responses are transmitted by using JSON messages, with media type represented by **Application/json**. + +- The URL of APIs described in :ref:`Cluster Management ` is in the format of *https://Endpoint/uri*. In the URL, uri indicates the resource path, that is, the API access path. Use X-Auth-Token as a header. + +- The URL of Kubernetes-native APIs described in :ref:`Add-on Management ` and :ref:`Kubernetes APIs ` is in the format of **https://{clusterid}.Endpoint/uri**. In the URL, {clusterid} indicates a cluster ID, and uri indicates the resource path, that is, the API access path. Use X-Auth-Token as a header. + +- The URL of Kubernetes-native APIs is in the format of **https://{publicip}:5443/uri**. In the URL, **{publicip}** indicates EIP of the cluster, and **uri** indicates the resource path, that is, the API access path. Use X-Remote-User or Authorization as a header. + + Before using X-Remote-User as a header, obtain the required certificate in advance. Two types of certificates are supported: + + - Self-owned certificate uploaded during cluster creation. For details, see `Creating a Cluster `__. + + |image1| + + - Cluster certificate generated and downloaded after cluster creation. For details, see `Obtaining a Cluster Certificate `__. + + |image2| + +For details about how to use APIs, see `API Usage Guidelines `__. + +CCE provides two methods to authenticate requests for calling an API: token and AK/SK. Select an authentication method based on actual requirements. If token-based authentication is used, you can call service APIs by using either of the following methods after obtaining a token: + +- Method 1: Add **X-Auth-Token** to the request header and set **X-Auth-Token: ${token}** with the obtained IAM token. +- Method 2: Add **Authorization** to the request header and set **Authorization: Bearer ${token}** with the obtained IAM token or token from Kubernetes service account. +- Method 3: Add **X-Remote-User** to the request header and set **X-Remote-User**: **user** with a valid certificate. + +.. note:: + + Method 3 requires that the CA root certificate must has been uploaded before you create a cluster on the CCE console. For details, see `Cluster Management Permission Control `__. + +.. |image1| image:: /_static/images/en-us_image_0000001121602072.png +.. |image2| image:: /_static/images/en-us_image_0227096557.png diff --git a/api-ref/source/apis/add-on_management/deleting_an_add-on_instance.rst b/api-ref/source/apis/add-on_management/deleting_an_add-on_instance.rst new file mode 100644 index 0000000..db25571 --- /dev/null +++ b/api-ref/source/apis/add-on_management/deleting_an_add-on_instance.rst @@ -0,0 +1,85 @@ +:original_name: cce_02_0324.html + +.. _cce_02_0324: + +Deleting an Add-on Instance +=========================== + +Function +-------- + +This API is used to delete an add-on instance. + +.. note:: + + The URL for add-on management is in the format of **https://{clusterid}.Endpoint/uri.** In the URL, *{clusterid}* indicates the cluster ID, and *uri* indicates the resource path, that is, the path for API access. + +URI +--- + +DELETE /api/v3/addons/{id}?cluster_id={cluster_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0324__table493910491373: + +.. table:: **Table 1** Parameter description + + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========+===============================================================================================================================+ + | cluster_id | Yes | String | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | id | Yes | String | Add-on instance ID. For details about how to obtain the ID, see :ref:`Table 4 `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters:** + +:ref:`Table 2 ` list the request parameters. + +.. _cce_02_0324__table061744914219: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). | + | | | | + | | | Default: **application/json** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request:** + +N/A + +Response +-------- + +**Response parameters:** + +N/A + +**Example response:** + +.. code-block:: + + success + +Status Codes +------------ + +.. table:: **Table 3** Status codes + + =========== =========== + Status Code Description + =========== =========== + 200 OK + =========== =========== + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/add-on_management/index.rst b/api-ref/source/apis/add-on_management/index.rst new file mode 100644 index 0000000..dab9e48 --- /dev/null +++ b/api-ref/source/apis/add-on_management/index.rst @@ -0,0 +1,24 @@ +:original_name: cce_02_0320.html + +.. _cce_02_0320: + +Add-on Management +================= + +- :ref:`Installing an Add-on Instance ` +- :ref:`Reading Add-on Templates ` +- :ref:`Updating an Add-on Instance ` +- :ref:`Deleting an Add-on Instance ` +- :ref:`Reading an Add-on Instance ` +- :ref:`Listing Add-on Instances ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + installing_an_add-on_instance + reading_add-on_templates + updating_an_add-on_instance + deleting_an_add-on_instance + reading_an_add-on_instance + listing_add-on_instances diff --git a/api-ref/source/apis/add-on_management/installing_an_add-on_instance.rst b/api-ref/source/apis/add-on_management/installing_an_add-on_instance.rst new file mode 100644 index 0000000..ee84d31 --- /dev/null +++ b/api-ref/source/apis/add-on_management/installing_an_add-on_instance.rst @@ -0,0 +1,344 @@ +:original_name: cce_02_0322.html + +.. _cce_02_0322: + +Installing an Add-on Instance +============================= + +Function +-------- + +This API is used to install an add-on instance by using the add-on template. One or more instances will be created for the installed add-on. + +.. note:: + + The URL for add-on management is in the format of **https://{clusterid}.Endpoint/uri.** In the URL, *{clusterid}* indicates the cluster ID, and *uri* indicates the resource path, that is, the path for API access. + +URI +--- + +POST /api/v3/addons + +Request +------- + +**Request parameters:** + +:ref:`Table 1 ` lists the request parameters. + +.. _cce_02_0322__headerparameter: + +.. table:: **Table 1** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Parameters in the request body + + +------------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+===========================================================+=============================================================================+ + | kind | Yes | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | apiVersion | Yes | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | metadata | Yes | :ref:`metadata ` object | Basic information about the add-on. Metadata is a collection of attributes. | + +------------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | spec | Yes | :ref:`spec ` object | Detailed description of add-on installation or upgrade. | + +------------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0322__table12181142512286: + +.. table:: **Table 3** Data structure of the metadata field + + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================+ + | annotations | Yes | Object | Add-on annotations in the format of key-value pairs. | + | | | | | + | | | | For add-on installation, the value is fixed at **{"addon.install/type":"install"}**. | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. _cce_02_0322__instancerequestspec: + +.. table:: **Table 4** Data structure of the spec field + + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+===========+========+===============================================================================================================================================================================================================================================================================================================================================================+ + | clusterID | Yes | String | Cluster ID. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | version | Yes | String | Version number of the add-on to be installed or upgraded, for example, v1.0.0. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | addonTemplateName | Yes | String | Name of the add-on template to be installed, for example, coredns. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | values | Yes | Object | Add-on template installation parameters (varying depending on the add-on). During the add-on upgrade, you need to specify all the installation parameters. If the parameters are not specified, the default values in the add-on template are used. The current add-on installation parameters can be obtained through the API for querying add-on instances. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0322__table634384511511: + +.. table:: **Table 5** Data structure of the values field + + ========= ========= ====== ================================ + Parameter Mandatory Type Description + ========= ========= ====== ================================ + basic Yes Object Basic add-on information. + custom No Object Custom parameters of the add-on. + ========= ========= ====== ================================ + +**Example request:** + +.. code-block:: + + { + "metadata": { + "annotations": { + "addon.install/type": "install" + } + }, + "spec": { + "clusterID": "9dd81b6e-e8e5-11ea-8aeb-0255ac11161d", + "version": "1.1.10", + "addonTemplateName": "gpu-beta", + "values": { + "basic": { + "obs_url": "obs.eu-de.otc.t-systems.com", + "region": "eu-de", + "swr_addr": "10.125.7.25:20202", + "swr_user": "test", + "rbac_enabled": true + }, + "custom": { + "is_driver_from_nvidia": true, + "nvidia_driver_download_url": "https://us.download.nvidia.com/tesla/396.37/NVIDIA-Linux-x86_64-396.37.run" + } + } + } + } + +Response +-------- + +**Response parameters:** + +For the description about response parameters, see :ref:`Table 6 `. + +.. _cce_02_0322__responseparameter: + +.. table:: **Table 6** Parameters in the response body + + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=============================================================================+ + | kind | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Basic information about the add-on. Metadata is a collection of attributes. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the add-on instance. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | status | :ref:`status ` object | Add-on instance status. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0322__response_metadata: + +.. table:: **Table 7** Data structure of the metadata field + + +-------------------+--------+------------------------------------------------------+ + | Parameter | Type | Description | + +===================+========+======================================================+ + | uid | String | Unique ID of the add-on. | + +-------------------+--------+------------------------------------------------------+ + | name | String | Add-on name. | + +-------------------+--------+------------------------------------------------------+ + | labels | Object | Add-on labels in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | annotations | Object | Add-on annotations in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on was updated. | + +-------------------+--------+------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on was created. | + +-------------------+--------+------------------------------------------------------+ + +.. _cce_02_0322__response_instancespec: + +.. table:: **Table 8** Data structure of the spec field + + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=====================+==================+=========================================================================================+ + | clusterID | String | Cluster ID. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | version | String | Add-on template version, for example, v1.0.0. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | addonTemplateName | String | Add-on template name, for example, coredns. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | addonTemplateType | String | Add-on template type. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | addonTemplateLabels | Array of strings | Group to which the add-on template belongs. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | addonTemplateLogo | String | OBS address of the current add-on logo. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | description | String | Add-on template description. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | values | Object | Add-on template installation parameters. These parameters vary depending on the add-on. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + +.. _cce_02_0322__response_status: + +.. table:: **Table 9** Data structure of the status field + + +----------------+---------------------------------------------------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +================+===============================================================+===============================================================+ + | status | String | Add-on instance status. | + +----------------+---------------------------------------------------------------+---------------------------------------------------------------+ + | Reason | String | Cause of unsuccessful add-on installation. | + +----------------+---------------------------------------------------------------+---------------------------------------------------------------+ + | message | String | Installation error details. | + +----------------+---------------------------------------------------------------+---------------------------------------------------------------+ + | targetVersions | Array of strings | Versions to which the current add-on version can be upgraded. | + +----------------+---------------------------------------------------------------+---------------------------------------------------------------+ + | currentVersion | :ref:`currentVersion ` object | Current version of the add-on instance. | + +----------------+---------------------------------------------------------------+---------------------------------------------------------------+ + +.. _cce_02_0322__response_versions: + +.. table:: **Table 10** Data structure of the currentVersion field + + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + | Parameter | Type | Description | + +===================+=================================================================================+=================================================+ + | version | String | Add-on version. | + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + | input | Object | Add-on installation parameters. | + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + | stable | Boolean | Whether the add-on version is a stable release. | + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + | translate | Object | Translation information used by the GUI. | + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + | supportVersions | Array of :ref:`supportVersions ` objects | Cluster versions that support the add-on. | + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + | creationTimestamp | String | Time when the add-on was created. | + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + | updateTimestamp | String | Time when the add-on was updated. | + +-------------------+---------------------------------------------------------------------------------+-------------------------------------------------+ + +.. _cce_02_0322__response_supportversions: + +.. table:: **Table 11** Data structure of the supportVersions field + + +----------------+------------------+----------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+==================+========================================================================================+ + | clusterType | String | Cluster type that supports the add-on. | + +----------------+------------------+----------------------------------------------------------------------------------------+ + | clusterVersion | Array of strings | Cluster versions that support the add-on. The parameter value is a regular expression. | + +----------------+------------------+----------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + { + "kind": "Addon", + "apiVersion": "v3", + "metadata": { + "uid": "b6ba182c-f7c5-11ea-a975-0255ac111605", + "name": "gpu-beta", + "creationTimestamp": "2020-09-16T02:38:33Z", + "updateTimestamp": "2020-09-16T02:38:33Z" + }, + "spec": { + "clusterID": "9dd81b6e-e8e5-11ea-8aeb-0255ac11161d", + "version": "1.1.10", + "addonTemplateName": "gpu-beta", + "addonTemplateType": "helm", + "addonTemplateLogo": "https://obs.eu-de.otc.t-systems.com/cce-addon-eu-de-aw1hz2u/gpu-betalogo.svg", + "addonTemplateLabels": [ + "Accelerator" + ], + "description": "A device plugin for nvidia.com/gpu resource on nvidia driver", + "values": { + "basic": { + "obs_url": "obs.eu-de.otc.t-systems.com", + "platform": "linux-amd64", + "rbac_enabled": true, + "region": "eu-de", + "swr_addr": "10.125.7.25:20202", + "swr_user": "test" + }, + "custom": { + "is_driver_from_nvidia": true, + "nvidia_driver_download_url": "https://us.download.nvidia.com/tesla/396.37/NVIDIA-Linux-x86_64-396.37.run" + } + } + }, + "status": { + "status": "installing", + "Reason": "", + "message": "", + "targetVersions": null, + "currentVersion": { + "version": "1.1.10", + "input": { + "basic": { + "obs_url": "obs.eu-de.otc.t-systems.com", + "region": "eu-de", + "swr_addr": "10.125.7.25:20202", + "swr_user": "test" + }, + "parameters": { + "custom": { + "is_driver_from_nvidia": true, + "nvidia_driver_download_url": "" + } + } + }, + "stable": true, + "translate": { + "en_US": { + "addon": { + "changeLog": "1.Supports both the default driver link address and the user-definable driver address download driver 2.Support kubernetes 1.15/1.17", + "description": "A device plugin for nvidia.com/gpu resource on nvidia driver" + }, + "description": { + "Parameters.custom.drivers_info.cuda": "CUDA Toolkit", + "Parameters.custom.drivers_info.product": "Product", + "Parameters.custom.drivers_info.product_series": "Product Series", + "Parameters.custom.drivers_info.product_type": "Product Type", + "Parameters.custom.nvidia_driver_download_url": "Download the nvidia driver accroding to the input link" + }, + "key": { + "Parameters.custom.nvidia_driver_download_url": "Nvidia Driver" + } + } + }, + "supportVersions": null, + "creationTimestamp": "2020-08-21T08:25:51Z", + "updateTimestamp": "2020-08-28T12:21:11Z" + } + } + } + +Status Codes +------------ + +.. table:: **Table 12** Status codes + + =========== =========== + Status Code Description + =========== =========== + 201 OK + =========== =========== + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/add-on_management/listing_add-on_instances.rst b/api-ref/source/apis/add-on_management/listing_add-on_instances.rst new file mode 100644 index 0000000..66130d6 --- /dev/null +++ b/api-ref/source/apis/add-on_management/listing_add-on_instances.rst @@ -0,0 +1,290 @@ +:original_name: cce_02_0326.html + +.. _cce_02_0326: + +Listing Add-on Instances +======================== + +Function +-------- + +This API is used to list all add-on instances in the cluster. + +.. note:: + + The URL for add-on management is in the format of **https://{clusterid}.Endpoint/uri.** In the URL, *{clusterid}* indicates the cluster ID, and *uri* indicates the resource path, that is, the path for API access. + +URI +--- + +GET /api/v3/addons?cluster_id={cluster_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0326__table489613501374: + +.. table:: **Table 1** Parameter description + + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========+===============================================================================================================================+ + | cluster_id | Yes | String | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +**Request parameters:** + +:ref:`Table 2 ` lists the request parameters. + +.. _cce_02_0326__table52418212211: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request:** + +N/A + +Response +-------- + +**Response parameters:** + +For details about the response parameters, see :ref:`Table 3 `. + +.. _cce_02_0326__responseparameter: + +.. table:: **Table 3** Parameters in the response body + + +------------+---------------------------------------------------------------------+-----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=====================================================================+=============================================================================+ + | kind | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+---------------------------------------------------------------------+-----------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------------------+-----------------------------------------------------------------------------+ + | metadata | String | Basic information about the add-on. Metadata is a collection of attributes. | + +------------+---------------------------------------------------------------------+-----------------------------------------------------------------------------+ + | items | Array of :ref:`items ` objects | Add-on instance list. | + +------------+---------------------------------------------------------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0326__response_addoninstance: + +.. table:: **Table 4** Data structure of the items field + + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=============================================================================+ + | kind | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Basic information about the add-on. Metadata is a collection of attributes. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the add-on instance. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | status | :ref:`status ` object | Add-on instance status. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0326__response_metadata: + +.. table:: **Table 5** Data structure of the metadata field + + +-------------------+--------+------------------------------------------------------+ + | Parameter | Type | Description | + +===================+========+======================================================+ + | uid | String | Unique ID of the add-on instance. | + +-------------------+--------+------------------------------------------------------+ + | name | String | Add-on name. | + +-------------------+--------+------------------------------------------------------+ + | labels | Object | Add-on labels in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | annotations | Object | Add-on annotations in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-------------------+--------+------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on instance was created. | + +-------------------+--------+------------------------------------------------------+ + +.. _cce_02_0326__response_instancespec: + +.. table:: **Table 6** Data structure of the spec field + + +---------------------+------------------+-----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=====================+==================+=============================================================================+ + | clusterID | String | Cluster ID. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | version | String | Add-on template version, for example, v1.0.0. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | addonTemplateName | String | Add-on template name, for example, coredns. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | addonTemplateType | String | Add-on template type. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | addonTemplateLabels | Array of strings | Group to which the add-on template belongs. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | description | String | Add-on template description. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | values | Object | Add-on template installation parameters. These parameters vary with add-on. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0326__response_status: + +.. table:: **Table 7** Data structure of the status field + + +----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+=========================================================+======================================================================+ + | status | String | Add-on instance status. | + +----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | Reason | String | Cause why the system failed to list add-on instances. | + +----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | message | String | Details about the error that occurred when listing add-on instances. | + +----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | targetVersions | Array of strings | Versions to which the current add-on version can be upgraded. | + +----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | currentVersion | :ref:`versions ` object | Current add-on version. | + +----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + +.. _cce_02_0326__response_versions: + +.. table:: **Table 8** Data structure of the versions field + + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=================================================================================+===========================================================+ + | version | String | Add-on version. | + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | input | Object | Add-on installation parameters. | + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | stable | Boolean | Indicates whether the add-on version is a stable release. | + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | translate | Object | Translation information used by the GUI. | + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | supportVersions | Array of :ref:`supportVersions ` objects | Cluster versions that support the add-on. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on instance was created. | + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-----------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + +.. _cce_02_0326__response_supportversions: + +.. table:: **Table 9** Data structure of the supportVersions field + + +----------------+------------------+----------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+==================+========================================================================================+ + | clusterType | String | Cluster type that supports the add-on. | + +----------------+------------------+----------------------------------------------------------------------------------------+ + | clusterVersion | Array of strings | Cluster versions that support the add-on. The parameter value is a regular expression. | + +----------------+------------------+----------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + { + "apiVersion": "v3", + "kind": "Addon", + "items": [ + { + "metadata": { + "uid": "8ca259cc-553b-11e9-926f-0255ac101a31", + "name": "storage-driver", + "creationTimestamp": "2019-04-02T11:36:26Z", + "updateTimestamp": "2019-04-02T11:36:26Z" + }, + "apiVersion": "v3", + "kind": "Addon", + "spec": { + "addonTemplateName": "storage-driver", + "addonTemplateLogo": "https://192.168.48.66/cce-addon-aw1hz2u/storage-driverlogo.svg", + "addonTemplateType": "helm", + "values": { + "flavor": { + "replicas": 1 + }, + "basic": { + "obs_url": "", + "swr_user": "swr_test", + "euleros_version": "2.2.5", + "addon_version": "1.0.10", + "platform": "linux-amd64", + "swr_addr": "10.125.6.246:20202" + }, + "parameters": {} + }, + "description": "A kubernetes FlexVolume Driver used to support cloud storage", + "addonTemplateLabels": [ + "Storage" + ], + "clusterID": "0c0e4a63-5539-11e9-95f7-0255ac10177e", + "version": "1.0.10" + }, + "status": { + "message": "", + "Reason": "Install complete", + "currentVersion": { + "input": { + "basic": { + "obs_url": "", + "swr_user": "swr_test", + "euleros_version": "2.2.5", + "swr_addr": "10.125.6.246:20202" + }, + "parameters": {} + }, + "stable": true, + "creationTimestamp": "2019-03-29T13:45:37Z", + "version": "1.0.10", + "translate": { + "en_US": { + "addon": { + "changeLog": "The plug-in is upgraded to enhance the storage plug-in function.", + "description": "A kubernetes FlexVolume Driver used to support cloud storage" + } + }, + "zh_CN": { + "addon": { + "changeLog": "", + "description": "" + } + } + }, + "updateTimestamp": "2019-03-29T13:45:37Z" + }, + "status": "running" + } + } + ] + } + +Status Codes +------------ + +.. table:: **Table 10** Status codes + + =========== =========== + Status Code Description + =========== =========== + 200 OK + =========== =========== + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/add-on_management/reading_add-on_templates.rst b/api-ref/source/apis/add-on_management/reading_add-on_templates.rst new file mode 100644 index 0000000..6155cb5 --- /dev/null +++ b/api-ref/source/apis/add-on_management/reading_add-on_templates.rst @@ -0,0 +1,373 @@ +:original_name: cce_02_0321.html + +.. _cce_02_0321: + +Reading Add-on Templates +======================== + +Function +-------- + +This API is used to query add-on information. + +.. note:: + + The URL for add-on management is in the format of **https://{clusterid}.Endpoint/uri.** In the URL, *{clusterid}* indicates the cluster ID, and *uri* indicates the resource path, that is, the path for API access. + +URI +--- + +GET /api/v3/addontemplates + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0321__table737034819716: + +.. table:: **Table 1** Parameter description + + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+=============================================================================================+ + | addon_template_name | No | Name of the specified template. If this parameter is left blank, all templates are queried. | + | | | | + | | | Minimum: **2** | + | | | | + | | | Maximum: **30** | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------+ + +.. _cce_02_0321__section93858481877: + +Request +------- + +**Request parameters:** + +:ref:`Table 2 ` lists the request parameters. + +.. _cce_02_0321__table8687245142017: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). | + | | | | + | | | Default: **application/json** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + | | | | + | | | Maximum: **16384** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request:** + +NA + +Response +-------- + +For details about the response parameters, see :ref:`Table 3 `. + +.. _cce_02_0321__responseparameter: + +.. table:: **Table 3** Parameters in the response body + + +------------+------------------------------------------------------------+------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+============================================================+==================================================================+ + | kind | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+------------------------------------------------------------+------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+------------------------------------------------------------+------------------------------------------------------------------+ + | items | :ref:`items ` objects | Add-on template list. | + +------------+------------------------------------------------------------+------------------------------------------------------------------+ + +.. _cce_02_0321__response_addontemplate: + +.. table:: **Table 4** Data structure of the items field + + +------------+---------------------------------------------------------+----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+============================================================================+ + | kind | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Basic information about an add-on. Metadata is a collection of attributes. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the add-on template. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------+ + +.. _cce_02_0321__response_metadata: + +.. table:: **Table 5** Data structure of the metadata field + + +-------------------+--------+------------------------------------------------------+ + | Parameter | Type | Description | + +===================+========+======================================================+ + | uid | String | Unique ID of the add-on template. | + +-------------------+--------+------------------------------------------------------+ + | name | String | Add-on name. | + +-------------------+--------+------------------------------------------------------+ + | labels | Object | Add-on labels in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | annotations | Object | Add-on annotations in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-------------------+--------+------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on instance was created | + +-------------------+--------+------------------------------------------------------+ + +.. _cce_02_0321__response_templatespec: + +.. table:: **Table 6** Data structure of the spec field + + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + | Parameter | Type | Description | + +=============+===================================================================+=============================================+ + | type | String | Template type (helm or static). | + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + | require | Boolean | Whether the add-on is installed by default. | + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + | labels | Array of strings | Group to which the template belongs. | + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + | logoURL | String | URL of the logo image. | + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + | readmeURL | String | URL of the readme file. | + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + | description | String | Template description. | + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + | versions | Array of :ref:`versions ` objects | Template version details. | + +-------------+-------------------------------------------------------------------+---------------------------------------------+ + +.. _cce_02_0321__response_versions: + +.. table:: **Table 7** Data structure of the versions field + + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + | Parameter | Type | Description | + +===================+=================================================================================+====================================================+ + | version | String | Add-on version. | + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + | input | Object | Add-on installation parameters. | + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + | stable | Boolean | Whether the add-on version is a stable release. | + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + | translate | Object | Translation information used by the GUI. | + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + | supportVersions | Array of :ref:`supportVersions ` objects | Cluster versions that support the add-on template. | + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + | creationTimestamp | String | Creation time of the add-on instance. | + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-------------------+---------------------------------------------------------------------------------+----------------------------------------------------+ + +.. _cce_02_0321__response_supportversions: + +.. table:: **Table 8** Data structure of the supportVersions field + + +----------------+------------------+-------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+==================+=================================================================================================+ + | clusterType | String | Cluster type that supports the add-on template. | + +----------------+------------------+-------------------------------------------------------------------------------------------------+ + | clusterVersion | Array of strings | Cluster versions that support the add-on template. The parameter value is a regular expression. | + +----------------+------------------+-------------------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + { + "kind": "Addon", + "apiVersion": "v3", + "items": [ + { + "kind": "Addon", + "apiVersion": "v3", + "metadata": { + "uid": "coredns", + "name": "coredns", + "creationTimestamp": "2020-07-13T20:04:33Z", + "updateTimestamp": "2020-07-13T20:04:34Z" + }, + "spec": { + "type": "helm", + "require": true, + "labels": [ + "ServiceDiscovery" + ], + "logoURL": "https://***/cce-addon-aw1hz2u/corednslogo.svg", + "description": "CoreDNS is a DNS server that chains plugins and provides Kubernetes DNS Services", + "versions": [ + { + "version": "1.15.3", + "input": { + "basic": { + "cluster_ip": "10.247.3.10", + "platform": "linux-amd64", + "swr_addr": "10.125.13.11:20202", + "swr_user": "test" + }, + "parameters": { + "custom": { + "stub_domains": "", + "upstream_nameservers": "" + }, + "flavor1": { + "name": 2500, + "replicas": 2, + "resources": [ + { + "limitsCpu": "500m", + "limitsMem": "512Mi", + "name": "coredns", + "requestsCpu": "500m", + "requestsMem": "512Mi" + } + ] + }, + "flavor2": { + "name": 5000, + "replicas": 2, + "resources": [ + { + "limitsCpu": "1000m", + "limitsMem": "1024Mi", + "name": "coredns", + "requestsCpu": "1000m", + "requestsMem": "1024Mi" + } + ] + }, + "flavor3": { + "name": 10000, + "replicas": 2, + "resources": [ + { + "limitsCpu": "2000m", + "limitsMem": "2048Mi", + "name": "coredns", + "requestsCpu": "2000m", + "requestsMem": "2048Mi" + } + ] + }, + "flavor4": { + "name": 20000, + "replicas": 4, + "resources": [ + { + "limitsCpu": "2000m", + "limitsMem": "2048Mi", + "name": "coredns", + "requestsCpu": "2000m", + "requestsMem": "2048Mi" + } + ] + } + } + }, + "stable": true, + "translate": { + "en_US": { + "addon": { + "changeLog": "add workaround for klog/coredns crash issue", + "description": "CoreDNS is a DNS server that chains plugins and provides Kubernetes DNS Services" + }, + "description": { + "Parameters.custom.stub_domains": "The target nameserver may itself be a Kubernetes service. For instance, you can run your own copy of dnsmasq to export custom DNS names into the ClusterDNS namespace, a JSON map using a DNS suffix key (e.g. "acme.local") and a value consisting of a JSON array of DNS IPs.", + "Parameters.custom.upstream_nameservers": "If specified, then the values specified replace the nameservers taken by default from the node's /etc/resolv.conf. Limits:a maximum of three upstream nameservers can be specified, A JSON array of DNS IPs.", + "Parameters.flavor1.description": "Concurrent domain name resolution ability - External domain name:2500 qps, Internal domain name:10000 qps", + "Parameters.flavor1.name": 2500, + "Parameters.flavor2.description": "Concurrent domain name resolution ability - External domain name:5000 qps, Internal domain name:20000 qps", + "Parameters.flavor2.name": 5000, + "Parameters.flavor3.description": "Concurrent domain name resolution ability - External domain name:10000 qps, Internal domain name:40000 qps", + "Parameters.flavor3.name": 10000, + "Parameters.flavor4.description": "Concurrent domain name resolution ability - External domain name:20000 qps, Internal domain name:80000 qps", + "Parameters.flavor4.name": 20000 + }, + "key": { + "Parameters.custom.stub_domains": "stub domain", + "Parameters.custom.upstream_nameservers": "upstream nameservers" + } + }, + "fr_FR": { + "addon": { + "changeLog": "ajouter une solution de contournement pour le problème de plantage klog / coredns", + "description": "Un serveur DNS qui enchaîne les plug-ins et fournit des services DNS Kubernetes." + }, + "description": { + "Parameters.custom.stub_domains": "Le serveur de noms cible peut lui-même être un service Kubernetes. Par exemple, vous pouvez exécuter votre propre copie de dnsmasq pour exporter des noms DNS personnalisés dans l'espace de noms ClusterDNS, une carte JSON à l'aide d'une clé de suffixe DNS (par exemple, «acme.local») et une valeur constituée d'un tableau JSON d'adresses IP DNS.", + "Parameters.custom.upstream_nameservers": "Si spécifié, les valeurs spécifiées remplacent les serveurs de noms pris par défaut dans le fichier /etc/resolv.conf du nœud. Limites: un maximum de trois serveurs de noms en amont peuvent être spécifiés, un tableau JSON d'adresses IP DNS.", + "Parameters.flavor1.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 2500 qps, Nom de domaine interne: 10000 qp", + "Parameters.flavor1.name": 2500, + "Parameters.flavor2.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 5000 qps, Nom de domaine interne: 20000 qp", + "Parameters.flavor2.name": 5000, + "Parameters.flavor3.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 10000 qps, Nom de domaine interne: 40000 qp", + "Parameters.flavor3.name": 10000, + "Parameters.flavor4.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 20000 qps, Nom de domaine interne: 80000 qp", + "Parameters.flavor4.name": 20000 + }, + "key": { + "Parameters.custom.stub_domains": "domaine stub", + "Parameters.custom.upstream_nameservers": "serveurs de noms en amont" + } + }, + "zh_CN": { + "addon": { + "changeLog": "", + "description": "" + }, + "description": { + "Parameters.custom.stub_domains": "", + "Parameters.custom.upstream_nameservers": "", + "Parameters.flavor1.description": "", + "Parameters.flavor1.name": 2500, + "Parameters.flavor2.description": "", + "Parameters.flavor2.name": 5000, + "Parameters.flavor3.description": "", + "Parameters.flavor3.name": 10000, + "Parameters.flavor4.description": "", + "Parameters.flavor4.name": 20000 + }, + "key": { + "Parameters.custom.stub_domains": "", + "Parameters.custom.upstream_nameservers": "" + } + } + }, + "supportVersions": [ + { + "clusterType": "VirtualMachine", + "clusterVersion": [ + "v1.15.*" + ] + } + ], + "creationTimestamp": "2020-07-13T20:04:33Z", + "updateTimestamp": "2020-07-13T20:04:33Z" + } + ] + } + } + ] + } + +Status Codes +------------ + +:ref:`Table 9 ` describes the status codes of this API. + +.. _cce_02_0321__en-us_topic_0079614900_table46761928: + +.. table:: **Table 9** Status codes + + =========== =========== + Status Code Description + =========== =========== + 200 OK + =========== =========== + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/add-on_management/reading_an_add-on_instance.rst b/api-ref/source/apis/add-on_management/reading_an_add-on_instance.rst new file mode 100644 index 0000000..0d4074c --- /dev/null +++ b/api-ref/source/apis/add-on_management/reading_an_add-on_instance.rst @@ -0,0 +1,257 @@ +:original_name: cce_02_0325.html + +.. _cce_02_0325: + +Reading an Add-on Instance +========================== + +Function +-------- + +This API is used to obtain details about an add-on instance. + +.. note:: + + The URL for add-on management is in the format of **https://{clusterid}.Endpoint/uri.** In the URL, *{clusterid}* indicates the cluster ID, and *uri* indicates the resource path, that is, the path for API access. + +URI +--- + +GET /api/v3/addons/{id}?cluster_id={cluster_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0325__table14230135012719: + +.. table:: **Table 1** Parameter description + + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========+===============================================================================================================================+ + | cluster_id | Yes | String | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | id | Yes | String | Add-on instance ID. For details about how to obtain the ID, see :ref:`Table 4 `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters:** + +:ref:`Table 2 ` lists the request parameters. + +.. _cce_02_0325__table913035652115: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). | + | | | | + | | | Default: **application/json** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request:** + +N/A + +Response +-------- + +**Response parameters:** + +For details about the response parameters, see :ref:`Table 3 `. + +.. _cce_02_0325__responseparameter: + +.. table:: **Table 3** Parameters in the response body + + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=============================================================================+ + | kind | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Basic information about the add-on. Metadata is a collection of attributes. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the add-on instance. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | status | :ref:`status ` object | Add-on instance status. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0325__response_metadata: + +.. table:: **Table 4** Data structure of the metadata field + + +-------------------+--------+------------------------------------------------------+ + | Parameter | Type | Description | + +===================+========+======================================================+ + | uid | String | Unique ID of the add-on instance. | + +-------------------+--------+------------------------------------------------------+ + | name | String | Add-on name. | + +-------------------+--------+------------------------------------------------------+ + | labels | Object | Add-on labels in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | annotations | Object | Add-on annotations in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-------------------+--------+------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on instance was created. | + +-------------------+--------+------------------------------------------------------+ + +.. _cce_02_0325__table17851616154117: + +.. table:: **Table 5** Data structure of the spec field + + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=====================+==================+=========================================================================================+ + | clusterID | String | Cluster ID. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | version | String | Add-on template version, for example, v1.0.0. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | addonTemplateName | String | Add-on template name, for example, coredns. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | addonTemplateType | String | Add-on template type. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | addonTemplateLabels | Array of strings | Group to which the add-on template belongs. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | description | String | Add-on template description. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + | values | Object | Add-on template installation parameters. These parameters vary depending on the add-on. | + +---------------------+------------------+-----------------------------------------------------------------------------------------+ + +.. _cce_02_0325__response_status: + +.. table:: **Table 6** Data structure of the status field + + +----------------+---------------------------------------------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +================+=========================================================+===============================================================+ + | status | String | Add-on instance status. | + +----------------+---------------------------------------------------------+---------------------------------------------------------------+ + | Reason | String | Cause why the system failed to read add-on instance details. | + +----------------+---------------------------------------------------------+---------------------------------------------------------------+ + | message | String | Installation error details. | + +----------------+---------------------------------------------------------+---------------------------------------------------------------+ + | targetVersions | Array of strings | Versions to which the current add-on version can be upgraded. | + +----------------+---------------------------------------------------------+---------------------------------------------------------------+ + | currentVersion | :ref:`versions ` object | Current add-on version. | + +----------------+---------------------------------------------------------+---------------------------------------------------------------+ + +.. _cce_02_0325__response_versions: + +.. table:: **Table 7** Data structure of the versions field + + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=================================================================================+=========================================================+ + | version | String | Add-on version. | + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + | input | Object | Add-on installation parameters. | + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + | stable | Boolean | Whether the add-on version is a stable release. | + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + | translate | Object | Translation information used by the GUI. | + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + | supportVersions | Array of :ref:`supportVersions ` objects | Cluster versions that support the add-on. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on instance was created. | + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-----------------------+---------------------------------------------------------------------------------+---------------------------------------------------------+ + +.. _cce_02_0325__response_supportversions: + +.. table:: **Table 8** Data structure of the supportVersions field + + +----------------+-----------------+----------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+=================+========================================================================================+ + | clusterType | String | Cluster type that supports the add-on. | + +----------------+-----------------+----------------------------------------------------------------------------------------+ + | clusterVersion | Array of string | Cluster versions that support the add-on. The parameter value is a regular expression. | + +----------------+-----------------+----------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + { + "kind": "Addon", + "apiVersion": "v3", + "metadata": { + "uid": "24b23108-55c0-11e9-926f-0255ac101a31", + "name": "gpu-beta", + "creationTimestamp": "2019-04-03T03:25:34Z", + "updateTimestamp": "2019-04-03T03:25:34Z" + }, + "apiVersion": "v3", + "kind": "Addon", + "spec": { + "addonTemplateName": "gpu-beta", + "addonTemplateLogo": "", + "addonTemplateType": "helm", + "values": { + "basic": { + "rbac_enabled": true, + "swr_user": "swr_test", + "swr_addr": "10.125.6.246:20202" + } + }, + "description": "A device plugin for nvidia.com/gpu resource on nvidia driver", + "addonTemplateLabels": [ + "Accelerator" + ], + "clusterID": "0c0e4a63-5539-11e9-95f7-0255ac10177e", + "version": "1.0.0" + }, + "status": { + "message": "", + "Reason": "", + "currentVersion": { + "input": { + "basic": { + "swr_user": "swr_test", + "swr_addr": "10.125.6.246:20202" + }, + "parameters": {} + }, + "stable": true, + "creationTimestamp": "2018-10-23T13:14:55Z", + "version": "1.0.0", + "translate": { + "en_US": { + "addon": { + "changeLog": "A device plugin for nvidia.com/gpu resource on nvidia driver", + "description": "A device plugin for nvidia.com/gpu resource on nvidia driver" + } + } + }, + "updateTimestamp": "2018-12-07T09:40:24Z" + }, + "status": "installing" + } + } + +Status Codes +------------ + +.. table:: **Table 9** Status codes + + =========== ===================== + Status Code Description + =========== ===================== + 200 OK + 500 Internal Server Error + =========== ===================== + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/add-on_management/updating_an_add-on_instance.rst b/api-ref/source/apis/add-on_management/updating_an_add-on_instance.rst new file mode 100644 index 0000000..7ee33c7 --- /dev/null +++ b/api-ref/source/apis/add-on_management/updating_an_add-on_instance.rst @@ -0,0 +1,334 @@ +:original_name: cce_02_0323.html + +.. _cce_02_0323: + +Updating an Add-on Instance +=========================== + +Function +-------- + +This API is used to update an add-on instance. + +.. note:: + + The URL for add-on management is in the format of **https://{clusterid}.Endpoint/uri.** In the URL, *{clusterid}* indicates the cluster ID, and *uri* indicates the resource path, that is, the path for API access. + +URI +--- + +PUT /api/v3/addons/{id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0323__table422018491378: + +.. table:: **Table 1** Parameter description + + +-----------+-----------+--------+------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========+==================================================================================================================+ + | id | Yes | String | Add-on instance ID. For details about how to obtain the ID, see :ref:`Table 7 `. | + +-----------+-----------+--------+------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters:** + +:ref:`Table 2 ` and :ref:`Table 3 ` list the request parameters. + +.. _cce_02_0323__table1999124252111: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0323__requestparameter: + +.. table:: **Table 3** Parameters in the request body + + +-----------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+===========================================================+=============================================================================+ + | kind | Yes | String | API type. The value is fixed at **Addon** and cannot be changed. | + +-----------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | apVersion | Yes | String | API version. The value is fixed at **v3** and cannot be changed. | + +-----------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | metadata | Yes | :ref:`metadata ` object | Basic information about the add-on. Metadata is a collection of attributes. | + +-----------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + | spec | Yes | :ref:`spec ` object | Detailed description of add-on installation or upgrade. | + +-----------+-----------+-----------------------------------------------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0323__table12181142512286: + +.. table:: **Table 4** Data structure of the metadata field + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================+ + | labels | No | Object | Add-on labels in the format of key-value pairs. | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------+ + | annotations | Yes | Object | Add-on annotations in the format of key-value pairs. | + | | | | | + | | | | For add-on upgrade, the value is fixed at **{"addon.upgrade/type":"upgrade"}**. | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------+ + +.. _cce_02_0323__instancerequestspec: + +.. table:: **Table 5** Data structure of the spec field + + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+===========+========+===============================================================================================================================================================================================================================================================================================================================================================+ + | clusterID | Yes | String | Cluster ID. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | version | Yes | String | Version number of the add-on to be installed or upgraded, for example, v1.0.0. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | addonTemplateName | Yes | String | Name of the add-on template to be installed, for example, storage-driver. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | values | Yes | Object | Add-on template installation parameters (varying depending on the add-on). During the add-on upgrade, you need to specify all the installation parameters. If the parameters are not specified, the default values in the add-on template are used. The current add-on installation parameters can be obtained through the API for querying add-on instances. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request:** + +.. code-block:: + + { + "kind": "Addon", + "apiVersion": "v3", + "metadata": { + "annotations": { + "addon.upgrade/type": "upgrade" + } + }, + "spec": { + "clusterID": "0ffc68e4-5538-11ea-9b4d-0255ac10167e", + "version": "1.0.19", + "addonTemplateName": "storage-driver", + "values": { + "flavor": { + "description": "Has only one instance", + "name": "Single", + "replicas": 1, + "resources": [ + { + "limitsCpu": "100m", + "limitsMem": "300Mi", + "name": "metrics-server", + "requestsCpu": "100m", + "requestsMem": "300Mi" + } + ] + } + } + } + } + +Response +-------- + +**Response parameters:** + +For details about the response parameters, see :ref:`Table 6 `. + +.. _cce_02_0323__responseparameter: + +.. table:: **Table 6** Parameters in the response body + + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=============================================================================+ + | kind | String | API type. The value is fixed at **Addon** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Basic information about the add-on. Metadata is a collection of attributes. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the add-on instance. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + | status | :ref:`status ` object | Add-on instance status. | + +------------+---------------------------------------------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0323__response_metadata: + +.. table:: **Table 7** Data structure of the metadata field + + +-------------------+--------+------------------------------------------------------+ + | Parameter | Type | Description | + +===================+========+======================================================+ + | uid | String | Unique ID of the add-on instance. | + +-------------------+--------+------------------------------------------------------+ + | name | String | Add-on name. | + +-------------------+--------+------------------------------------------------------+ + | labels | Object | Add-on labels in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | annotations | Object | Add-on annotations in the format of key-value pairs. | + +-------------------+--------+------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-------------------+--------+------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on instance was created. | + +-------------------+--------+------------------------------------------------------+ + +.. _cce_02_0323__response_instancespec: + +.. table:: **Table 8** Data structure of the spce field + + +---------------------+------------------+-----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=====================+==================+=============================================================================+ + | clusterID | String | Cluster ID. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | version | String | Add-on template version, for example, v1.0.0. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | addonTemplateName | String | Add-on template name, for example, coredns. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | addonTemplateType | String | Add-on template type. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | addonTemplateLabels | Array of strings | Group to which the add-on template belongs. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | description | String | Add-on template description. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + | values | Object | Add-on template installation parameters. These parameters vary with add-on. | + +---------------------+------------------+-----------------------------------------------------------------------------+ + +.. _cce_02_0323__response_status: + +.. table:: **Table 9** Data structure of the status field + + +----------------+---------------------------------------------------------+--------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+=========================================================+==========================================================================+ + | status | String | Add-on instance status. | + +----------------+---------------------------------------------------------+--------------------------------------------------------------------------+ + | Reason | String | Cause of unsuccessful add-on updating. | + +----------------+---------------------------------------------------------+--------------------------------------------------------------------------+ + | message | String | Details about the error that occurred when updating the add-on instance. | + +----------------+---------------------------------------------------------+--------------------------------------------------------------------------+ + | targetVersions | Array of strings | Versions to which the current add-on version can be upgraded. | + +----------------+---------------------------------------------------------+--------------------------------------------------------------------------+ + | currentVersion | :ref:`versions ` object | Current add-on version. | + +----------------+---------------------------------------------------------+--------------------------------------------------------------------------+ + +.. _cce_02_0323__response_versions: + +.. table:: **Table 10** Data structure of the versions field + + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | Parameter | Type | Description | + +===================+=================================================================================+===========================================================+ + | version | String | Add-on version. | + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | input | Object | Add-on installation parameters. | + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | stable | Boolean | Indicates whether the add-on version is a stable release. | + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | translate | Object | Translation information used by the GUI. | + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | supportVersions | Array of :ref:`supportVersions ` objects | Cluster versions that support the add-on. | + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | creationTimestamp | String | Time when the add-on instance was created. | + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + | updateTimestamp | String | Time when the add-on instance was updated. | + +-------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------+ + +.. _cce_02_0323__response_supportversions: + +.. table:: **Table 11** Data structure of the supportVersions field + + +----------------+------------------+----------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+==================+========================================================================================+ + | clusterType | String | Cluster type that supports the add-on. | + +----------------+------------------+----------------------------------------------------------------------------------------+ + | clusterVersion | Array of strings | Cluster versions that support the add-on. The parameter value is a regular expression. | + +----------------+------------------+----------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + { + "kind": "Addon", + "apiVersion": "v3", + "metadata": { + "uid": "24b23108-55c0-11e9-926f-0255ac101a31", + "name": "gpu-beta", + "creationTimestamp": "2019-04-03T03:25:34Z", + "updateTimestamp": "2019-04-03T03:25:34Z" + }, + "apiVersion": "v3", + "kind": "Addon", + "spec": { + "addonTemplateName": "gpu-beta", + "addonTemplateLogo": "", + "addonTemplateType": "helm", + "values": { + "basic": { + "rbac_enabled": true, + "swr_user": "swr_test", + "swr_addr": "10.125.6.246:20202" + } + }, + "description": "A device plugin for nvidia.com/gpu resource on nvidia driver", + "addonTemplateLabels": [ + "Accelerator" + ], + "clusterID": "0c0e4a63-5539-11e9-95f7-0255ac10177e", + "version": "1.0.0" + }, + "status": { + "message": "", + "Reason": "", + "currentVersion": { + "input": { + "basic": { + "swr_user": "swr_test", + "swr_addr": "10.125.6.246:20202" + }, + "parameters": {} + }, + "stable": true, + "creationTimestamp": "2018-10-23T13:14:55Z", + "version": "1.0.0", + "translate": { + "en_US": { + "addon": { + "changeLog": "A device plugin for nvidia.com/gpu resource on nvidia driver", + "description": "A device plugin for nvidia.com/gpu resource on nvidia driver" + } + }, + "zh_CN": { + "addon": { + "changeLog": "", + "description": "" + } + } + }, + "updateTimestamp": "2018-12-07T09:40:24Z" + }, + "status": "installing" + } + } + +Status Codes +------------ + +.. table:: **Table 12** Status codes + + =========== =========== + Status Code Description + =========== =========== + 200 OK + =========== =========== + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/api_version_query/index.rst b/api-ref/source/apis/api_version_query/index.rst new file mode 100644 index 0000000..ea613db --- /dev/null +++ b/api-ref/source/apis/api_version_query/index.rst @@ -0,0 +1,16 @@ +:original_name: cce_02_0348.html + +.. _cce_02_0348: + +API Version Query +================= + +- :ref:`Querying All API Versions ` +- :ref:`Querying Information About API v3 ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + querying_all_api_versions + querying_information_about_api_v3 diff --git a/api-ref/source/apis/api_version_query/querying_all_api_versions.rst b/api-ref/source/apis/api_version_query/querying_all_api_versions.rst new file mode 100644 index 0000000..53f4c00 --- /dev/null +++ b/api-ref/source/apis/api_version_query/querying_all_api_versions.rst @@ -0,0 +1,105 @@ +:original_name: cce_02_0349.html + +.. _cce_02_0349: + +Querying All API Versions +========================= + +Function +-------- + +This API is used to query all available API versions. + +URI +--- + +GET / + +Request +------- + +N/A + +Response +-------- + +**Response parameters:** + +:ref:`Table 1 ` describes the response parameters. + +.. _cce_02_0349__table986610460219: + +.. table:: **Table 1** Response parameters + + ========= ===== ================= + Parameter Type Description + ========= ===== ================= + versions Array API version list. + ========= ===== ================= + +.. table:: **Table 2** Data structure of the versions field + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================+ + | id | Yes | String | API version ID, for example, v3. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------+ + | links | Yes | String | API URL. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------+ + | min_version | No | String | API microversion. | + | | | | | + | | | | - If the API has microversions, the parameter value is the earliest version number supported. | + | | | | - If the API does not have microversions, the parameter is left blank. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------+ + | status | Yes | String | API version status. | + | | | | | + | | | | - **CURRENT**: The version is a mainstream version. | + | | | | - **SUPPORTED**: The version is not the latest one but it is still in use. | + | | | | - **DEPRECATED**: The version is deprecated and will probably be deleted. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------+ + | updated | Yes | String | Version release time in UTC. For example, the parameter value for v1 is 2014-06-28T12:20:21Z. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------+ + | version | Yes | String | API version number. | + | | | | | + | | | | - If the API version has microversions, the parameter value is the highest version number supported. | + | | | | - If the API version does not have API mini versions, the parameter is left blank. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + { + "versions": [ + { + "id": "v3", + "links": [ + { + "href": "https://container.eu-de.***.t-systems.com/v3", + "rel": "self" + } + ], + "min_version": "", + "status": "CURRENT", + "updated": "2018-09-15T00:00:00Z", + "version": "" + } + ] + } + +Status Code +----------- + +:ref:`Table 3 ` describes the status code of the API. + +.. _cce_02_0349__t8935d48c19714740abd2e888a39be462: + +.. table:: **Table 3** Status code + + =========== ================================== + Status Code Description + =========== ================================== + 200 The query operation is successful. + =========== ================================== + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/api_version_query/querying_information_about_api_v3.rst b/api-ref/source/apis/api_version_query/querying_information_about_api_v3.rst new file mode 100644 index 0000000..18c0262 --- /dev/null +++ b/api-ref/source/apis/api_version_query/querying_information_about_api_v3.rst @@ -0,0 +1,77 @@ +:original_name: cce_02_0350.html + +.. _cce_02_0350: + +Querying Information About API v3 +================================= + +Function +-------- + +This API is used to query information about API v3. + +URI +--- + +GET /v3 + +Request +------- + +N/A + +Response +-------- + +**Response parameters:** + +:ref:`Table 1 ` describes the response parameters. + +.. _cce_02_0350__table986610460219: + +.. table:: **Table 1** Response parameters + + ========= ===== ================= + Parameter Type Description + ========= ===== ================= + versions Array API version list. + ========= ===== ================= + +**Example response:** + +.. code-block:: + + { + "versions": [ + { + "id": "v3", + "links": [ + { + "href": "https://container.eu-de.***.t-systems.com/v3", + "rel": "self" + } + ], + "min_version": "", + "status": "CURRENT", + "updated": "2018-09-15T00:00:00Z", + "version": "" + } + ] + } + +Status Code +----------- + +:ref:`Table 2 ` describes the status code of the API. + +.. _cce_02_0350__t8935d48c19714740abd2e888a39be462: + +.. table:: **Table 2** Status code + + =========== ================================== + Status Code Description + =========== ================================== + 200 The query operation is successful. + =========== ================================== + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/creating_a_cluster.rst b/api-ref/source/apis/cluster_management/creating_a_cluster.rst new file mode 100644 index 0000000..c05b021 --- /dev/null +++ b/api-ref/source/apis/cluster_management/creating_a_cluster.rst @@ -0,0 +1,791 @@ +:original_name: cce_02_0236.html + +.. _cce_02_0236: + +Creating a Cluster +================== + +Function +-------- + +This API is used to create an empty cluster, which has only master nodes but do not have worker nodes. After creating a cluster by calling this API, you can add nodes to the cluster. For details, see :ref:`Creating a Node `. + +.. note:: + + - The URL for cluster management is in the format of **https://Endpoint/uri**. In the URL, **uri** indicates the resource path, that is, the path for API access. + - Info collect agent (ICAgent) is an O&M data collection agent used by Application Performance Management (APM) service. It runs on each server to collect data from probes in real time. When this API is called to create a cluster, ICAgent is not installed by default. To automatically install ICAgent during cluster creation, add **"cluster.install.addons.external/install": "[{\"addonTemplateName\":\"icagent\"}]"** to the **annotations** field in the request body. + - Before creating a cluster, :ref:`Creating a VPC and Subnet `. If a VPC and subnet already exists, you do not need to create them again. + - By default, an account can create a maximum of five clusters in each region. + +URI +--- + +POST /api/v3/projects/{project_id}/clusters + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0236__table2027961241820: + +.. table:: **Table 1** Parameters + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and :ref:`Table 3 ` describe the request parameters. + +.. _cce_02_0236__table165001054142614: + +.. table:: **Table 2** Parameters in the request header + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | String | Description | + +=================+=================+=================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table34052983203655: + +.. table:: **Table 3** Parameters in the request body + + +------------+-----------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+=========================================================+=========================================================================================================================+ + | kind | Yes | String | API type. For a cluster management API, the parameter must be set to **Cluster** and cannot be changed. | + +------------+-----------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | Yes | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+-----------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | metadata | Yes | :ref:`metadata ` object | Basic information about a cluster. metadata is a collection of attributes. | + +------------+-----------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | spec | Yes | :ref:`spec ` object | Detailed description of the cluster to be created. CCE creates or updates objects by defining or updating its **spec**. | + +------------+-----------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table888212551117: + +.. table:: **Table 4** Data structure of the **metadata** field + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+===================================================================================================================================================================================================================+ + | name | Yes | String | Cluster name. | + | | | | | + | | | | Enter 4 to 128 characters starting with a letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | uid | No | String | Unique resource ID, which is automatically generated after the resource is created. It cannot be specified. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | labels | No | Object | Cluster labels in the format of key-value pairs. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | The value of this field is automatically generated by the system and is used by the frontend to identify the features supported by the cluster during the upgrade. The value specified by the user is invalid. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | annotations | No | Object | Cluster annotations in the format of key-value pairs. | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "annotations": { | + | | | | "key1" : "value1", | + | | | | "key2" : "value2" | + | | | | } | + | | | | | + | | | | .. note:: | + | | | | | + | | | | - Annotations are not used to identify or select objects. The metadata in **annotations** may be small or large, structured or unstructured, and may include characters that are not allowed in labels. | + | | | | - This field is not stored in the database and is used only to specify the add-ons to be installed in the cluster. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table1034041612134: + +.. table:: **Table 5** Data structure of the **spec** field + + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +======================+=================+=================================================================+====================================================================================================================================================================================================================================================================================================================================================+ + | category | No | String | Cluster category: | + | | | | | + | | | | - CCE: CCE cluster | + | | | | - Turbo: CCE Turbo cluster | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This parameter is valid in cluster of v1.17.17 or higher. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | type | Yes | String | Cluster type. | + | | | | | + | | | | **VirtualMachine**: The master node architecture is x86. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | flavor | Yes | String | Cluster flavor. | + | | | | | + | | | | - **cce.s1.small**: small-scale, single-master cluster (≤ 50 nodes) | + | | | | - **cce.s1.medium**: medium-scale, single-master cluster (≤ 200 nodes) | + | | | | - **cce.s2.small**: small-scale, high availability cluster (≤ 50 nodes) | + | | | | - **cce.s2.medium**: medium-scale, high availability cluster (≤ 200 nodes) | + | | | | - **cce.s2.large**: large-scale, high availability cluster (≤ 1,000 nodes) | + | | | | - **cce.s2.xlarge**: ultra-large-scale, high availability cluster (≤ 2,000 nodes) | + | | | | | + | | | | .. note:: | + | | | | | + | | | | - s1: single-master cluster | + | | | | - s2: high availability cluster | + | | | | - For example, **≤ 50 nodes** indicates that the maximum number of nodes that can be managed by the cluster is 50. | + | | | | - A single-master cluster has only one master node. If the master node is down, the cluster will become unavailable and stop serving new workloads. However, existing workloads in the cluster are not affected. | + | | | | - A high-availability cluster has multiple master nodes. Faults in a single master node will not take the cluster down. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | version | No | String | Cluster version, which mirrors the baseline version of the Kubernetes community. The latest version is recommended. | + | | | | | + | | | | You can create clusters of two latest versions on the CCE console. To learn which cluster versions are available, choose **Dashboard** > **Create Cluster** on the CCE console and check the **Version** parameter. | + | | | | | + | | | | You can call APIs to create clusters of other versions. However, these clusters will be gradually brought offline. For details about the offline policy, see the official CCE announcement. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | If this parameter is not set, the cluster of the latest version is created by default. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | platformVersion | No | String | Version of the CCE cluster platform, which is for viewing only and cannot be specified during cluster creation. The latest platform version corresponding to the cluster version is automatically selected during cluster creation. | + | | | | | + | | | | Value format: **cce.X.Y** | + | | | | | + | | | | - **X** indicates the quarterly or regularly feature version number, starting from 1. | + | | | | - **Y** indicates the patch version of the cluster, starting from 0 (feature version). Other values indicate later patch versions after the feature version is released. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | No | String | Cluster description, for example, which purpose the cluster is intended to serve. By default, this parameter is left unspecified. To modify cluster description after the cluster is created, call the :ref:`API that is used to update information about a specified cluster ` or go to the cluster details page on the CCE console. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | customSan | No | Array of strings | Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications. | + | | | | | + | | | | #. Duplicate names are not allowed. | + | | | | #. Must comply with the IP address and domain name formats. | + | | | | | + | | | | example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34 | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipv6enable | No | Boolean | Reserved. This parameter is not used in the current version. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hostNetwork | Yes | :ref:`hostNetwork ` object | Node network parameters, including a VPC and subnet ID. **hostNetwork** is mandatory because nodes in a cluster communicate with each other by using a VPC. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | containerNetwork | Yes | :ref:`containerNetwork ` object | Container network parameters, including a container network model and container CIDR block. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | eniNetwork | No | :ref:`EniNetwork ` object | Configuration of Cloud Native Network 2.0. Specify this field when creating a CCE Turbo cluster. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | authentication | No | :ref:`authentication ` object | Configurations of the cluster authentication mode. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | masters | No | :ref:`MasterSpec ` objects | Advanced configurations of the master node. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetesSvcIpRange | No | String | Service CIDR block or the IP address range which the **kubernetes clusterIp** must fall within. This parameter is available only for clusters of v1.11.7 and later. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubeProxyMode | No | String | Service forwarding mode. Two modes are available: | + | | | | | + | | | | - **iptables**: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many services are deployed. In addition, non-incremental updates will cause a latency and even obvious performance issues in the case of heavy service traffic. | + | | | | - **ipvs**: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | No | :ref:`extendParam ` object | Extended fields in the format of key-value pairs. | + | | | | | + | | | | If the cluster will span across AZs or belong to a specified enterprise project, set extended fields as described in :ref:`Table 13 `. | + +----------------------+-----------------+-----------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table1622013552507: + +.. table:: **Table 6** Data structure of the **hostNetwork** field + + +---------------+-----------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===============+===========+========+================================================================================================================================+ + | vpc | Yes | String | ID of the VPC used to create a master node. The VPC ID is obtained from :ref:`Creating a VPC and Subnet `. | + +---------------+-----------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + | subnet | Yes | String | Network ID of the subnet. The value is obtained from :ref:`Creating a VPC and Subnet `. | + +---------------+-----------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + | SecurityGroup | No | String | Security group ID of the node. The value is generated when you create a security group, and any user-defined value is invalid. | + +---------------+-----------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table71529332533: + +.. table:: **Table 7** Data structure of the **authentication** field + + +---------------------+-----------------+----------------------------------------------------------------------+-------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+======================================================================+=============================================================+ + | mode | No | String | Cluster authentication mode. | + | | | | | + | | | | - Clusters of Kubernetes v1.11 and earlier | + | | | | | + | | | | - Possible values: x509, rbac, and authenticating_proxy | + | | | | - Default value: x509 | + | | | | | + | | | | - Clusters of Kubernetes v1.13 and later | + | | | | | + | | | | - Possible values: rbac and authenticating_proxy | + | | | | - Default value: rbac | + +---------------------+-----------------+----------------------------------------------------------------------+-------------------------------------------------------------+ + | authenticatingProxy | No | :ref:`authenticatingProxy ` object | Configurations of the **authenticating_proxy** mode. | + +---------------------+-----------------+----------------------------------------------------------------------+-------------------------------------------------------------+ + +.. _cce_02_0236__table17313161473013: + +.. table:: **Table 8** Data structure of the **authenticatingProxy** field + + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | ca | No | String | X509 CA certificate (Base64-encoded) configured in authenticating_proxy mode. This field is mandatory when the cluster authentication mode is **authenticating_proxy**. The maximum size of the certificate is 1 MB. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | The uploaded CA certificate is used for both the authentication proxy and the kube-apiserver aggregation layer configuration. If the certificate is invalid, the cluster cannot be created. For details about the kube-apiserver aggregation layer, see `Configure the Aggregation Layer `__. | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | cert | No | String | Client certificate (Base64-encoded) issued by the X509 CA certificate configured in authenticating_proxy mode. This certificate is used for authentication from kube-apiserver to the extended API server. This field is mandatory when the cluster authentication mode is **authenticating_proxy**. | + | | | | | + | | | | For details about the kube-apiserver aggregation layer, see `Configure the Aggregation Layer `__. | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | privateKey | No | String | Private key (Base64-encoded) of the client certificate issued by the X509 CA certificate configured in authenticating_proxy mode. This key is used for authentication from kube-apiserver to the extended API server. The private key used by the Kubernetes cluster does not support password encryption. Use an unencrypted private key. This field is mandatory when the cluster authentication mode is **authenticating_proxy**. | + | | | | | + | | | | For details about the kube-apiserver aggregation layer, see `Configure the Aggregation Layer `__. | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table882310145412: + +.. table:: **Table 9** Data structure of the **containerNetwork** field + + +-----------------+-----------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+============================================================================+====================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | mode | Yes | String | Container network model. Select one of the following possible values: | + | | | | | + | | | | - **overlay_l2**: an overlay_l2 network built for containers by using OpenVSwitch (OVS). | + | | | | - **vpc-router**: an underlay_l2 network built for containers by using ipvlan and custom VPC routes. | + | | | | - **eni**: cloud native 2.0 network model. This model deeply integrates the native ENI capability of VPC, uses the VPC CIDR block to allocate container addresses, and supports passthrough between load balancers and containers to provide high performance. You can use this network model when creating a CCE Turbo cluster. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | - Tunnel network: Under this model, the container network is an overlay network on top of a VPC network based on the VXLAN technology. VXLAN encapsulates Ethernet packets as UDP packets for tunnel transmission. Though at some cost of performance, the tunnel encapsulation enables higher interoperability and compatibility with advanced features (such as network policy-based isolation), meeting the requirements of most applications. | + | | | | - VPC network: Routing is implemented within a VPC network according to custom VPC routes. Each node is assigned a CIDR block of a fixed size. vpc-router networks are free of tunnel encapsulation overheads and provide better container network performance than tunnel networks. In addition, as routes to node IP addresses and the containers have been configured on vpc-router, container instances can be directly accessed from outside the cluster. | + +-----------------+-----------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | cidr | No | String | Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, or 192.168.0.0/16-19. If the selected CIDR block conflicts with existing CIDR blocks, the system automatically selects another CIDR block. | + | | | | | + | | | | This parameter cannot be modified after the cluster is created. Exercise caution when setting this parameter.(This parameter has been discarded. If **cidrs** has been configured, skip this parameter.) | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **64** | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This parameter is not valid for CCE Turbo cluster. | + +-----------------+-----------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | cidrs | No | Array of :ref:`ContainerCIDR ` objects | List of container CIDR blocks. In clusters of v1.21 and later, the **cidrs** field is used. When the cluster network type is **vpc-router**, you can add multiple container CIDR blocks. In versions earlier than v1.21, if the **cidrs** field is used, the first CIDR element in the array is used as the container CIDR block. | + | | | | | + | | | | The configuration cannot be changed after the cluster is created. | + +-----------------+-----------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__request_containercidr: + +.. table:: **Table 10** ContainerCIDR + + +-----------+-----------+--------+--------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========+============================================================================================+ + | cidr | Yes | String | Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, and 192.168.0.0/16-19 | + +-----------+-----------+--------+--------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__request_eninetwork: + +.. table:: **Table 11** EniNetwork + + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===============+===========+========+===============================================================================+ + | eniSubnetId | Yes | String | IPv4 Subnet ID of the ENI container subnet. Currently, IPv6 is not supported. | + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + | eniSubnetCIDR | Yes | String | ENI subnet CIDR block. | + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + +.. _cce_02_0236__request_masterspec: + +.. table:: **Table 12** MasterSpec + + +------------------+-----------------+-----------------+---------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +==================+=================+=================+===================================================+ + | availabilityZone | No | String | Availability Zone. | + | | | | | + | | | | For example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "masters": [ | + | | | | { | + | | | | "availabilityZone": "eu-de-01" | + | | | | }, | + | | | | { | + | | | | "availabilityZone": "eu-de-01" | + | | | | }, | + | | | | { | + | | | | "availabilityZone": "eu-de-02" | + | | | | } | + | | | | ], | + +------------------+-----------------+-----------------+---------------------------------------------------+ + +.. _cce_02_0236__table17575013586: + +.. table:: **Table 13** Data structure of the extendParam field + + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +================================+=================+=================+====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | clusterAZ | No | String | If you want to enable multiple AZs for the cluster, enter {"clusterAZ": "multi_az"}. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | Only HA clusters support multiple AZs. To be specific, this field can be configured only when the **flavor** field in :ref:`Table 5 ` is set to **cce.s2.small**, **cce.s2.medium**, **cce.s2.large**, **cce.t2.small**, **cce.t2.medium**, or **cce.t2.large**. After multi-AZ deployment is enabled, the three master nodes of the cluster are distributed in different AZs. The cluster remains available even when one of the AZs is down. | + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dssMasterVolumes | No | String | Whether the system and data disks of a master node use dedicated distributed storage. If this parameter is omitted or left unspecified, EVS disks are used by default. | + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubeProxyMode | No | String | Service forwarding mode. Two modes are available: | + | | | | | + | | | | - **iptables**: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many Services are deployed. In addition, non-incremental updates will cause a latency and even tangible performance issues in the case of service traffic spikes. | + | | | | - **ipvs**: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This parameter has been deprecated. If both this parameter and kubeProxyMode under ClusterSpec are specified, the latter will be used. | + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | clusterExternalIP | No | String | EIP of the master node. | + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | alpha.cce/fixPoolMask | No | String | Number of mask bits of the fixed IP address pool of the container network model. This field is supported only for the VPC network model (vpc-router). | + | | | | | + | | | | This parameter determines the number of container IP addresses that can be allocated to a node. The maximum number of pods that can be created on a node is decided by this parameter and maxPods set during node creation. | + | | | | | + | | | | The value is an integer ranging from 24 to 28. | + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetes.io/cpuManagerPolicy | No | String | Cluster CPU management policy. The value can be **none** or **static**. The default value is **none**. | + | | | | | + | | | | - **none**: CPU cores will not be exclusively allocated to workload pods. Select this value if you want a large pool of shareable CPU cores. | + | | | | - **static**: CPU cores can be exclusively allocated to workload pods. Select this value if your workload is sensitive to latency in CPU cache and scheduling. | + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | upgradefrom | No | String | Reserved. This field is returned only for a query. | + +--------------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example Request** + +CCE Cluster: + +.. code-block:: + + { + "kind": "Cluster", + "apiVersion": "v3", + "metadata": { + "name": "mycluster", + "labels": { + "foo": "bar" + }, + "annotations": { + "foo2": "bar2" + } + }, + "spec": { + "type": "VirtualMachine", + "flavor": "cce.s2.small", + "version": "v1.19.8-r0", + "description": "this is a demo cluster", + "hostNetwork": { + "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1", + "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438" + }, + "containerNetwork": { + "mode": "overlay_l2", + "cidr": "172.16.0.0/16" + }, + "authentication": { + "mode": "rbac", + }, + "kubeProxyMode": "iptables", + "billingMode": 0, + "extendParam": { + "clusterAZ": "multi_az" + } + } + } + +CCE Turbo Cluster: + +.. code-block:: + + { + "kind": "Cluster", + "apiVersion": "v3", + "metadata": { + "name": "turbo" + }, + "spec": { + "type": "VirtualMachine", + "flavor": "cce.s2.medium", + "version": "v1.19.10-r0", + "hostNetwork": { + "vpc": "05c33818-78df-4329-b546-5df2f1aa823e", + "subnet": "9f0c8ef2-c608-4238-88be-87bce5fe90da" + }, + "containerNetwork": { + "mode": "eni" + }, + "eniNetwork": { + "eniSubnetId": "417dcc1f-95d7-43e7-8533-ab078d266303", + "eniSubnetCIDR": "192.168.0.0/24" + }, + "kubernetesSvcIpRange": "10.247.0.0/16", + "authentication": { + "mode": "rbac" + }, + "extendParam": { + "kubeProxyMode": "ipvs" + } + } + } + +Response +-------- + +**Response parameters:** + +:ref:`Table 14 ` describes the response parameters. + +.. _cce_02_0236__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 14** Response parameters + + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=====================================================================================================================+ + | kind | String | API type. The value is fixed at **Cluster** and cannot be changed. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Cluster metadata, which is a collection of attributes. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the cluster to be created. CCE creates or updates objects by defining or updating its spec. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`status ` object | Cluster status and jobID of the cluster creation job. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table669019286188: + +.. table:: **Table 15** Data structure of the **metadata** field + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===================================================================================================================================================================================================================+ + | name | String | Cluster name. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | uid | String | Cluster ID. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | creationTimestamp | String | Time when the cluster was created. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | updateTimestamp | String | Time when the cluster was updated. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | labels | Map | Cluster labels in the format of key-value pairs. | + | | | | + | | | .. note:: | + | | | | + | | | The value of this field is automatically generated by the system and is used by the frontend to identify the features supported by the cluster during the upgrade. The value specified by the user is invalid. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | annotations | Map | Cluster annotations in the format of key-value pairs. | + | | | | + | | | .. code-block:: | + | | | | + | | | "annotations": { "key1" : "value1", "key2" : "value2" } | + | | | | + | | | .. note:: | + | | | | + | | | - **annotations** is not used to identify or select objects. Metadata in **annotations** can be small or large, structured or unstructured, and can include characters that are not allowed in labels. | + | | | - This field is not stored in the database and is used only to specify the add-ons to be installed the cluster. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table195921039143517: + +.. table:: **Table 16** Data structure of the **spec** field + + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================================================================+===============================================================================================================================================================================================================================================================================================================================+ + | category | String | Cluster category: | + | | | | + | | | - CCE: CCE cluster | + | | | - Turbo: CCE Turbo cluster | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is valid in cluster of v1.17.17 or higher. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | type | String | Cluster type. | + | | | | + | | | **VirtualMachine**: The master node architecture is x86. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | flavor | String | Cluster flavor, which cannot be changed after the cluster is created. | + | | | | + | | | - **cce.s1.small**: small-scale, single-master cluster (≤ 50 nodes) | + | | | - **cce.s1.medium**: medium-scale, single-master cluster (≤ 200 nodes) | + | | | - **cce.s2.small**: small-scale, high availability cluster (≤ 50 nodes) | + | | | - **cce.s2.medium**: medium-scale, high availability cluster (≤ 200 nodes) | + | | | - **cce.s2.large**: large-scale, high availability cluster (≤ 1,000 nodes) | + | | | - **cce.s2.xlarge**: ultra-large-scale, high availability cluster (≤ 2,000 nodes) | + | | | | + | | | .. note:: | + | | | | + | | | - s1: single-master cluster | + | | | - s2: high availability cluster | + | | | - For example, **≤ 50 nodes** indicates that the maximum number of nodes that can be managed by the cluster is 50. | + | | | - A single-master cluster is a cluster that has only one master node. If the master node is down, the cluster will become unavailable and stop serving new workloads. However, existing workloads in the cluster are not affected. | + | | | - A high-availability cluster has multiple master nodes. Faults in a single master node will not take the cluster down. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | version | String | Cluster's baseline Kubernetes version. The latest version is recommended. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | platformVersion | String | Version of the CCE cluster platform, which is for viewing only and cannot be specified during cluster creation. The latest platform version corresponding to the cluster version is automatically selected during cluster creation. | + | | | | + | | | Value format: **cce.X.Y** | + | | | | + | | | - **X** indicates the quarterly or regularly feature version number, starting from 1. | + | | | - **Y** indicates the patch version of the cluster, starting from 0 (feature version). Other values indicate later patch versions after the feature version is released. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Cluster description. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | customSan | Array of strings | Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications. | + | | | | + | | | #. Duplicate names are not allowed. | + | | | #. Must comply with the IP address and domain name formats. | + | | | | + | | | example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34 | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipv6enable | Boolean | Reserved. This parameter is not used in the current version. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hostNetwork | :ref:`hostNetwork ` object | Node network parameters. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | containerNetwork | :ref:`containerNetwork ` object | Container network parameters. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | eniNetwork | :ref:`EniNetwork ` object | Configuration of Cloud Native Network 2.0. Specify this field when creating a CCE Turbo cluster. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | authentication | :ref:`authentication ` object | Configurations of the cluster authentication mode. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | masters | Array of :ref:`MasterSpec ` objects | Advanced configurations of the master node. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetesSvcIpRange | String | Service CIDR block or the IP address range which the kubernetes clusterIp must fall within. This parameter is available only for clusters of v1.11.7 and later. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubeProxyMode | String | Service forwarding mode. Two modes are available: | + | | | | + | | | - **iptables**: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many services are deployed. In addition, non-incremental updates will cause a latency and even obvious performance issues in the case of heavy service traffic. | + | | | - **ipvs**: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | String | AZ. This field is returned only for a query. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | :ref:`extendParam ` object | Extended fields in the format of key-value pairs. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | supportIstio | Boolean | Whether Istio is supported. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+-----------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table14385916163118: + +.. table:: **Table 17** Data structure of the **hostNetwork** field + + +---------------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===============+========+================================================================================================================================+ + | vpc | String | ID of the VPC used to create a master node. The VPC ID is obtained from :ref:`Creating a VPC and Subnet `. | + +---------------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + | subnet | String | Network ID of the subnet. The value is obtained from :ref:`Creating a VPC and Subnet `. | + +---------------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + | SecurityGroup | String | Security group ID of the node. The value is generated when you create a security group, and any user-defined value is invalid. | + +---------------+--------+--------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table97937811553: + +.. table:: **Table 18** EniNetwork + + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===============+===========+========+===============================================================================+ + | eniSubnetId | Yes | String | IPv4 Subnet ID of the ENI container subnet. Currently, IPv6 is not supported. | + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + | eniSubnetCIDR | Yes | String | ENI subnet CIDR block. | + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + +.. _cce_02_0236__table7220112133716: + +.. table:: **Table 19** Data structure of the **authentication** field + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=====================================================================================================================================+ + | mode | String | Cluster authentication mode. | + | | | | + | | | - Clusters of Kubernetes v1.11 or earlier support **x509**, **rbac**, and **authenticating_proxy**. The default value is **x509**. | + | | | - Clusters of Kubernetes v1.13 or later support **rbac** and **authenticating_proxy**. The default value is **rbac**. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__response_masterspec: + +.. table:: **Table 20** MasterSpec + + +-----------------------+-----------------------+---------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===================================================+ + | availabilityZone | String | Availability Zone. | + | | | | + | | | .. code-block:: | + | | | | + | | | "masters": [ | + | | | { | + | | | "availabilityZone": "eu-de-01" | + | | | }, | + | | | { | + | | | "availabilityZone": "eu-de-01" | + | | | }, | + | | | { | + | | | "availabilityZone": "eu-de-02" | + | | | } | + | | | ], | + +-----------------------+-----------------------+---------------------------------------------------+ + +.. _cce_02_0236__table0102129153810: + +.. table:: **Table 21** Data structure of the extendParam field + + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================================+=======================+====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | clusterAZ | String | If you want to enable multiple AZs for the cluster, enter {"clusterAZ": "multi_az"}. | + | | | | + | | | .. note:: | + | | | | + | | | Only HA clusters support multiple AZs. To be specific, this field can be configured only when the **flavor** field in :ref:`Table 5 ` is set to **cce.s2.small**, **cce.s2.medium**, **cce.s2.large**, **cce.t2.small**, **cce.t2.medium**, or **cce.t2.large**. After multi-AZ deployment is enabled, the three master nodes of the cluster are distributed in different AZs. The cluster remains available even when one of the AZs is down. | + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dssMasterVolumes | String | Whether the system and data disks of a master node use dedicated distributed storage. If this parameter is omitted or left unspecified, EVS disks are used by default. | + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubeProxyMode | String | Service forwarding mode. Two modes are available: | + | | | | + | | | - **iptables**: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many Services are deployed. In addition, non-incremental updates will cause a latency and even tangible performance issues in the case of service traffic spikes. | + | | | - **ipvs**: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters. | + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | clusterExternalIP | String | EIP used to access the cluster. | + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | alpha.cce/fixPoolMask | String | Number of mask bits of the fixed IP address pool of the container network model. This field is supported only for the VPC network model (vpc-router). | + | | | | + | | | This parameter determines the number of container IP addresses that can be allocated to a node. The maximum number of pods that can be created on a node is decided by this parameter and maxPods set during node creation. | + | | | | + | | | The value is an integer ranging from 24 to 28. | + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetes.io/cpuManagerPolicy | String | Cluster CPU management policy. The value can be **none** or **static**. The default value is **none**. | + | | | | + | | | - **none**: CPU cores will not be exclusively allocated to workload pods. Select this value if you want a large pool of shareable CPU cores. | + | | | - **static**: CPU cores can be exclusively allocated to workload pods. Select this value if your workload is sensitive to latency in CPU cache and scheduling. | + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | upgradefrom | String | Reserved. This field is returned only for a query. | + +--------------------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0236__table6749834132215: + +.. table:: **Table 22** Data structure of the **status** field + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=========================================================================================================================================+ + | phase | String | Cluster status. Possible values: | + | | | | + | | | - **Available**: The cluster is running properly. | + | | | - **Unavailable**: The cluster is exhibiting unexpected behavior. | + | | | - **ScalingUp**: Nodes are being added to the cluster. | + | | | - **ScalingDown**: The cluster is being downsized to fewer nodes. | + | | | - **Creating**: The cluster is being created. | + | | | - **Deleting**: The cluster is being deleted. | + | | | - **Upgrading**: The cluster is being upgraded. | + | | | - **Empty**: The cluster has no resources. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | jobID | String | ID of the cluster creation job. You can :ref:`query job progress ` by job ID to keep updated on cluster creation progress. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | deleteOption | Object | Whether to delete configurations. This parameter is contained only in the response to the deletion request. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | deleteStatus | Object | Whether to delete the status information. This parameter is contained only in the response to the deletion request. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + "kind": "Cluster", + "apiVersion": "v3", + "metadata": { + "name": "test-create-cluster", + "uid": "d6a883a1-8529-11ea-8e34-0255ac101108", + "creationTimestamp": "2020-04-23 06:15:32.974281119 +0000 UTC", + "updateTimestamp": "2020-04-23 06:15:32.974281688 +0000 UTC", + "labels": { + "foo": "bar" + }, + "annotations": { + "foo2": "bar2" + } + }, + "spec": { + "type": "VirtualMachine", + "flavor": "cce.s2.small", + "version": "v1.17.9-r0", + "description": "this is a demo cluster", + "ipv6enable": false, + "hostNetwork": { + "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1", + "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438" + }, + "containerNetwork": { + "mode": "overlay_l2", + "cidr": "172.16.0.0/16" + }, + "eniNetwork": {}, + "authentication": { + "mode": "rbac", + "authenticatingProxy": {} + }, + "billingMode": 0, + "extendParam": { + "clusterAZ": "multi_az" + }, + "kubernetesSvcIpRange": "10.247.0.0/16", + "kubeProxyMode": "iptables" + }, + "status": { + "phase": "Creating", + "jobID": "d6bcbb0b-8529-11ea-8e34-0255ac101108" + } + } + +Status Code +----------- + +:ref:`Table 23 ` describes the status code of this API. + +.. _cce_02_0236__en-us_topic_0079614900_table46761928: + +.. table:: **Table 23** Status code + + =========== ========================================================= + Status Code Description + =========== ========================================================= + 201 The job for creating a cluster is successfully delivered. + =========== ========================================================= + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/creating_a_node.rst b/api-ref/source/apis/cluster_management/creating_a_node.rst new file mode 100644 index 0000000..60bf0f6 --- /dev/null +++ b/api-ref/source/apis/cluster_management/creating_a_node.rst @@ -0,0 +1,1002 @@ +:original_name: cce_02_0242.html + +.. _cce_02_0242: + +Creating a Node +=============== + +Function +-------- + +This API is used to create a node in a specified cluster. + +URI +--- + +POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0242__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and :ref:`Table 3 ` describe the request parameters. + +.. _cce_02_0242__table2582312171119: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table34052983203655: + +.. table:: **Table 3** Parameters in the request body + + +------------+-----------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========================================================+=========================================================================================================================+ + | kind | Yes | String | API type. The value is fixed at **Node** and cannot be changed. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | Yes | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | metadata | Yes | :ref:`metadata ` object | Node's metadata, which is a collection of attributes. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | spec | Yes | :ref:`spec ` object | Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table65041257514: + +.. table:: **Table 4** Data structure of the **metadata** field + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================================+ + | name | No | String | Node name. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | Enter 0 to 56 characters starting with a letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed. | + | | | | | + | | | | If no node name is specified, the system automatically generates a node name in the format of **Cluster Name-****\***. | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | labels | No | Object | CCE node label (not the native Kubernetes label). | + | | | | | + | | | | Labels are used to select objects that meet certain criteria. A label is a key-value pair. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "labels": { | + | | | | "key" : "value" | + | | | | } | + | | | | | + | | | | .. note:: | + | | | | | + | | | | Users can not use this field to define the native Kubernetes labels. | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | annotations | No | Object | CCE node annotation in key-value pair format (not the native Kubernetes annotations). | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "annotations": { | + | | | | "key1" : "value1", | + | | | | "key2" : "value2" | + | | | | } | + | | | | | + | | | | .. note:: | + | | | | | + | | | | - Users can not use this field to define the native Kubernetes labels. | + | | | | - **Annotations** are not used to identify or select objects. The metadata in **Annotations** may be small or large, structured or unstructured, and may include characters that are not allowed in labels. | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table3150105216225: + +.. table:: **Table 5** Data structure of the **spec** field + + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+==============================================================+====================================================================================================================================================================================================================================================================================+ + | flavor | Yes | String | Node specifications. For details, see the description of the **flavorRef** parameter in `Creating an ECS `__. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | When adding a BMS node, check whether the flavor of the node to be added supports local disks. If local disks are not supported, add at least one 100 GB EVS disk. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | Yes | String | AZ of the node. For details, see the description of the **availability_zone** parameter in `Creating an ECS `__. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | os | No | String | Node OS. | + | | | | | + | | | | - Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2. | + | | | | - Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5. | + | | | | - Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7. | + | | | | - Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7. | + | | | | - Nodes using **kata** runtime in CCE Turbo cluster support EulerOS 2.9. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | If the **alpha.cce/NodeImageID** parameter in **extendParam** is specified during node creation, you do not need to set this field. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dedicatedHostId | No | String | ID of the dedicated host to which nodes will be scheduled. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | login | Yes | :ref:`login ` object | Node login mode, which can be key pair or password. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | rootVolume | Yes | :ref:`Volume ` object | System disk parameters of the node. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dataVolumes | Yes | Array of :ref:`Volume ` object | Data disk parameters of the node. Currently, you can add the second data disk for your node on the CCE console. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | No | :ref:`publicIP ` object | EIP used by the node to access public networks. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | No | Integer | Billing mode of a node. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This field is not supported for the current version. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | count | Yes | Integer | Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This fielder can be set to **0** for a node pool. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeNicSpec | No | :ref:`nodeNicSpec ` object | Description about the node NIC. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | No | :ref:`extendParam ` object | Extended parameter. Format: Key-value pair. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | userTags | No | Object | Tag of a VM. | + | | | | | + | | | | The format is key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | | + | | | | - **Key**: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported. | + | | | | - **Value**: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "userTags": [ | + | | | | { | + | | | | "key": "tag1", | + | | | | "value": "aaaa" | + | | | | }, | + | | | | { | + | | | | "key": "tag2", | + | | | | "value": "bbbb" | + | | | | } | + | | | | ] | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | k8sTags | No | Object | Tag of a Kubernetes node. | + | | | | | + | | | | The format is key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | | + | | | | - **Key**: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key | + | | | | - **Value**: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "k8sTags": { | + | | | | "key": "value" | + | | | | } | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | taints | No | Object | You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters: | + | | | | | + | | | | - **Key**: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key. | + | | | | - **Value**: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.). | + | | | | - **Effect**: Available options are **NoSchedule**, **PreferNoSchedule**, and **NoExecute**. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "taints": [{ | + | | | | "key": "status", | + | | | | "value": "unavailable", | + | | | | "effect": "NoSchedule" | + | | | | }, { | + | | | | "key": "looks", | + | | | | "value": "bad", | + | | | | "effect": "NoSchedule" | + | | | | }] | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ecsGroupId | No | String | ECS group ID. If this parameter is specified, the node is created in the specified ECS group. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This parameter is not supported when you add a node to a node pool or use CCE Turbo cluster. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dedicatedHostId | No | String | ID of the DeH host. If this parameter is specified, the node is scheduled to its own DeH host. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This parameter is not supported when you add a node to a node pool. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | offloadNode | No | Boolean | Whether the node belongs to a CCE Turbo cluster. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This parameter is not supported when you add a node to a node pool. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | faultDomain | No | String | Cloud server fault domain. The node is created in the fault domain specified by this parameter. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | You must specify the ECS to which the fault domain policy applies and enable the fault domain feature. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | runtime | No | :ref:`Runtime ` object | Container runtime. The default value is **docker**. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table322873620312: + +.. table:: **Table 6** Data structure of the nodeNicSpec field + + +------------+-----------+----------------------------------------------------------------+------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+================================================================+====================================+ + | primaryNic | No | :ref:`primaryNic ` object | Description about the primary NIC. | + +------------+-----------+----------------------------------------------------------------+------------------------------------+ + | extNics | No | Array of :ref:`extNics ` objects | Extension NIC. | + +------------+-----------+----------------------------------------------------------------+------------------------------------+ + +.. _cce_02_0242__request_nicspec: + +.. table:: **Table 7** Data structure of the primaryNic/extNics field + + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+==================+===================================================================================================================================================================================================================+ + | subnetId | No | String | Network ID of the subnet to which the NIC belongs. | + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | fixedIps | No | Array of strings | The IP address of the primary NIC is specified by **fixedIps**. The number of IP addresses cannot be greater than the number of created nodes. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipBlock | No | String | CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table153332427337: + +.. table:: **Table 8** Data structure of the extendParam field + + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=========================+=================+=================+=================================================================================================================+ + | maxPods | No | Integer | Maximum number of pods on the node. | + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + | agency_name | No | String | Specifies the IAM agency name. | + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + | dockerBaseSize | No | Integer | Available disk space of a single Docker container on the node using the device mapper. | + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + | alpha.cce/preInstall | No | String | Script required before the installation. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | The input value must be encoded using Base64. (Command: **echo -n "Content to be encoded" \| base64**) | + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + | alpha.cce/postInstall | No | String | Script required after the installation. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | The input value must be encoded using Base64. (Command: **echo -n "Content to be encoded" \| base64**) | + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + | alpha.cce/NodeImageID | No | String | Mandatory if a custom image is used in creating a bare metal node. | + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + | DockerLVMConfigOverride | No | String | ConfigMap of the Docker data disk. The following is an example configuration: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" | + | | | | | + | | | | In this example: | + | | | | | + | | | | - **userLV**: size of the user space, for example, **vgpaas/20%VG**. | + | | | | - **userPath**: mount path of the user space, for example, **/home/wqt-test**. | + | | | | - **diskType**: disk type. Currently, only the **evs**, **hdd**, and **ssd** are supported. | + | | | | - **lvType**: type of a logic volume. Currently, the value can be **linear** or **striped**. | + | | | | - **dockerThinpool**: Docker space size, for example, **vgpaas/60%VG**. | + | | | | - **kubernetesLV**: kubelet space size, for example, **vgpaas/20%VG**. | + +-------------------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table10946114617286: + +.. table:: **Table 9** Data structure of the **login** field + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==================================================================================================================================+ + | sshKey | No | String | Name of the key pair used for node login. For details on how to create a key pair, see :ref:`Creating a Key Pair `. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------+ + | userPassword | No | String | Password used for node login. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This field is not supported for the current version. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table1359314517: + +.. table:: **Table 10** Data structure of the **Volume** field + + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=====================================================================+============================================================================================================================================================================================+ + | volumetype | No | String | Disk type. For details, see the description of **root_volume** in `Creating an ECS `__. | + | | | | | + | | | | - **SATA**: common I/O disk type. | + | | | | - **SAS**: high I/O disk type. | + | | | | - **SSD**: ultra-high I/O disk type. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | No | Integer | Specifies the system disk size, in GB. The value ranges from 40 to 1024. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | No | Map | Disk extension parameter. For details, see the description of the extendparam parameter in `Creating an ECS `__. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hw:passthrough | No | Boolean | - Pay attention to this field if your ECS is SDI-compliant. If the value of this field is **true**, the created disk is of the SCSI type. | + | | | | - If the node pool type is **ElasticBMS**, this field must be set to **true**. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | metadata | No | :ref:`dataVolumeMetadata ` object | Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted. | + | | | | | + | | | | If data disks are created using a data disk image, this parameter cannot be used. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table15849123210415: + +.. table:: **Table 11** Data structure of the dataVolumeMetadata field + + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +======================+=================+=================+==================================================================================================================================================================+ + | \__system__encrypted | No | String | Whether an EVS disk is encrypted. | + | | | | | + | | | | - **'0'**: not encrypted | + | | | | - **'1'**: encrypted | + | | | | | + | | | | If this parameter is not specified, EVS disks will not be encrypted by default. | + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | \__system__cmkid | Yes | String | CMK ID used for encryption. This parameter is used with **\__system__encrypted**. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | You can obtain the ID through HTTPS requests. For details, see `Querying the List of CMKs `__. | + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table139179586343: + +.. table:: **Table 12** Data structure of the **publicIP** field + + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+====================================================+=====================================================================+ + | ids | No | Array of strings | List of IDs of the existing EIPs. | + | | | | | + | | | | .. important:: | + | | | | | + | | | | NOTICE: | + | | | | If **ids** is set, you do not need to set **count** and **eip**. | + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + | count | No | Integer | Number of EIPs to be dynamically created. | + | | | | | + | | | | .. important:: | + | | | | | + | | | | NOTICE: | + | | | | The **count** and **eip** parameters must be set simultaneously. | + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + | eip | No | :ref:`eip ` object | EIP. | + | | | | | + | | | | .. important:: | + | | | | | + | | | | NOTICE: | + | | | | The **count** and **eip** parameters must be set simultaneously. | + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + +.. note:: + + If no EIP has been created, configure **count** and **eip**. The system will automatically create EIPs based on **count** and **eip**. + +.. _cce_02_0242__table135065714419: + +.. table:: **Table 13** Data structure of the **eip** field + + +-----------+-----------+------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+============================================================+=================================================================================================================================================================================================================+ + | iptype | Yes | String | EIP type. For details, see the description of the **iptype** parameter in the **eip** field in `Data Structure for Creating ECSs `__. | + +-----------+-----------+------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | bandwidth | Yes | :ref:`bandwidth ` object | Bandwidth parameters of the EIP. | + +-----------+-----------+------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table16381121974213: + +.. table:: **Table 14** Data structure of the **bandwidth** field + + +------------+-----------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+=========+=======================================================================================================================================================================================================================================+ + | chargemode | No | String | The value is **traffic**, indicating that the billing is based on traffic. | + +------------+-----------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | Yes | Integer | Bandwidth size. For details, see the description of the **size** parameter in the **bandwidth** field in `Data Structure for Creating ECSs `__. | + +------------+-----------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sharetype | Yes | String | Shared bandwidth type. For details, see the description of the **sharetype** parameter in the **bandwidth** field in `Data Structure for Creating ECSs `__. | + +------------+-----------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table163721555105015: + +.. table:: **Table 15** Runtime + + +-----------------+-----------------+-----------------+-----------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=====================================================+ + | name | No | String | Container runtime. The default value is **docker**. | + | | | | | + | | | | Enumeration values: | + | | | | | + | | | | - docker | + | | | | - containerd | + +-----------------+-----------------+-----------------+-----------------------------------------------------+ + +**Example request**: + +CCE cluster: + +.. code-block:: + + { + "kind": "Node", + "apiVersion": "v3", + "metadata": { + "name": "myhost", + "labels": { + "foo": "bar" + }, + "annotations": { + "annotation1": "abc" + } + }, + "spec": { + "flavor": "s1.medium", + "az": "eu-de-01", + "login": { + "sshKey": "Keypair-demo" + }, + "rootVolume": { + "size": 40, + "volumetype": "SAS" + }, + "dataVolumes": [ + { + "size": 100, + "volumetype": "SAS" + } + ], + "userTags": [ + { + "key": "tag1", + "value": "aaaa" + }, + { + "key": "tag2", + "value": "bbbb" + } + ], + "k8sTags": { + "label-test": "test" + }, + "publicIP": { + "count": 2, + "eip": { + "iptype": "5_bgp", + "bandwidth": { + "chargemode": "traffic", + "size": 10, + "sharetype": "PER" + } + } + }, + "count": 2, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "bbfc0a20-d66c-4f36-b4c1-265d669b8c62" + } + }, + "extendParam": { + "alpha.cce/postInstall": "IyEvYml******C50eHQ=" + } + } + } + +CCE Turbo cluster: + +.. code-block:: + + { + "kind": "Node", + "apiversion": "v3", + "metadata": { + "name": "turbo-cluster-node" + }, + "spec": { + "flavor": "cce.c4.22xlarge.4.physical.129nic", + "az": "eu-de-01", + "login": { + "sshKey": "id_rsa" + }, + "rootVolume": { + "size": 40, + "volumetype": "SAS", + "hw:passthrough": true + }, + "dataVolumes": [ + { + "size": 100, + "volumetype": "SAS", + "hw:passthrough": true + } + ], + "count": 1, + "runtime": { + "name": "containerd" + }, + "extendParam": { + "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4" + } + } + } + +Response +-------- + +**Response parameters**: + +:ref:`Table 16 ` describes the response parameters. + +.. _cce_02_0242__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 16** Response parameters + + +------------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+========================================================+=========================================================================================================================+ + | kind | String | API type. The value is fixed at **Node** and cannot be changed. | + +------------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Node's metadata, which is a collection of attributes. | + +------------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +------------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`status ` object | Node status and jobID of the node creation job. | + +------------+--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table0360745335: + +.. table:: **Table 17** Data structure of the **metadata** field + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================================================================================================================================+ + | name | String | Node name. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | uid | String | Node ID. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | labels | Object | CCE node label (not the native Kubernetes label). | + | | | | + | | | Labels are used to select objects that meet certain criteria. A label is a key-value pair. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "labels": { | + | | | "key" : "value" | + | | | } | + | | | | + | | | .. note:: | + | | | | + | | | Users can not use this field to define the native Kubernetes labels. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | annotations | Object | CCE node annotation in key-value pair format (not the native Kubernetes annotations). | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "annotations": { | + | | | "key1" : "value1", | + | | | "key2" : "value2" | + | | | } | + | | | | + | | | .. note:: | + | | | | + | | | - Users can not use this field to define the native Kubernetes labels. | + | | | - **Annotations** are not used to identify or select objects. The metadata in **Annotations** may be small or large, structured or unstructured, and may include characters that are not allowed in labels. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table13949117115810: + +.. table:: **Table 18** Data structure of the **spec** field + + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+==============================================================+====================================================================================================================================================================================================================================================================================+ + | flavor | String | Node specifications. For details, see the description of the **flavorRef** parameter in `Creating an ECS `__. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | String | AZ of the node. For details, see the description of the **availability_zone** parameter in `Creating an ECS `__. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | os | String | Node OS. | + | | | | + | | | - Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2. | + | | | - Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5. | + | | | - Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7. | + | | | - Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7. | + | | | - Nodes using **kata** runtime in CCE Turbo cluster support EulerOS 2.9. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | login | :ref:`login ` object | Node login mode, which can only be key pair. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | rootVolume | :ref:`Volume ` object | System disk parameters of the node. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dataVolumes | Array of :ref:`Volume ` object | Data disk parameters of the node. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | :ref:`publicIP ` object | EIP parameters of a node. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeNicSpec | :ref:`nodeNicSpec ` object | Description about the node NIC. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | count | Integer | Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter can be set to **0** for a node pool. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | userTags | Object | The format is key-value pair. | + | | | | + | | | It is recommended that you use TMS's predefined tag function to add the same tag to different cloud resources. | + | | | | + | | | - The tag **key** can consist of only uppercase letters, lowercase letters, digits, hyphens (-), underscores (_), and Unicode characters. | + | | | - The tag **value** can contain only uppercase letters, lowercase letters, digits, hyphens (-), underscores (_), and at signs (@). | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "userTags": [ | + | | | { | + | | | "key": "tag1", | + | | | "value": "aaaa" | + | | | }, { | + | | | "key": "tag2", | + | | | "value": "bbbb" | + | | | }] | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | k8sTags | Object | The format is key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | + | | | - **Key**: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key | + | | | - **Value**: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string. | + | | | | + | | | .. note:: | + | | | | + | | | If a node is created using a node pool, a label whose key is **cce.cloud.com/cce-nodepool** is automatically added to the node, and the label value is the node name. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "k8sTags": { | + | | | "key": "value" | + | | | } | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | taints | Object | You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters: | + | | | | + | | | - **Key**: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key. | + | | | - **Value**: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.). | + | | | - **Effect**: Available options are **NoSchedule**, **PreferNoSchedule**, and **NoExecute**. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "taints": [{ | + | | | "key": "status", | + | | | "value": "unavailable", | + | | | "effect": "NoSchedule" | + | | | }, { | + | | | "key": "looks", | + | | | "value": "bad", | + | | | "effect": "NoSchedule" | + | | | }] | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ecsGroupId | String | ECS group ID. If this parameter is specified, the node is created in the specified ECS group. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is not supported when you add a node to a node pool or use CCE Turbo cluster. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dedicatedHostId | String | ID of the DeH host. If this parameter is specified, the node is scheduled to its own DeH host. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is not supported when you add a node to a node pool. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | offloadNode | Boolean | Whether the node belongs to a CCE Turbo cluster. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is not supported when you add a node to a node pool. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | faultDomain | String | Cloud server fault domain. The node is created in the fault domain specified by this parameter. | + | | | | + | | | .. note:: | + | | | | + | | | You must specify the ECS to which the fault domain policy applies and enable the fault domain feature. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | :ref:`extendParam ` object | Extended parameter. Format: Key-value pair. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | runtime | :ref:`Runtime ` object | Container runtime. The default value is **docker**. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table162751117166: + +.. table:: **Table 19** Data structure of the nodeNicSpec field + + +------------+------------------------------------------------------------------+------------------------------------+ + | Parameter | Type | Description | + +============+==================================================================+====================================+ + | primaryNic | :ref:`primaryNic ` object | Description about the primary NIC. | + +------------+------------------------------------------------------------------+------------------------------------+ + | extNics | Array of :ref:`extNics ` objects | Extension NIC. | + +------------+------------------------------------------------------------------+------------------------------------+ + +.. _cce_02_0242__table614985275016: + +.. table:: **Table 20** Data structure of the primaryNic/extNics field + + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+==================+===================================================================================================================================================================================================================+ + | subnetId | String | Network ID of the subnet to which the NIC belongs. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | fixedIps | Array of strings | The IP address of the primary NIC is specified by **fixedIps**. The number of IP addresses cannot be greater than the number of created nodes. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipBlock | String | CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table2039318361484: + +.. table:: **Table 21** Data structure of the **extendParam** field + + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=========================+=======================+=================================================================================================================+ + | chargingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | ecs:performancetype | String | Type of the ECS specifications. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | orderID | String | Order ID. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | productID | String | Product ID. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | publicKey | String | Key pair used to log in to the node. Used when creating a key pair. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | maxPods | Integer | Maximum number of pods on the node. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | dockerBaseSize | Integer | Available disk space of a single Docker container on the node using the device mapper. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | agency_name | String | Specifies the IAM agency name. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | DockerLVMConfigOverride | String | Docker data disk configurations. The following is the default configuration: | + | | | | + | | | .. code-block:: | + | | | | + | | | "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" | + | | | | + | | | The configuration contains the following fields: | + | | | | + | | | - **userLV**: size of the user space, for example: **vgpaas/20%VG**. | + | | | - **userPath**: mount path of the user space, for example: **/home/wqt-test**. | + | | | - **diskType**: disk type. Currently, only the **evs**, **hdd**, and **ssd** are supported. | + | | | - **lvType**: type of a logic volume. Currently, the value can be **linear** or **striped**. | + | | | - **dockerThinpool**: Docker disk space, for example: **vgpaas/60%VG**. | + | | | - **kubernetesLV**: kubelet size, for example: **vgpaas/20%VG**. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table9637161310338: + +.. table:: **Table 22** Data structure of the **status** field + + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==========================================================================================================================================+ + | jobID | String | ID of the node creation job. You can :ref:`query job progress ` by job ID to keep updated on node creation progress. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------+ + | phase | String | Node status. | + | | | | + | | | - **Build**: The VM that hosts the node is being created. | + | | | - **Active**: The node is ready for use. | + | | | - **Abnormal**: The node is not ready for use. | + | | | - **Deleting**: The node is being deleted. | + | | | - **Installing**: The node is being installed. | + | | | - **Upgrading**: The node is being upgraded. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------+ + | serverId | String | ID of the underlying ECS node. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | String | Node EIP. If the ECS data is not synchronized in real time, you can click **Sync Node Data** on the console to manually update the data. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------+ + | privateIP | String | IP address in the private network segment of the primary NIC on the node. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0242__table483064395515: + +.. table:: **Table 23** Runtime + + +-----------------------+-----------------------+-----------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=====================================================+ + | name | String | Container runtime. The default value is **docker**. | + | | | | + | | | Enumeration values: | + | | | | + | | | - docker | + | | | - containerd | + +-----------------------+-----------------------+-----------------------------------------------------+ + +**Example response**: + +.. code-block:: + + { + "kind": "Node", + "apiVersion": "v3", + "metadata": { + "name": "myhost", + "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "labels": { + "foo": "bar" + }, + "annotations": { + "annotation1": "abc" + } + }, + "spec": { + "flavor": "s1.medium", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "Keypai-demo" + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100 + } + ], + "publicIP": { + "count": 2, + "eip": { + "iptype": "5_bgp", + "bandwidth": { + "size": 10, + "sharetype": "PER", + "chargemode": "traffic" + } + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "2afc3d7f-07d1-4c25-ba2e-8ee48d253d9f" + } + }, + "count": 2, + "extendParam": { + "chargingMode": 0, + "ecs:performancetype": "normal", + "init-node-password": "", + "orderID": "", + "productID": "" + } + }, + "status": { + "jobID": "2ec9b78d-9368-46f3-8f29-d1a95622a568" + } + } + +CCE Turbo cluster: + +.. code-block:: + + { + "kind": "Node", + "apiversion": "v3", + "metadata": { + "name": "turbo-cluster-node", + "uid": "5ecfddfe-87db-11ec-b5e5-0255ac101514" + }, + "spec": { + "flavor": "cce.c4.22xlarge.4.physical.129nic", + "az": "eu-de-01", + "login": { + "sshKey": "id_rsa" + }, + "rootVolume": { + "size": 40, + "volumetype": "SAS", + "hw:passthrough": true + }, + "dataVolumes": [ + { + "size": 100, + "volumetype": "SAS", + "hw:passthrough": true + } + ], + "count": 1, + "runtime": { + "name": "containerd" + }, + "extendParam": { + "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4" + } + }, + "status": { + "jobID": "5ec1518c-87db-11ec-b5e5-0255ac101514" + } + } + +Status Code +----------- + +:ref:`Table 24 ` describes the status codes of this API. + +.. _cce_02_0242__en-us_topic_0079614900_table46761928: + +.. table:: **Table 24** Status code + + +-------------+----------------------------------------------------------------------------+ + | Status Code | Description | + +=============+============================================================================+ + | 201 | The job for creating a node in a specified cluster is successfully issued. | + +-------------+----------------------------------------------------------------------------+ + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/creating_a_node_pool.rst b/api-ref/source/apis/cluster_management/creating_a_node_pool.rst new file mode 100644 index 0000000..1e87e41 --- /dev/null +++ b/api-ref/source/apis/cluster_management/creating_a_node_pool.rst @@ -0,0 +1,882 @@ +:original_name: cce_02_0354.html + +.. _cce_02_0354: + +Creating a Node Pool +==================== + +Function +-------- + +This API is used to create a node pool in a specified cluster. + +URI +--- + +POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0354__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and :ref:`Table 3 ` describe the request parameters. + +.. _cce_02_0354__table13796145119241: + +.. table:: **Table 2** Parameters in the request header + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | String | Description | + +=================+=================+=================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table1644211019: + +.. table:: **Table 3** NodePool structure + + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========================================================+===========================================+ + | kind | Yes | String | API type, which is fixed at **NodePool**. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | apiVersion | Yes | String | API version, which is fixed at **v3**. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | metadata | Yes | :ref:`metadata ` object | Metadata of the node pool. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | spec | Yes | :ref:`spec ` object | Parameters of the node pool. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + +.. _cce_02_0354__table13456192212: + +.. table:: **Table 4** Data structure of the **metadata** field + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================================================================+ + | name | Yes | String | Node pool name. | + | | | | | + | | | | Naming rule: Enter 1 to 50 characters that starts with a lowercase letter and cannot end with a hyphen (-). Lowercase letters, digits, and hyphens (-) are allowed. The value cannot be **DefaultPool**. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table620623542313: + +.. table:: **Table 5** Data structure of the **spec** field + + +------------------+-----------------+---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +==================+=================+===============================================================+=====================================================================================================================================================================================================================================================================================================================================+ + | type | No | String | Node pool type. If this parameter is left blank, the value **vm** is used by default. | + | | | | | + | | | | - **vm**: ECS | + | | | | - **ElasticBMS**: BMS. This value is valid in CCE Turbo cluster. | + +------------------+-----------------+---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeTemplate | Yes | :ref:`nodeTemplate ` object | Parameters of the node pool template. | + | | | | | + | | | | If **az** is set to **random**, when you create a node pool or update the number of nodes in a node pool, a scaling task is triggered. The system selects an AZ from all AZs where scaling is allowed to add nodes based on priorities. | + | | | | | + | | | | AZs with a smaller number of existing nodes have a higher priority. If AZs have the same number of nodes, the system selects the AZ based on the AZ sequence. Example: | + | | | | | + | | | | - Creating nodes in a node pool for the first time: Assume that AZ 1, AZ 2, and AZ 3 have available resources. These AZs have the same priority because they have no existing nodes. In this case, AZ 1 is selected by sequence to create all nodes to be added. | + | | | | - Adding nodes to a node pool that already has nodes: | + | | | | | + | | | | - Assume that the node pool has 1 node in AZ 1, 3 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 3 has a higher priority than AZ 2 because AZ 3 has less nodes. Therefore, all nodes to be added will be created in AZ 3. | + | | | | - Assume that the node pool has 1 node in AZ 1, 2 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 2 and AZ 3 have the same priority because they have the same number of nodes. Therefore, all nodes to be added will be created in AZ 2. | + +------------------+-----------------+---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | initialNodeCount | Yes | Integer | Expected number of nodes in this node pool. The value cannot be greater than the maximum number of nodes allowed for the cluster. | + +------------------+-----------------+---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | autoscaling | No | :ref:`autoscaling ` object | Auto scaling parameters. | + +------------------+-----------------+---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeManagement | No | :ref:`nodeManagement ` object | Node management parameters. | + +------------------+-----------------+---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table3150105216225: + +.. table:: **Table 6** Data structure of the **nodeTemplate** field + + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+==============================================================+====================================================================================================================================================================================================================================================================================+ + | flavor | Yes | String | Node specifications. For details, see the description of the **flavorRef** parameter in `Creating an ECS `__. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | When adding a BMS node, check whether the flavor of the node to be added supports local disks. If local disks are not supported, add at least one 100 GB EVS disk. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | Yes | String | AZ of the node. For details, see the description of the **availability_zone** parameter in `Creating an ECS `__. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | os | No | String | - Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2. | + | | | | - Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5. | + | | | | - Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7. | + | | | | - Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7. | + | | | | - Nodes using **kata** runtime in CCE Turbo cluster support EulerOS 2.9. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | If the **alpha.cce/NodeImageID** parameter in **extendParam** is specified during node creation, you do not need to set this field. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | login | Yes | :ref:`login ` object | Node login mode, which can be key pair or password. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | rootVolume | Yes | :ref:`Volume ` object | System disk parameters of the node. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dataVolumes | Yes | Array of :ref:`Volume ` object | Data disk parameters of the node. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | No | :ref:`publicIP ` object | EIP used by the node to access public networks. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | No | Integer | Billing mode of a node. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This field is not supported for the current version. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | count | Yes | Integer | Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. This field can be set to **0** for a node pool. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | No | :ref:`extendParam ` object | Extended parameter. Format: Key-value pair. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | userTags | No | Object | Tag of a VM. | + | | | | | + | | | | The format is key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | | + | | | | - **Key**: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported. | + | | | | - **Value**: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "userTags": [ | + | | | | { | + | | | | "key": "tag1", | + | | | | "value": "aaaa" | + | | | | }, | + | | | | { | + | | | | "key": "tag2", | + | | | | "value": "bbbb" | + | | | | } | + | | | | ] | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | k8sTags | No | Object | Tag of a Kubernetes node. | + | | | | | + | | | | The format is key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | | + | | | | - **Key**: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key | + | | | | - **Value**: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "k8sTags": { | + | | | | "key": "value" | + | | | | } | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | taints | No | Object | You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters: | + | | | | | + | | | | - **Key**: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key. | + | | | | - **Value**: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.). | + | | | | - **Effect**: Available options are **NoSchedule**, **PreferNoSchedule**, and **NoExecute**. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "taints": [{ | + | | | | "key": "status", | + | | | | "value": "unavailable", | + | | | | "effect": "NoSchedule" | + | | | | }, { | + | | | | "key": "looks", | + | | | | "value": "bad", | + | | | | "effect": "NoSchedule" | + | | | | }] | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeNicSpec | No | :ref:`nodeNicSpec ` object | Description about the node NIC. | + +-----------------+-----------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table10946114617286: + +.. table:: **Table 7** Data structure of the **login** field + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==================================================================================================================================+ + | sshKey | No | String | Name of the key pair used for node login. For details on how to create a key pair, see :ref:`Creating a Key Pair `. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------+ + | userPassword | No | String | Password used for node login. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | This field is not supported for the current version. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table1359314517: + +.. table:: **Table 8** Data structure of the **Volume** field + + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=====================================================================+============================================================================================================================================================================================+ + | volumetype | No | String | Disk type. For details, see the description of **root_volume** in `Creating an ECS `__. | + | | | | | + | | | | - **SATA**: common I/O disk type. | + | | | | - **SAS**: high I/O disk type. | + | | | | - **SSD**: ultra-high I/O disk type. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | No | Integer | Specifies the system disk size, in GB. The value ranges from 40 to 1024. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | No | Map | Disk extension parameter. For details, see the description of the extendparam parameter in `Creating an ECS `__. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hw:passthrough | No | Boolean | - Pay attention to this field if your ECS is SDI-compliant. If the value of this field is **true**, the created disk is of the SCSI type. | + | | | | - If the node pool type is **ElasticBMS**, this field must be set to **true**. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | metadata | No | :ref:`dataVolumeMetadata ` object | Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted. | + | | | | | + | | | | If data disks are created using a data disk image, this parameter cannot be used. | + +-----------------+-----------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table15849123210415: + +.. table:: **Table 9** Data structure of the **dataVolumeMetadata** field + + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +======================+=================+=================+==================================================================================================================================================================+ + | \__system__encrypted | No | String | Whether an EVS disk is encrypted. | + | | | | | + | | | | - **'0'**: not encrypted | + | | | | - **'1'**: encrypted | + | | | | | + | | | | If this parameter is not specified, EVS disks will not be encrypted by default. | + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | \__system__cmkid | Yes | String | CMK ID used for encryption. This parameter is used with **\__system__encrypted**. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | You can obtain the ID through HTTPS requests. For details, see `Querying the List of CMKs `__. | + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table139179586343: + +.. table:: **Table 10** Data structure of the **publicIP** field + + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+====================================================+=====================================================================+ + | ids | No | Array of strings | List of IDs of the existing EIPs. | + | | | | | + | | | | .. important:: | + | | | | | + | | | | NOTICE: | + | | | | If **ids** is set, you do not need to set **count** and **eip**. | + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + | count | No | Integer | Number of EIPs to be dynamically created. | + | | | | | + | | | | .. important:: | + | | | | | + | | | | NOTICE: | + | | | | The **count** and **eip** parameters must be set simultaneously. | + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + | eip | No | :ref:`eip ` object | EIP. | + | | | | | + | | | | .. important:: | + | | | | | + | | | | NOTICE: | + | | | | The **count** and **eip** parameters must be set simultaneously. | + +-----------------+-----------------+----------------------------------------------------+---------------------------------------------------------------------+ + +.. _cce_02_0354__table135065714419: + +.. table:: **Table 11** Data structure of the **eip** field + + +-----------+-----------+------------------------------------------------------------+----------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+============================================================+==================================+ + | iptype | Yes | String | Type of the EIP. | + +-----------+-----------+------------------------------------------------------------+----------------------------------+ + | bandwidth | Yes | :ref:`bandwidth ` object | Bandwidth parameters of the EIP. | + +-----------+-----------+------------------------------------------------------------+----------------------------------+ + +.. _cce_02_0354__table16381121974213: + +.. table:: **Table 12** Data structure of the **bandwidth** field + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | chargemode | No | String | Bandwidth billing mode. | + | | | | | + | | | | - If this parameter is not carried, the node is billed by bandwidth. | + | | | | - If this parameter is carried but is left blank, the node is billed by bandwidth. | + | | | | - If this parameter is set to **traffic**, the node is billed by traffic. | + | | | | - If this parameter is set to another value, node creation will fail. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | - Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended. | + | | | | - Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | Yes | Integer | Bandwidth size. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sharetype | Yes | String | Bandwidth sharing type. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table153332427337: + +.. table:: **Table 13** Data structure of the spec/extendParam field + + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=========================+=================+=================+===========================================================================================================================================================================================================================+ + | maxPods | No | Integer | Maximum number of pods on the node. | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agency_name | No | String | Specifies the IAM agency name. | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | alpha.cce/preInstall | No | String | Script required before the installation. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | The input value must be encoded using Base64. (Command: **echo -n "Content to be encoded" \| base64**) | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | alpha.cce/postInstall | No | String | Script required after the installation. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | The input value must be encoded using Base64. (Command: **echo -n "Content to be encoded" \| base64**) | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | alpha.cce/NodeImageID | No | String | Mandatory if a custom image is used in creating a bare metal node. | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | DockerLVMConfigOverride | No | String | ConfigMap of the Docker data disk. The following is an example configuration: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" | + | | | | | + | | | | In this example: | + | | | | | + | | | | - **userLV**: size of the user space, for example, **vgpaas/20%VG**. | + | | | | - **userPath**: mount path of the user space, for example, **/home/wqt-test**. | + | | | | - **diskType**: disk type. Currently, only the **evs**, **hdd**, and **ssd** are supported. | + | | | | - **lvType**: type of a logic volume. Currently, the value can be **linear** or **striped**. | + | | | | - **dockerThinpool**: Docker space size, for example, **vgpaas/60%VG**. | + | | | | - **kubernetesLV**: kubelet space size, for example, **vgpaas/20%VG**. | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicKey | No | String | Public key of the node. Used when creating a key pair. | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nicMultiqueue | No | String | ENI queue settings, the default setting is: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "[{\"queue\":4}]" | + | | | | | + | | | | - **queue** indicates the number of ENI queues. | + | | | | - Supported proportions are {"1":128, "2":92, "4":92, "8":32, "16":16, "28":9}. That is, there is one queue, a maximum of 128 ENIs can be bound. If there are two queues, a maximum of 92 ENIs can be bound. | + | | | | - A larger number of ENI queues indicates higher performance but fewer ENIs can be bound. The queue settings cannot be changed after the node pool is created. | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nicThreshold | No | String | ENI pre-binding thresholds, the default setting is: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "0.3:0.6" | + | | | | | + | | | | - The first decimal place indicates the low threshold. Formula: Minimum number of pre-bound ENIs = Min (128 x Low threshold, Maximum number of ENIs that can be bound to the queue) | + | | | | - The second decimal place indicates the high threshold. Formula: Maximum number of pre-bound ENIs = Min (128 x High threshold, Maximum number of ENIs that can be bound to the queue) | + | | | | - The high and low thresholds of the number of pre-bound ENIs are restricted by the maximum number of ENIs that can be bound to a queue. | + | | | | - ENIs bound to a BMS node = Number of ENIs currently used by pods + Number of pre-bound ENIs | + | | | | - CCE keeps binding ENIs to a BMS node to ensure that the minimum number of ENIs is always reached. (Min. pre-bound ENIs ≤ Number of pre-bound ENIs + Number of ENIs currently used by pods) | + | | | | - At every 2 minutes, CCE releases ENIs pre-bound to a BMS node to ensure that the maximum number of ENIs will not be exceeded. (Max. pre-bound ENIs ≥ Number of pre-bound ENIs + Number of ENIs currently used by pods) | + | | | | - Both the thresholds are one-decimal-place values ranging from 0.0 to 1.0. The low threshold must be smaller than or equal to the high one. | + | | | | - This field can be configured only for BMS nodes in a CCE Turbo cluster. | + | | | | - Pre-binding ENIs can speed up workload creation but occupies IP addresses. | + +-------------------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table322873620312: + +.. table:: **Table 14** Data structure of the nodeNicSpec field + + +------------+-----------+----------------------------------------------------------------+------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+================================================================+====================================+ + | primaryNic | No | :ref:`primaryNic ` object | Description about the primary NIC. | + +------------+-----------+----------------------------------------------------------------+------------------------------------+ + | extNics | No | Array of :ref:`extNics ` objects | Extension NIC. | + +------------+-----------+----------------------------------------------------------------+------------------------------------+ + +.. _cce_02_0354__request_nicspec: + +.. table:: **Table 15** Data structure of the primaryNic/extNics field + + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+==================+===================================================================================================================================================================================================================+ + | subnetId | No | String | Network ID of the subnet to which the NIC belongs. | + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | fixedIps | No | Array of strings | The IP address of the primary NIC is specified by **fixedIps**. The number of IP addresses cannot be greater than the number of created nodes. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipBlock | No | String | CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table1472543502018: + +.. table:: **Table 16** Data structure of the **autoscaling** field + + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=======================+===========+=========+=============================================================================================================================================================================================================================+ + | enable | No | Boolean | Whether to enable auto scaling. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | minNodeCount | No | Integer | Minimum number of nodes after a scale-down if auto scaling is enabled. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | maxNodeCount | No | Integer | Maximum number of nodes after a scale-up if auto scaling is enabled. The value of this parameter must be greater than or equal to that of **minNodeCount** and does not exceed the maximum number of nodes for the cluster. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | scaleDownCooldownTime | No | Integer | Interval during which nodes added after a scale-up will not be deleted, in minutes. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | priority | No | Integer | Node pool weight. A higher weight indicates a higher priority in scale-up. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table978201612141: + +.. table:: **Table 17** Data structure of the nodeManagement field + + +----------------------+-----------+--------+-------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +======================+===========+========+=============================================================================================================+ + | serverGroupReference | No | String | ECS group ID. If this parameter is specified, all nodes in the node pool will be created in this ECS group. | + +----------------------+-----------+--------+-------------------------------------------------------------------------------------------------------------+ + +**Example Request** + +CCE cluster: + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "wyr-17-nodepool-53042" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "autoscaling": { + "enable": true, + "minNodeCount": 1, + "maxNodeCount": 3, + "scaleDownCooldownTime": 10, + "priority": 1 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + }, + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool" + }, + "rootVolume": { + "volumetype": "SATA", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SATA", + "size": 100, + "extendParam": { + "useType": "docker" + } + } + ], + "billingMode": 0, + "extendParam": { + "alpha.cce/preInstall": "bHMgLWw=", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3", + "maxPods": 110, + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" + }, + "k8sTags": { + "tag1": "value1", + "tag2": "value2" + }, + "taints": [ + { + "key": "aaa", + "value": "bbb", + "effect": "NoSchedule" + }, + { + "key": "ccc", + "value": "ddd", + "effect": "NoSchedule" + } + ], + "userTags": [ + { + "key": "resource-tag1", + "value": "value1" + }, + { + "key": "resource-tag2", + "value": "value2" + } + ], + "nodeNicSpec": { + "primaryNic": { + "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef" + } + } + } + } + } + +CCE Turbo cluster: + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "turbo-cluster-nodepool1" + }, + "spec": { + "initialNodeCount": 0, + "type": "ElasticBMS", + "nodeTemplate": { + "flavor": "cce.c4.22xlarge.4.physical.129nic", + "az": "eu-de-01", + "login": { + "sshKey":"id_rsa" + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40, + "hw:passthrough": true}, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100, + "hw:passthrough": true + } + ], + "runtime": { + "name":"containerd" + }, + "extendParam": { + "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4" + } + } + } + } + +Response +-------- + +**Response parameters:** + +:ref:`Table 18 ` describes the response parameters. + +.. _cce_02_0354__table835415466262: + +.. table:: **Table 18** Response parameters + + +------------+------------------------------------------------------------+-----------------------------------------------+ + | Parameter | Type | Description | + +============+============================================================+===============================================+ + | kind | String | API type. The value is fixed to **NodePool**. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | apiVersion | String | API version. The value is fixed to **v3**. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | metadata | :ref:`metadata ` object | Node pool metadata. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | spec | :ref:`spec ` object | Detailed node pool parameters. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | status | :ref:`status ` object | Node pool status. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + +.. _cce_02_0354__table173551146152616: + +.. table:: **Table 19** Data structure of the metadata field + + ========= ====== ====================== + Parameter Type Description + ========= ====== ====================== + name String Name of the node pool. + uid String ID of the node pool. + ========= ====== ====================== + +.. _cce_02_0354__table1735515465260: + +.. table:: **Table 20** Data structure of the spec field + + +------------------+----------------------------------------------------------------+----------------------------------------------------+ + | Parameter | Type | Description | + +==================+================================================================+====================================================+ + | type | String | Node type. Currently, only VM nodes are supported. | + +------------------+----------------------------------------------------------------+----------------------------------------------------+ + | initialNodeCount | Integer | Initial number of nodes for the node pool. | + +------------------+----------------------------------------------------------------+----------------------------------------------------+ + | nodeTemplate | :ref:`nodeTemplate ` object | Detailed parameters of the node pool template. | + +------------------+----------------------------------------------------------------+----------------------------------------------------+ + | autoscaling | :ref:`autoscaling ` object | Auto scaling parameters. | + +------------------+----------------------------------------------------------------+----------------------------------------------------+ + | nodeManagement | :ref:`nodeManagement ` object | Node management parameters. | + +------------------+----------------------------------------------------------------+----------------------------------------------------+ + +.. _cce_02_0354__table14356154632610: + +.. table:: **Table 21** Data structure of the autoscaling field + + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+====================================================================================================================================================================================================================+ + | enable | Boolean | Whether to enable auto scaling. | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | minNodeCount | Integer | Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications. | + | | | | + | | | Minimum: **0** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | maxNodeCount | Integer | Maximum number of nodes allowed if auto scaling is enabled. This value must be greater than or equal to the value of **minNodeCount** and cannot exceed the maximum number of nodes in the cluster specifications. | + | | | | + | | | Minimum: **0** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | scaleDownCooldownTime | Integer | Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **2147483647** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | priority | Integer | Weight of a node pool. A node pool with a higher weight has a higher priority during scaling. | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table1778609171919: + +.. table:: **Table 22** Data structure of the nodeManagement field + + +----------------------+--------+-------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +======================+========+=============================================================================================================+ + | serverGroupReference | String | ECS group ID. If this parameter is specified, all nodes in the node pool will be created in this ECS group. | + +----------------------+--------+-------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0354__table19851129411: + +.. table:: **Table 23** Data structure of the status field + + +-----------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===============================================================+ + | currentNode | Integer | Number of nodes in the node pool. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + | deletingNode | Integer | Number of nodes being deleted in the node pool. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + | creatingNode | Integer | Number of nodes being created in the node pool. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + | phase | String | Node pool status. | + | | | | + | | | - **Synchronizing**: The node is being synchronized. | + | | | - **Synchronized**: The node has been synchronized. | + | | | - **SoldOut**: Nodes have been sold out. | + | | | - **Deleting**: The node is being deleted. | + | | | - **Error**: An error occurred when the node is being added. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **Synchronizing** | + | | | - **Synchronized** | + | | | - **SoldOut** | + | | | - **Deleting** | + | | | - **Error** | + | | | | + | | | .. note:: | + | | | | + | | | If the status is blank, the status is normal. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + | jobId | String | ID of the job to delete the node pool. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + +**Example response:** + +CCE cluster: + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "wyr-17-nodepool-53042", + "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool", + "userPassword": {} + }, + "rootVolume": { + "volumetype": "SATA", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SATA", + "size": 100, + "extendParam": { + "useType": "docker" + } + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef" + } + }, + "billingMode": 0, + "taints": [ + { + "key": "aaa", + "value": "bbb", + "effect": "NoSchedule" + }, + { + "key": "ccc", + "value": "ddd", + "effect": "NoSchedule" + } + ], + "k8sTags": { + "cce.cloud.com/cce-nodepool": "wyr-17-nodepool-53042", + "tag1": "value1", + "tag2": "value2" + }, + "userTags": [ + { + "key": "resource-tag1", + "value": "value1" + }, + { + "key": "resource-tag2", + "value": "value2" + } + ], + "extendParam": { + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear", + "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/preInstall": "bHMgLWw=", + "maxPods": 110, + "publicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQA***d-by-Nova\n" + } + }, + "autoscaling": { + "enable": true, + "minNodeCount": 1, + "maxNodeCount": 3, + "scaleDownCooldownTime": 10, + "priority": 1 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + } + }, + "status": { + "currentNode": 0, + "deletingNode": 0, + "creatingNode": 0, + "phase": "" + } + } + +CCE Turbo cluster: + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "turbo-cluster-nodepool1", + "uid": "99addaa2-69eb-11ea-a592-0255ac1001bb" + }, + "spec": { + "initialNodeCount": 0, + "type": "ElasticBMS", + "nodeTemplate": { + "flavor": "cce.c4.22xlarge.4.physical.129nic", + "az": "eu-de-01", + "os": "EulerOS 2.9", + "login": { + "sshKey":"id_rsa" + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40, + "hw:passthrough": true}, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100, + "hw:passthrough": true + } + ], + "runtime": { + "name":"containerd" + }, + "extendParam": { + "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4" + } + } + }, + "status": { + "phase": "" + } + } + +Status Code +----------- + +:ref:`Table 24 ` describes the status code of this API. + +.. _cce_02_0354__zh-cn_topic_0079614900_table46761928: + +.. table:: **Table 24** Status code + + +-------------+-------------------------------------------------------------------------------+ + | Status Code | Description | + +=============+===============================================================================+ + | 201 | The job for creating a node in a specified cluster is successfully delivered. | + +-------------+-------------------------------------------------------------------------------+ + +For the description about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/deleting_a_node.rst b/api-ref/source/apis/cluster_management/deleting_a_node.rst new file mode 100644 index 0000000..fde312e --- /dev/null +++ b/api-ref/source/apis/cluster_management/deleting_a_node.rst @@ -0,0 +1,199 @@ +:original_name: cce_02_0246.html + +.. _cce_02_0246: + +Deleting a Node +=============== + +Function +-------- + +This API is used to delete a specified node. + +URI +--- + +DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0246__table2027961241820: + +.. table:: **Table 1** Description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | node_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` describes the request parameters. + +.. _cce_02_0246__table7347141814502: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters**: + +:ref:`Table 3 ` describes the response parameters. + +.. _cce_02_0246__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 3** Response parameters + + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=========================================================================================================================+ + | kind | String | API type. The value is fixed at **Node** and cannot be changed. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Node's metadata, which is a collection of attributes. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`status ` object | Node status and jobID of the node deletion job. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0246__table1741714540447: + +.. table:: **Table 4** Data structure of the **status** field + + +-----------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=================================================================+==============================================================================================================+ + | phase | String | Node status. | + | | | | + | | | - **Build**: The VM that hosts the node is being created. | + | | | - **Active**: The node is ready for use. | + | | | - **Abnormal**: The node is unready for use. | + | | | - **Deleting**: The node is being deleted. | + | | | - **Installing**: The node is being installed. | + | | | - **Upgrading**: The node is being upgraded. | + +-----------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + | jobID | String | ID of the node deletion job. You can query job progress by job ID to keep updated on node deletion progress. | + +-----------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + | serverId | String | ID of the ECS where the node resides. | + +-----------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + | publicIP | String | EIP used by the node to access public networks. | + +-----------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + | privateIP | String | Private IP address used by the node to communicate with other nodes in the same VPC as the current cluster. | + +-----------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + | deleteStatus | :ref:`DeleteStatus ` object | Resource status during resource deletion. | + +-----------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0246__response_deletestatus: + +.. table:: **Table 5** DeleteStatus + + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+=========+======================================================================================================+ + | previous_total | Integer | Total number of existing cluster resource records when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | current_total | Integer | Latest number of resource records, which is generated based on the current cluster resource records. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | updated | Integer | Total number of resource records updated when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | added | Integer | Total number of resource records updated when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | deleted | Integer | Total number of resource records deleted when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + +**Example response**: + +.. code-block:: + + { + "kind": "Node", + "apiVersion": "v3", + "metadata": { + "name": "new-hostname", + "uid": "cc697ad9-9563-11e8-8ea7-0255ac106311", + "creationTimestamp": "2020-02-01 08:20:49.944664515 +0000 UTC", + "updateTimestamp": "2020-02-01 09:20:05.644032347 +0000 UTC", + "annotations": { + "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5" + } + }, + "spec": { + "flavor": "s1.medium", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-demo" + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100 + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "c90b3ce5-e1f1-4c87-a006-644d78846438" + } + }, + "billingMode": 0 + }, + "status": { + "phase": "Active", + "jobID": "661f6f7d-956c-11e8-a916-0255ac10575d", + "serverId": "5b504f8d-33f1-4ab7-a600-b62dac967d72", + "privateIP": "192.168.0.69", + "publicIP": "10.154.194.59" + } + } + +Status Code +----------- + +:ref:`Table 6 ` describes the status code of this API. + +.. _cce_02_0246__en-us_topic_0079614900_table46761928: + +.. table:: **Table 6** Status code + + =========== ======================================================== + Status Code Description + =========== ======================================================== + 200 The job for deleting the node is successfully delivered. + =========== ======================================================== + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/deleting_a_node_pool.rst b/api-ref/source/apis/cluster_management/deleting_a_node_pool.rst new file mode 100644 index 0000000..85c5457 --- /dev/null +++ b/api-ref/source/apis/cluster_management/deleting_a_node_pool.rst @@ -0,0 +1,737 @@ +:original_name: cce_02_0357.html + +.. _cce_02_0357: + +Deleting a Node Pool +==================== + +Function +-------- + +This API is used to delete a specified node pool. + +.. note:: + + The URL for cluster management is in the format of **https://Endpoint/uri**. In the URL, **uri** indicates the resource path, that is, the path for API access. + +URI +--- + +DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0357__table127923532918: + +.. table:: **Table 1** Parameter description + + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=============+===========+=========================================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | nodepool_id | Yes | Node pool ID. For details about how to obtain the node pool ID, see :ref:`Listing All Node Pools in a Specified Cluster `. | + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 1 ` describe the request parameters. + +.. table:: **Table 2** Parameters in the request header + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | String | Description | + +=================+=================+=================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +NA + +Response +-------- + +**Response parameters**: + +.. table:: **Table 3** Response body parameters + + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | Parameter | Type | Description | + +=======================+=========================================================================+===============================================+ + | kind | String | API type. The value is fixed at **NodePool**. | + | | | | + | | | Default: **NodePool** | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3**. | + | | | | + | | | Default: **v3** | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | metadata | :ref:`NodePoolMetadata ` object | Metadata information of the node pool. | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | spec | :ref:`NodePoolSpec ` object | Node pool specifications. | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | status | :ref:`NodePoolStatus ` object | Node pool status. | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + +.. _cce_02_0357__response_nodepoolmetadata: + +.. table:: **Table 4** NodePoolMetadata + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================================================================================+ + | name | String | Node pool name. | + | | | | + | | | .. note:: | + | | | | + | | | Naming rules: | + | | | | + | | | - Enter 1 to 50 characters, starting with a lowercase letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed. | + | | | - You cannot create node pools named DefaultPool. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **50** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | uid | String | UID of the node pool. The value is automatically generated after the object is updated. A user-defined value will not take effect. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_nodepoolspec: + +.. table:: **Table 5** NodePoolSpec + + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================================================================================+=======================================================================================+ + | type | String | Node pool type. If this parameter is left blank, the value **vm** is used by default. | + | | | | + | | | - **vm**: ECS | + | | | - **ElasticBMS**: BMS. This value is valid in CCE Turbo cluster. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | nodeTemplate | :ref:`V3NodeSpec ` object | Detailed parameters of the node pool template. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | initialNodeCount | Integer | Initial number of nodes for the node pool. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | autoscaling | :ref:`NodePoolNodeAutoscaling ` object | Auto scaling parameters. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | nodeManagement | :ref:`NodeManagement ` object | Node management configuration. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_v3nodespec: + +.. table:: **Table 6** V3NodeSpec + + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=====================================================================+======================================================================================================================================================================================================================================================================================+ + | flavor | String | Node specifications. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **50** | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | String | \\t\nName of the AZ where the node is located. This AZ exists at the underlying layer and is in the physical AZ group of the user. | + | | | | + | | | Maximum: **200** | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | os | String | Node OS. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | login | :ref:`Login ` object | Node login mode. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | rootVolume | :ref:`Volume ` object | System disk information of the node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dataVolumes | Array of :ref:`Volume ` objects | Data disk parameters of the node. Currently, you can add the second data disk for your node on the CCE console. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | :ref:`V3NodePublicIP ` object | EIP of the node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeNicSpec | :ref:`NodeNicSpec ` object | NIC information of the node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | count | Integer | Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. This field can be set to **0** for a node pool. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | taints | Array of :ref:`Taint ` objects | You can add taints to created nodes to set affinity. Each taint contains the following three parameters: | + | | | | + | | | - **Key**: The value must start with a letter or digit and can contain letters, digits, hyphens (-), underscores (*), and periods (.). The maximum length is 63 characters. In addition, the DNS subdomain can be used as the prefix.* | + | | | - **Value**\ *: The value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (*), and periods (.). | + | | | - **Effect**: Available options are **NoSchedule**, **PreferNoSchedule**, and **NoExecute**. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "taints": [{ | + | | | "key": "status", | + | | | "value": "unavailable", | + | | | "effect": "NoSchedule" | + | | | }, { | + | | | "key": "looks", | + | | | "value": "bad", | + | | | "effect": "NoSchedule" | + | | | }] | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | k8sTags | Map | The format is a key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | + | | | - **Key**: Enter 1 to 63 characters, starting with a letter or digit. Only letters, digits, hyphens (-), underscores (*), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key* | + | | | - **Value**\ *: The value can be left blank or contain 1 to 63 characters that start with a letter or digit. Only letters, digits, hyphens (-), underscores (*), and periods (.) are allowed in the character string. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "k8sTags": { | + | | | "key": "value" | + | | | } | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ecsGroupId | String | Cloud server group ID. If this field is specified, the node is created in the specified cloud server group. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported when you use CCE Turbo cluster. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dedicatedHostId | String | ID of the DeH to which the node is scheduled. | + | | | | + | | | This field is not supported when you add a node during node pool creation. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | offloadNode | Boolean | Whether the node belongs to a CCE Turbo cluster. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported when you add a node during node pool creation. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | userTags | Array of :ref:`UserTag ` objects | Cloud server labels. The key of a label must be unique. The maximum number of user-defined labels supported by CCE depends on the region. In the region that supports the least number of labels, you can still create up to 5 labels for a cloud server. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | Map | Extended parameter for creating a node. The options are as follows: | + | | | | + | | | - **ecs:performancetype**: ECS flavor. This field does not exist for a BMS node. | + | | | - **productID**: product ID. | + | | | - **maxPods**: maximum number of pods that can be created on a node, including the default system pods. Value range: 16 to 256 This limit prevents the node from being overloaded fpr managing too many pods. | + | | | | + | | | - **DockerLVMConfigOverride**: Docker data disk configurations. The following is an example default configuration: | + | | | | + | | | .. code-block:: | + | | | | + | | | "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" | + | | | | + | | | The configuration contains the following fields: | + | | | | + | | | - **userLV**: size of the user space, for example, **vgpaas/20%VG**. | + | | | - **userPath**: mount path of the user space, for example, **/home/wqt-test**. | + | | | - **diskType**: disk type. Currently, only **evs**, **hdd**, and **ssd** are supported. | + | | | - **lvType**: type of a logic volume. Currently, the value can be **linear** or **striped**. | + | | | - **dockerThinpool**: Docker space size, for example, **vgpaas/60%VG**. | + | | | - **kubernetesLV**: kubelet space size, for example, **vgpaas/20%VG**. | + | | | | + | | | - **dockerBaseSize**: available disk space of a single Docker container on a node in Device Mapper mode. This field is not supported in OverlayFS mode (nodes that use CentOS 7.6 or Ubuntu 18.04 in CCE Turbo clusters and nodes that use Ubuntu 18.04 in CCE clusters). | + | | | | + | | | - **init-node-password**: initial node password | + | | | | + | | | - **offloadNode**: whether the node is a CCE Turbo cluster node. | + | | | | + | | | - **publicKey**: node public key. Used when creating a key pair. | + | | | | + | | | - **alpha.cce/preInstall**: pre-installation script. | + | | | | + | | | .. note:: | + | | | | + | | | The input value must be Base64-encoded. (Command: **echo -n Content to be encoded \| base64**) | + | | | | + | | | - **alpha.cce/postInstall**: post-installation script | + | | | | + | | | .. note:: | + | | | | + | | | The input value must be Base64-encoded. (Command: **echo -n Content to be encoded \| base64**) | + | | | | + | | | - **alpha.cce/NodeImageID**: This field is required when a custom image is used to create a BMS node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_login: + +.. table:: **Table 7** Login + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==============================================================================================+ + | sshKey | String | Name of the key pair used for login. Either the key pair or password must be used for login. | + | | | | + | | | For details on how to create a key pair, see :ref:`Creating a Key Pair `. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------+ + | userPassword | String | Password used for node login. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_v3rootvolume: + +.. table:: **Table 8** Volume + + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=============================================================================+================================================================================================================================================================================================+ + | size | Integer | Disk size in the unit of GB. | + | | | | + | | | - System disk: 40 to 1024 | + | | | - Data disk: 100 to 32768 | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | volumetype | String | Disk type. For details about possible values, see the description of the **root_volume** parameter in the API used to create an ECS in the ECS API reference. | + | | | | + | | | - **SATA**: common I/O disk | + | | | - **SAS**: high I/O disk | + | | | - **SSD**: ultra-high I/O disk | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | Map | Disk extension parameter. For details, see the description of the **extendparam** parameter in `Creating an ECS `__. | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hw:passthrough | Boolean | - Pay attention to this field if your ECS is SDI-compliant. If the value of this field is **true**, the created disk is of the SCSI type. | + | | | - If the node pool type is **ElasticBMS**, this field must be set to **true**. | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`dataVolumeMetadata ` object | Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted. | + | | | | + | | | If data disks are created using a data disk image, this parameter cannot be used. | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_datavolumemetadata: + +.. table:: **Table 9** DataVolumeMetadata + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+================================================================================================================================================================+ + | \__system__encrypted | String | Whether the EVS disk is encrypted. The value **0** indicates that the EVS disk is not encrypted, and the value **1** indicates that the EVS disk is encrypted. | + | | | | + | | | If this field does not exist, the disk will not be encrypted by default. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | \__system__cmkid | String | CMK ID, which indicates encryption in **metadata**. This field is used with **\__system__encrypted**. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_v3nodepublicip: + +.. table:: **Table 10** V3NodePublicIP + + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===================================================================+========================================================================================================+ + | ids | Array of strings | IDs of existing EIPs. The quantity cannot be greater than the number of nodes to be created. | + | | | | + | | | .. note:: | + | | | | + | | | If the **ids** parameter has been set, you do not need to set the **count** and **eip** parameters. | + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + | count | Integer | Number of EIPs to be dynamically created. | + | | | | + | | | .. note:: | + | | | | + | | | The **count** and **eip** parameters must be set together. | + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + | eip | :ref:`V3NodeEIPSpec ` object | EIP configuration. | + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_v3nodeeipspec: + +.. table:: **Table 11** V3NodeEIPSpec + + +-----------+-----------------------------------------------------------------------+----------------------------------+ + | Parameter | Type | Description | + +===========+=======================================================================+==================================+ + | iptype | String | EIP type. | + +-----------+-----------------------------------------------------------------------+----------------------------------+ + | bandwidth | :ref:`V3NodeBandwidth ` object | Bandwidth parameters of the EIP. | + +-----------+-----------------------------------------------------------------------+----------------------------------+ + +.. _cce_02_0357__response_v3nodebandwidth: + +.. table:: **Table 12** V3NodeBandwidth + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==============================================================================================================================================================================================+ + | chargemode | String | Bandwidth billing modes: | + | | | | + | | | - If this field is not specified, the billing is based on bandwidth. | + | | | - If the field is null, the billing is based on bandwidth. | + | | | - If the field value is **traffic**, the billing is based on traffic. | + | | | - If the value is out of the preceding options, the cloud server will fail to be created. | + | | | | + | | | .. note:: | + | | | | + | | | - Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended. | + | | | - Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | String | Bandwidth size. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sharetype | String | Bandwidth sharing type. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_nodenicspec: + +.. table:: **Table 13** NodeNicSpec + + +------------+-----------------------------------------------------------------+---------------------------------+ + | Parameter | Type | Description | + +============+=================================================================+=================================+ + | primaryNic | :ref:`primaryNic ` object | Description of the primary NIC. | + +------------+-----------------------------------------------------------------+---------------------------------+ + | extNics | Array of :ref:`extNics ` objects | Extension NIC. | + +------------+-----------------------------------------------------------------+---------------------------------+ + +.. _cce_02_0357__response_nicspec: + +.. table:: **Table 14** Data structure of the primaryNic/extNics field + + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+==================+===================================================================================================================================================================================================================+ + | subnetId | String | Network ID of the subnet to which the NIC belongs. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | fixedIps | Array of strings | The IP address of the primary NIC is specified by **fixedIps**. The number of IP addresses cannot be greater than the number of created nodes. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipBlock | String | CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_taint: + +.. table:: **Table 15** Taint + + +-----------------------+-----------------------+-------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=========================+ + | key | String | Key. | + +-----------------------+-----------------------+-------------------------+ + | value | String | Value. | + | | | | + | | | Maximum: **63** | + +-----------------------+-----------------------+-------------------------+ + | effect | String | Effect. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **NoSchedule** | + | | | - **PreferNoSchedule** | + | | | - **NoExecute** | + +-----------------------+-----------------------+-------------------------+ + +.. _cce_02_0357__response_usertag: + +.. table:: **Table 16** UserTag + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===============================================================================================+ + | key | String | Key of the cloud server label. The value cannot start with **CCE-** or **\__type_baremetal**. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + | value | String | Value of the cloud server label. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **43** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_nodepoolnodeautoscaling: + +.. table:: **Table 17** NodePoolNodeAutoscaling + + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+====================================================================================================================================================================================================================+ + | enable | Boolean | Whether to enable auto scaling. | + | | | | + | | | Default: **false** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | minNodeCount | Integer | Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications. | + | | | | + | | | Minimum: **0** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | maxNodeCount | Integer | Maximum number of nodes allowed if auto scaling is enabled. This value must be greater than or equal to the value of **minNodeCount** and cannot exceed the maximum number of nodes in the cluster specifications. | + | | | | + | | | Minimum: **0** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | scaleDownCooldownTime | Integer | Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **2147483647** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | priority | Integer | Weight of a node pool. A node pool with a higher weight has a higher priority during scaling. | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_nodemanagement: + +.. table:: **Table 18** NodeManagement + + +----------------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +======================+========+==================================================================================================================================================================================================================================================================================================================+ + | serverGroupReference | String | Cloud server group ID. If this field is specified, all nodes in the node pool will be created in this group. The group ID can be specified only when you create the node pool and cannot be modified. When you specify a cloud server group, the number of nodes in the node pool cannot exceed the group quota. | + +----------------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0357__response_nodepoolstatus: + +.. table:: **Table 19** NodePoolStatus + + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+============================================================================+ + | currentNode | Integer | Number of nodes in the node pool. | + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + | phase | String | Node pool status. If this field is left blank, the node pool is available. | + | | | | + | | | - **Synchronizing**: Scale-in is being performed. | + | | | - **Synchronized**: The node pool fails to be updated. | + | | | - **SoldOut**: Node resources are sold out. | + | | | - **Deleting**: The node pool is being deleted. | + | | | - **Error**: An error occurs. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **Synchronizing** | + | | | - **Synchronized** | + | | | - **SoldOut** | + | | | - **Deleting** | + | | | - **Error** | + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + | jobId | String | ID of the job to delete the node pool. | + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + +**Response example**: + +.. code-block:: + + { + "kind": "List", + "apiVersion": "v3", + "items": [ + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "nodepool-name-change", + "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-02", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool", + "userPassword": {} + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100, + "extendParam": { + "useType": "docker" + } + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef" + } + }, + "billingMode": 0, + "taints": [ + { + "key": "change-taints", + "value": "value1", + "effect": "NoExecute" + } + ], + "k8sTags": { + "cce.cloud.com/cce-nodepool": "nodepool-name-change", + "change-tag": "value2" + }, + "userTags": [ + { + "key": "change-resource-tag", + "value": "value3" + } + ], + "extendParam": { + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear", + "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/preInstall": "bHMgLWw=", + "maxPods": 110 + } + }, + "autoscaling": { + "enable": true, + "minNodeCount": 2, + "maxNodeCount": 4, + "scaleDownCooldownTime": 10, + "priority": 2 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + } + }, + "status": { + "currentNode": 0, + "phase": "" + } + } + ] + } + +Status Code + +:ref:`Table 20 ` describes the status code of this API. + +.. _cce_02_0357__en-us_topic_0079614900_table46761928: + +.. table:: **Table 20** Status code + + +-------------+---------------------------------------------------------------------------+ + | Status Code | Description | + +=============+===========================================================================+ + | 200 | Information about all node pools in the cluster is successfully obtained. | + +-------------+---------------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. + +Error Codes + +See :ref:`Error Codes `. + +For details about the response parameters, see :ref:`Table 18 `. + +**Example response:** + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "test-nodepool", + "uid": "65787e3e-cd82-11ea-8ec6-0255ac1001be" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool", + "userPassword": {} + }, + "rootVolume": { + "volumetype": "SATA", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SATA", + "size": 100, + "extendParam": { + "useType": "docker" + }, + "metadata": { + "__system__cmkid": "1ed68cb7-b09b-423c-8d66-fdd2e063769d", + "__system__encrypted": "1" + } + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "3d6f5dc2-caf7-4a06-b4ac-11a3a5a49cdd" + } + }, + "billingMode": 0, + "taints": [ + { + "key": "test-taints", + "value": "test", + "effect": "NoSchedule" + } + ], + "k8sTags": { + "cce.cloud.com/cce-nodepool": "test-nodepool", + "test-k8stag": "test" + }, + "userTags": [ + { + "key": "test-resourcetag", + "value": "test" + } + ], + "extendParam": { + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/preInstall": "bHMgLWw=", + "maxPods": 100 + } + }, + "autoscaling": { + "enable": true, + "minNodeCount": 0, + "maxNodeCount": 4, + "scaleDownCooldownTime": 5, + "priority": 1 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + } + }, + "status": { + "currentNode": 0, + "phase": "Deleting", + "jobId": "d11c13c4-cd82-11ea-8ec6-0255ac1001be" + } + } + +Status Code +----------- + +:ref:`Table 21 ` describes the status code of this API. + +.. _cce_02_0357__zh-cn_topic_0079614900_table46761928: + +.. table:: **Table 21** Status code + + =========== =========================================================== + Status Code Description + =========== =========================================================== + 200 The job for deleting a node pool is successfully delivered. + =========== =========================================================== + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/deleting_a_specified_cluster.rst b/api-ref/source/apis/cluster_management/deleting_a_specified_cluster.rst new file mode 100644 index 0000000..60efbde --- /dev/null +++ b/api-ref/source/apis/cluster_management/deleting_a_specified_cluster.rst @@ -0,0 +1,443 @@ +:original_name: cce_02_0241.html + +.. _cce_02_0241: + +Deleting a Specified Cluster +============================ + +Function +-------- + +This API is used to delete a specified cluster. + +.. note:: + + The URL for cluster management is in the format of **https://Endpoint/uri**. In the URL, **uri** indicates the resource path, that is, the path for API access. + +URI +--- + +DELETE /api/v3/projects/{project_id}/clusters/{cluster_id} + +.. table:: **Table 1** Path parameters + + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========+===============================================================================================================================+ + | project_id | Yes | String | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | String | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==============================================================================================================================================================================================================+ + | errorStatus | No | String | This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of **errorStatus** is null, the cluster stays in the Deleting state, but not Error. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **10** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_efs | No | String | Whether to delete SFS Turbo resources. Value options: | + | | | | | + | | | | - **true** or **block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | | - **try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | | - **false** or **skip** (The object is not deleted. These are the default value options.) | + | | | | | + | | | | Default: **false** | + | | | | | + | | | | Enumeration values: | + | | | | | + | | | | - **true** | + | | | | - **block** | + | | | | - **try** | + | | | | - **false** | + | | | | - **skip** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_eni | No | String | Whether to delete ENI ports. Value options: | + | | | | | + | | | | - **true** or **block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | | - **try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | | - **false** or **skip** (The object is not deleted. These are the default value options.) | + | | | | | + | | | | Default: **false** | + | | | | | + | | | | Enumeration values: | + | | | | | + | | | | - **true** | + | | | | - **block** | + | | | | - **try** | + | | | | - **false** | + | | | | - **skip** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_evs | No | String | Whether to delete EVS disks. Value options: | + | | | | | + | | | | - **true** or **block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | | - **try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | | - **false** or **skip** (The object is not deleted. These are the default value options.) | + | | | | | + | | | | Default: **false** | + | | | | | + | | | | Enumeration values: | + | | | | | + | | | | - **true** | + | | | | - **block** | + | | | | - **try** | + | | | | - **false** | + | | | | - **skip** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_net | No | String | Whether to delete cluster Service/ingress-related resources, such as ELB. Value options: | + | | | | | + | | | | - **true** or **block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | | - **try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | | - **false** or **skip** (The object is not deleted. These are the default value options.) | + | | | | | + | | | | Default: **false** | + | | | | | + | | | | Enumeration values: | + | | | | | + | | | | - **true** | + | | | | - **block** | + | | | | - **try** | + | | | | - **false** | + | | | | - **skip** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_obs | No | String | Whether to delete the OBS resources. Value options: | + | | | | | + | | | | - **true** or **block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | | - **try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | | - **false** or **skip** (The object is not deleted. These are the default value options.) | + | | | | | + | | | | Default: **false** | + | | | | | + | | | | Enumeration values: | + | | | | | + | | | | - **true** | + | | | | - **block** | + | | | | - **try** | + | | | | - **false** | + | | | | - **skip** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_sfs | No | String | Whether to delete the SFS resources. Value options: | + | | | | | + | | | | - **true** or **block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | | - **try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | | - **false** or **skip** (The object is not deleted. These are the default value options.) | + | | | | | + | | | | Default: **false** | + | | | | | + | | | | Enumeration values: | + | | | | | + | | | | - **true** | + | | | | - **block** | + | | | | - **try** | + | | | | - **false** | + | | | | - **skip** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 3 ` lists the request parameters. + +.. _cce_02_0241__table538113720514: + +.. table:: **Table 3** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters**: + +:ref:`Table 4 ` describes response parameters. + +.. _cce_02_0241__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 4** Response parameters + + +------------+-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+===================================================================+============================================================================================================================+ + | kind | String | API type. The value is fixed at **Cluster** and cannot be changed. | + +------------+-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Cluster metadata, which is a collection of attributes. | + +------------+-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +------------+-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`ClusterStatus ` object | Cluster status and jobID of the job that deletes a specified project. | + +------------+-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0241__response_clusterstatus: + +.. table:: **Table 5** ClusterStatus + + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+==========================================================================+====================================================================================================================================================+ + | phase | String | Cluster status. Possible values: | + | | | | + | | | - **Available**: The cluster is running properly. | + | | | - **Unavailable**: The cluster is exhibiting unexpected behavior. Manually delete the cluster or contact the administrator to delete the cluster. | + | | | - **ScalingUp**: Nodes are being added to the cluster. | + | | | - **ScalingDown**: The cluster is being downsized to fewer nodes. | + | | | - **Creating**: The cluster is being created. | + | | | - **Deleting**: The cluster is being deleted. | + | | | - **Upgrading**: The cluster is being upgraded. | + | | | - **Resizing**: Cluster specifications are being changed. | + | | | - **Empty**: The cluster has no resources. | + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | jobID | String | Job ID. | + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | reason | String | Reason of cluster state change. This parameter is returned if the cluster is not in the Available state. | + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | message | String | Detailed information about why the cluster changes to the current state. This parameter is returned if the cluster is not in the Available state. | + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | endpoints | :ref:`ClusterEndpoints ` objects | Access address of kube-apiserver in the cluster. | + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | deleteOption | :ref:`deleteOption ` Object | Whether to delete configurations. This parameter is contained only in the response to the deletion request. | + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | deleteStatus | :ref:`deleteStatus ` Object | Whether to delete the status information. This parameter is contained only in the response to the deletion request. | + +-----------------------+--------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0241__response_clusterendpoints: + +.. table:: **Table 6** ClusterEndpoints + + +--------------+--------+-------------------------------------------------------------+ + | Parameter | Type | Description | + +==============+========+=============================================================+ + | internal | String | Internal network address. | + +--------------+--------+-------------------------------------------------------------+ + | external | String | External network address. | + +--------------+--------+-------------------------------------------------------------+ + | external_otc | String | Endpoint of the cluster to be accessed through API Gateway. | + +--------------+--------+-------------------------------------------------------------+ + +.. _cce_02_0241__table1071610413396: + +.. table:: **Table 7** deleteOption + + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==============================================================================================================================================================+ + | delete_sfs | String | Whether to delete SFS Turbo resources. Value options: | + | | | | + | | | - **delete-true** or **delete-block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | - **delete-try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | - **delete-false** or **delete-skip** (The object is not deleted. These are the default value options.) | + | | | | + | | | Default: **delete-false** | + | | | | + | | | Enumeration values: | + | | | | + | | | - **delete-true** | + | | | - **delete-block** | + | | | - **delete-try** | + | | | - **delete-false** | + | | | - **delete-skip** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_eni | String | Whether to delete ENI ports. Value options: | + | | | | + | | | - **delete-true** or **delete-block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | - **delete-try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | - **delete-false** or **delete-skip** (The object is not deleted. These are the default value options.) | + | | | | + | | | Default: **delete-false** | + | | | | + | | | Enumeration values: | + | | | | + | | | - **delete-true** | + | | | - **delete-block** | + | | | - **delete-try** | + | | | - **delete-false** | + | | | - **delete-skip** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_evs | String | Whether to delete EVS disks. Value options: | + | | | | + | | | - **delete-true** or **delete-block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | - **delete-try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | - **delete-false** or **delete-skip** (The object is not deleted. These are the default value options.) | + | | | | + | | | Default: **delete-false** | + | | | | + | | | Enumeration values: | + | | | | + | | | - **delete-true** | + | | | - **delete-block** | + | | | - **delete-try** | + | | | - **delete-false** | + | | | - **delete-skip** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_net | String | Whether to delete cluster Service/ingress-related resources, such as ELB. Value options: | + | | | | + | | | - **delete-true** or **delete-block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | - **delete-try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | - **delete-false** or **delete-skip** (The object is not deleted. These are the default value options.) | + | | | | + | | | Default: **delete-false** | + | | | | + | | | Enumeration values: | + | | | | + | | | - **delete-true** | + | | | - **delete-block** | + | | | - **delete-try** | + | | | - **delete-false** | + | | | - **delete-skip** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_obs | String | Whether to delete the OBS resources. Value options: | + | | | | + | | | - **delete-true** or **delete-block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | - **delete-try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | - **delete-false** or **delete-skip** (The object is not deleted. These are the default value options.) | + | | | | + | | | Default: **delete-false** | + | | | | + | | | Enumeration values: | + | | | | + | | | - **delete-true** | + | | | - **delete-block** | + | | | - **delete-try** | + | | | - **delete-false** | + | | | - **delete-skip** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | delete_sfs | String | Whether to delete the SFS resources. Value options: | + | | | | + | | | - **delete-true** or **delete-block** (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.) | + | | | - **delete-try** (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.) | + | | | - **delete-false** or **delete-skip** (The object is not deleted. These are the default value options.) | + | | | | + | | | Default: **delete-false** | + | | | | + | | | Enumeration values: | + | | | | + | | | - **delete-true** | + | | | - **delete-block** | + | | | - **delete-try** | + | | | - **delete-false** | + | | | - **delete-skip** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0241__table191928471414: + +.. table:: **Table 8** deleteStatus + + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+=========+======================================================================================================+ + | previous_total | Integer | Total number of existing cluster resource records when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | current_total | Integer | Latest number of resource records, which is generated based on the current cluster resource records. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | updated | Integer | Total number of resource records updated when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | added | Integer | Total number of resource records updated when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + | deleted | Integer | Total number of resource records deleted when the cluster is deleted. | + +----------------+---------+------------------------------------------------------------------------------------------------------+ + +**Response example**: + +.. code-block:: + + { + "kind": "Cluster", + "apiVersion": "v3", + "metadata": { + "name": "mycluster", + "uid": "7a661f82-90d9-11ea-9f85-0255ac10110d", + "creationTimestamp": "2020-05-08 03:10:32.403757 +0000 UTC", + "updateTimestamp": "2020-05-08 03:18:29.238331 +0000 UTC" + }, + "spec": { + "type": "VirtualMachine", + "flavor": "cce.s1.small", + "version": "v1.17.9-r0", + "az": "eu-de-01", + "ipv6enable": false, + "supportIstio": true, + "hostNetwork": { + "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1", + "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438", + "SecurityGroup": "11fb88d1-0fc9-422d-963d-374ababa5f57" + }, + "containerNetwork": { + "mode": "overlay_l2", + "cidr": "172.16.0.0/16" + }, + + "authentication": { + "mode": "rbac", + "authenticatingProxy": {} + }, + "billingMode": 0, + "extendParam": { + "alpha.cce/fixPoolMask": "", + "kubernetes.io/cpuManagerPolicy": "", + "upgradefrom": "" + }, + "kubernetesSvcIpRange": "10.247.0.0/16", + "kubeProxyMode": "iptables" + }, + "status": { + "phase": "Available", + "jobID": "f5fd8cbf-90db-11ea-9f85-0255ac10110d", + "endpoints": { + "Internal": "https://192.168.0.61:5443", + "External": "https://10.185.69.54:5443", + "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com" + }, + "deleteOption": { + "delete_eni": "delete-skip", + "delete_net": "delete-block", + "delete_evs": "delete-skip", + "delete_sfs": "delete-skip", + "delete_obs": "delete-skip", + "delete_efs": "delete-skip" + }, + "deleteStatus": { + "previous_total": 0, + "current_total": 15, + "updated": 0, + "added": 15, + "deleted": 0 + } + } + } + +Status Code +----------- + +:ref:`Table 9 ` describes the status code of this API. + +.. _cce_02_0241__en-us_topic_0079614900_table46761928: + +.. table:: **Table 9** Status code + + =========== ========================================================= + Status Code Description + =========== ========================================================= + 200 The job for deleting a cluster is successfully delivered. + =========== ========================================================= + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/hibernating_a_cluster.rst b/api-ref/source/apis/cluster_management/hibernating_a_cluster.rst new file mode 100644 index 0000000..6609d18 --- /dev/null +++ b/api-ref/source/apis/cluster_management/hibernating_a_cluster.rst @@ -0,0 +1,77 @@ +:original_name: cce_02_0374.html + +.. _cce_02_0374: + +Hibernating a Cluster +===================== + +Function +-------- + +This API is used to hibernate a running cluster. + +Constraints +----------- + +#. After a cluster is hibernated, resources such as workloads cannot be created or managed in the cluster. + +URI +--- + +POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/hibernate + +.. table:: **Table 1** Path parameters + + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========+===============================================================================================================================+ + | project_id | Yes | String | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | String | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=========================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this field is mandatory and must be set to a user token. For details about how to obtain a token, see :ref:`API Usage Guidelines `. | + | | | | | + | | | | Maximum: **16384** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +None + +Example Requests +---------------- + +None + +Example Responses +----------------- + +None + +Status Codes +------------ + ++-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Status Code | Description | ++=============+=========================================================================================================================================================================+ +| 200 | The cluster hibernation job is successfully delivered. Keep querying the cluster status. When the cluster status changes to **Hibernation**, the cluster is hibernated. | ++-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Error Codes +----------- + +See :ref:`Error Codes `. diff --git a/api-ref/source/apis/cluster_management/index.rst b/api-ref/source/apis/cluster_management/index.rst new file mode 100644 index 0000000..6031410 --- /dev/null +++ b/api-ref/source/apis/cluster_management/index.rst @@ -0,0 +1,56 @@ +:original_name: cce_02_0092.html + +.. _cce_02_0092: + +Cluster Management +================== + +- :ref:`Creating a Cluster ` +- :ref:`Reading a Specified Cluster ` +- :ref:`Listing Clusters in a Specified Project ` +- :ref:`Updating a Specified Cluster ` +- :ref:`Deleting a Specified Cluster ` +- :ref:`Hibernating a Cluster ` +- :ref:`Waking Up a Cluster ` +- :ref:`Obtaining Cluster Certificates ` +- :ref:`Obtaining Cluster Certificates (Deprecated) ` +- :ref:`Creating a Node ` +- :ref:`Reading a Specified Node ` +- :ref:`Listing All Nodes in a Cluster ` +- :ref:`Updating a Specified Node ` +- :ref:`Deleting a Node ` +- :ref:`Reading Job Progress ` +- :ref:`Querying the Access Information of a Specified Cluster ` +- :ref:`Modifying the Access Information of a Specified Cluster ` +- :ref:`Creating a Node Pool ` +- :ref:`Querying a Specified Node Pool ` +- :ref:`Updating a Specified Node Pool ` +- :ref:`Listing All Node Pools in a Specified Cluster ` +- :ref:`Deleting a Node Pool ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + creating_a_cluster + reading_a_specified_cluster + listing_clusters_in_a_specified_project + updating_a_specified_cluster + deleting_a_specified_cluster + hibernating_a_cluster + waking_up_a_cluster + obtaining_cluster_certificates + obtaining_cluster_certificates_deprecated + creating_a_node + reading_a_specified_node + listing_all_nodes_in_a_cluster + updating_a_specified_node + deleting_a_node + reading_job_progress + querying_the_access_information_of_a_specified_cluster + modifying_the_access_information_of_a_specified_cluster + creating_a_node_pool + querying_a_specified_node_pool + updating_a_specified_node_pool + listing_all_node_pools_in_a_specified_cluster + deleting_a_node_pool diff --git a/api-ref/source/apis/cluster_management/listing_all_node_pools_in_a_specified_cluster.rst b/api-ref/source/apis/cluster_management/listing_all_node_pools_in_a_specified_cluster.rst new file mode 100644 index 0000000..efa0d57 --- /dev/null +++ b/api-ref/source/apis/cluster_management/listing_all_node_pools_in_a_specified_cluster.rst @@ -0,0 +1,663 @@ +:original_name: cce_02_0269.html + +.. _cce_02_0269: + +Listing All Node Pools in a Specified Cluster +============================================= + +Function +-------- + +This API is used to obtain information about all node pools in a specified cluster. + +.. note:: + + - The URL for cluster management is in the format of **https://Endpoint/uri**. In the URL, **uri** indicates the resource path, that is, the path for API access. + - A node pool is a group of nodes within a cluster that all have the same configuration. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0269__table2027961241820: + +.. table:: **Table 1** Description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and :ref:`Table 3 ` describe the request parameters. + +.. _cce_02_0269__table18227235515: + +.. table:: **Table 2** Parameters in the request header + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + | | | | | + | | | | Maximum: **16384** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__table13540732145618: + +.. table:: **Table 3** Description of the query parameter + + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+=================+======================================================================================================================================================================================================================+ + | errorStatus | No | String | This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of **errorStatus** is null, the cluster stays in the **Deleting** state, but not **Error**. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **10** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | showDefaultNodePool | No | String | Whether to display the default node pool. By default, the default node pool is not displayed. If this parameter is set to **true**, the default node pool is displayed. | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +.. code-block:: text + + GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools?showDefaultNodePool=true + +Response +-------- + +**Response parameters**: + +.. table:: **Table 4** Response body parameters + + +------------+-------------------------------------------------------------------+----------------------------------------+ + | Parameter | Type | Description | + +============+===================================================================+========================================+ + | kind | String | API type. The value is fixed to List. | + +------------+-------------------------------------------------------------------+----------------------------------------+ + | apiVersion | String | API version. The value is fixed to v3. | + +------------+-------------------------------------------------------------------+----------------------------------------+ + | items | Array of :ref:`NodePool ` objects | / | + +------------+-------------------------------------------------------------------+----------------------------------------+ + +.. _cce_02_0269__response_nodepool: + +.. table:: **Table 5** NodePool + + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | Parameter | Type | Description | + +=======================+=========================================================================+===============================================+ + | kind | String | API type. The value is fixed at **NodePool**. | + | | | | + | | | Default: **NodePool** | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3**. | + | | | | + | | | Default: **v3** | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | metadata | :ref:`NodePoolMetadata ` object | Metadata information of the node pool. | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | spec | :ref:`NodePoolSpec ` object | Node pool specifications. | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + | status | :ref:`NodePoolStatus ` object | Node pool status. | + +-----------------------+-------------------------------------------------------------------------+-----------------------------------------------+ + +.. _cce_02_0269__response_nodepoolmetadata: + +.. table:: **Table 6** NodePoolMetadata + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================================================================================+ + | name | String | Node pool name. | + | | | | + | | | .. note:: | + | | | | + | | | Naming rules: | + | | | | + | | | - Enter 1 to 50 characters, starting with a lowercase letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed. | + | | | - You cannot create node pools named DefaultPool. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **50** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | uid | String | UID of the node pool. The value is automatically generated after the object is updated. A user-defined value will not take effect. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_nodepoolspec: + +.. table:: **Table 7** NodePoolSpec + + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================================================================================+=======================================================================================+ + | type | String | Node pool type. If this parameter is left blank, the value **vm** is used by default. | + | | | | + | | | - **vm**: ECS | + | | | - **ElasticBMS**: BMS. This value is valid in CCE Turbo cluster. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | nodeTemplate | :ref:`V3NodeSpec ` object | Detailed parameters of the node pool template. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | initialNodeCount | Integer | Initial number of nodes for the node pool. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | autoscaling | :ref:`NodePoolNodeAutoscaling ` object | Auto scaling parameters. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + | nodeManagement | :ref:`NodeManagement ` object | Node management configuration. | + +-----------------------+---------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_v3nodespec: + +.. table:: **Table 8** V3NodeSpec + + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=====================================================================+======================================================================================================================================================================================================================================================================================+ + | flavor | String | Node specifications. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **50** | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | String | \\t\nName of the AZ where the node is located. This AZ exists at the underlying layer and is in the physical AZ group of the user. | + | | | | + | | | Maximum: **200** | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | os | String | Node OS. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | login | :ref:`Login ` object | Node login mode. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | rootVolume | :ref:`Volume ` object | System disk information of the node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dataVolumes | Array of :ref:`Volume ` objects | Data disk parameters of the node. Currently, you can add the second data disk for your node on the CCE console. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | :ref:`V3NodePublicIP ` object | EIP of the node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeNicSpec | :ref:`NodeNicSpec ` object | NIC information of the node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | count | Integer | Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. This field can be set to **0** for a node pool. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | taints | Array of :ref:`Taint ` objects | You can add taints to created nodes to set affinity. Each taint contains the following three parameters: | + | | | | + | | | - **Key**: The value must start with a letter or digit and can contain letters, digits, hyphens (-), underscores (*), and periods (.). The maximum length is 63 characters. In addition, the DNS subdomain can be used as the prefix.* | + | | | - **Value**\ *: The value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (*), and periods (.). | + | | | - **Effect**: Available options are **NoSchedule**, **PreferNoSchedule**, and **NoExecute**. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "taints": [{ | + | | | "key": "status", | + | | | "value": "unavailable", | + | | | "effect": "NoSchedule" | + | | | }, { | + | | | "key": "looks", | + | | | "value": "bad", | + | | | "effect": "NoSchedule" | + | | | }] | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | k8sTags | Map | The format is a key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | + | | | - **Key**: Enter 1 to 63 characters, starting with a letter or digit. Only letters, digits, hyphens (-), underscores (*), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key* | + | | | - **Value**\ *: The value can be left blank or contain 1 to 63 characters that start with a letter or digit. Only letters, digits, hyphens (-), underscores (*), and periods (.) are allowed in the character string. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "k8sTags": { | + | | | "key": "value" | + | | | } | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ecsGroupId | String | Cloud server group ID. If this field is specified, the node is created in the specified cloud server group. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported when you use CCE Turbo cluster. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dedicatedHostId | String | ID of the DeH to which the node is scheduled. | + | | | | + | | | This field is not supported when you add a node during node pool creation. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | offloadNode | Boolean | Whether the node belongs to a CCE Turbo cluster. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported when you add a node during node pool creation. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | userTags | Array of :ref:`UserTag ` objects | Cloud server labels. The key of a label must be unique. The maximum number of user-defined labels supported by CCE depends on the region. In the region that supports the least number of labels, you can still create up to 5 labels for a cloud server. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | Map | Extended parameter for creating a node. The options are as follows: | + | | | | + | | | - **ecs:performancetype**: ECS flavor. This field does not exist for a BMS node. | + | | | - **productID**: product ID. | + | | | - **maxPods**: maximum number of pods that can be created on a node, including the default system pods. Value range: 16 to 256 This limit prevents the node from being overloaded fpr managing too many pods. | + | | | | + | | | - **DockerLVMConfigOverride**: Docker data disk configurations. The following is an example default configuration: | + | | | | + | | | .. code-block:: | + | | | | + | | | "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" | + | | | | + | | | The configuration contains the following fields: | + | | | | + | | | - **userLV**: size of the user space, for example, **vgpaas/20%VG**. | + | | | - **userPath**: mount path of the user space, for example, **/home/wqt-test**. | + | | | - **diskType**: disk type. Currently, only **evs**, **hdd**, and **ssd** are supported. | + | | | - **lvType**: type of a logic volume. Currently, the value can be **linear** or **striped**. | + | | | - **dockerThinpool**: Docker space size, for example, **vgpaas/60%VG**. | + | | | - **kubernetesLV**: kubelet space size, for example, **vgpaas/20%VG**. | + | | | | + | | | - **dockerBaseSize**: available disk space of a single Docker container on a node in Device Mapper mode. This field is not supported in OverlayFS mode (nodes that use CentOS 7.6 or Ubuntu 18.04 in CCE Turbo clusters and nodes that use Ubuntu 18.04 in CCE clusters). | + | | | | + | | | - **init-node-password**: initial node password | + | | | | + | | | - **offloadNode**: whether the node is a CCE Turbo cluster node. This parameter is not supported when you add a node to a node pool. | + | | | | + | | | - **publicKey**: node public key. Used when creating a key pair. | + | | | | + | | | - **alpha.cce/preInstall**: pre-installation script. | + | | | | + | | | .. note:: | + | | | | + | | | The input value must be Base64-encoded. (Command: **echo -n Content to be encoded \| base64**) | + | | | | + | | | - **alpha.cce/postInstall**: post-installation script | + | | | | + | | | .. note:: | + | | | | + | | | The input value must be Base64-encoded. (Command: **echo -n Content to be encoded \| base64**) | + | | | | + | | | - **alpha.cce/NodeImageID**: This field is required when a custom image is used to create a BMS node. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_login: + +.. table:: **Table 9** Login + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==============================================================================================+ + | sshKey | String | Name of the key pair used for login. Either the key pair or password must be used for login. | + | | | | + | | | For details on how to create a key pair, see :ref:`Creating a Key Pair `. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------+ + | userPassword | String | Password used for node login. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_v3rootvolume: + +.. table:: **Table 10** Volume + + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=============================================================================+================================================================================================================================================================================================+ + | size | Integer | Disk size in the unit of GB. | + | | | | + | | | - System disk: 40 to 1024 | + | | | - Data disk: 100 to 32768 | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | volumetype | String | Disk type. For details about possible values, see the description of the **root_volume** parameter in the API used to create an ECS in the ECS API reference. | + | | | | + | | | - **SATA**: common I/O disk | + | | | - **SAS**: high I/O disk | + | | | - **SSD**: ultra-high I/O disk | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | Map | Disk extension parameter. For details, see the description of the **extendparam** parameter in `Creating an ECS `__. | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hw:passthrough | Boolean | - Pay attention to this field if your ECS is SDI-compliant. If the value of this field is **true**, the created disk is of the SCSI type. | + | | | - If the node pool type is **ElasticBMS**, this field must be set to **true**. | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`dataVolumeMetadata ` object | Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted. | + | | | | + | | | If data disks are created using a data disk image, this parameter cannot be used. | + +-----------------------+-----------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_datavolumemetadata: + +.. table:: **Table 11** DataVolumeMetadata + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+================================================================================================================================================================+ + | \__system__encrypted | String | Whether the EVS disk is encrypted. The value **0** indicates that the EVS disk is not encrypted, and the value **1** indicates that the EVS disk is encrypted. | + | | | | + | | | If this field does not exist, the disk will not be encrypted by default. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | \__system__cmkid | String | CMK ID, which indicates encryption in **metadata**. This field is used with **\__system__encrypted**. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_v3nodepublicip: + +.. table:: **Table 12** V3NodePublicIP + + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===================================================================+========================================================================================================+ + | ids | Array of strings | IDs of existing EIPs. The quantity cannot be greater than the number of nodes to be created. | + | | | | + | | | .. note:: | + | | | | + | | | If the **ids** parameter has been set, you do not need to set the **count** and **eip** parameters. | + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + | count | Integer | Number of EIPs to be dynamically created. | + | | | | + | | | .. note:: | + | | | | + | | | The **count** and **eip** parameters must be set together. | + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + | eip | :ref:`V3NodeEIPSpec ` object | EIP configuration. | + +-----------------------+-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_v3nodeeipspec: + +.. table:: **Table 13** V3NodeEIPSpec + + +-----------+-----------------------------------------------------------------------+----------------------------------+ + | Parameter | Type | Description | + +===========+=======================================================================+==================================+ + | iptype | String | EIP type. | + +-----------+-----------------------------------------------------------------------+----------------------------------+ + | bandwidth | :ref:`V3NodeBandwidth ` object | Bandwidth parameters of the EIP. | + +-----------+-----------------------------------------------------------------------+----------------------------------+ + +.. _cce_02_0269__response_v3nodebandwidth: + +.. table:: **Table 14** V3NodeBandwidth + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==============================================================================================================================================================================================+ + | chargemode | String | Bandwidth billing modes: | + | | | | + | | | - If this field is not specified, the billing is based on bandwidth. | + | | | - If the field is null, the billing is based on bandwidth. | + | | | - If the field value is **traffic**, the billing is based on traffic. | + | | | - If the value is out of the preceding options, the cloud server will fail to be created. | + | | | | + | | | .. note:: | + | | | | + | | | - Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended. | + | | | - Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | String | Bandwidth size. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sharetype | String | Bandwidth sharing type. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_nodenicspec: + +.. table:: **Table 15** NodeNicSpec + + +------------+-----------------------------------------------------------------+---------------------------------+ + | Parameter | Type | Description | + +============+=================================================================+=================================+ + | primaryNic | :ref:`primaryNic ` object | Description of the primary NIC. | + +------------+-----------------------------------------------------------------+---------------------------------+ + | extNics | Array of :ref:`extNics ` objects | Extension NIC. | + +------------+-----------------------------------------------------------------+---------------------------------+ + +.. _cce_02_0269__response_nicspec: + +.. table:: **Table 16** Data structure of the primaryNic/extNics field + + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+==================+===================================================================================================================================================================================================================+ + | subnetId | String | Network ID of the subnet to which the NIC belongs. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | fixedIps | Array of strings | The IP address of the primary NIC is specified by **fixedIps**. The number of IP addresses cannot be greater than the number of created nodes. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipBlock | String | CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_taint: + +.. table:: **Table 17** Taint + + +-----------------------+-----------------------+-------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=========================+ + | key | String | Key. | + +-----------------------+-----------------------+-------------------------+ + | value | String | Value. | + | | | | + | | | Maximum: **63** | + +-----------------------+-----------------------+-------------------------+ + | effect | String | Effect. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **NoSchedule** | + | | | - **PreferNoSchedule** | + | | | - **NoExecute** | + +-----------------------+-----------------------+-------------------------+ + +.. _cce_02_0269__response_usertag: + +.. table:: **Table 18** UserTag + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===============================================================================================+ + | key | String | Key of the cloud server label. The value cannot start with **CCE-** or **\__type_baremetal**. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + | value | String | Value of the cloud server label. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **43** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_nodepoolnodeautoscaling: + +.. table:: **Table 19** NodePoolNodeAutoscaling + + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+====================================================================================================================================================================================================================+ + | enable | Boolean | Whether to enable auto scaling. | + | | | | + | | | Default: **false** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | minNodeCount | Integer | Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications. | + | | | | + | | | Minimum: **0** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | maxNodeCount | Integer | Maximum number of nodes allowed if auto scaling is enabled. This value must be greater than or equal to the value of **minNodeCount** and cannot exceed the maximum number of nodes in the cluster specifications. | + | | | | + | | | Minimum: **0** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | scaleDownCooldownTime | Integer | Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **2147483647** | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | priority | Integer | Weight of a node pool. A node pool with a higher weight has a higher priority during scaling. | + +-----------------------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_nodemanagement: + +.. table:: **Table 20** NodeManagement + + +----------------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +======================+========+==================================================================================================================================================================================================================================================================================================================+ + | serverGroupReference | String | Cloud server group ID. If this field is specified, all nodes in the node pool will be created in this group. The group ID can be specified only when you create the node pool and cannot be modified. When you specify a cloud server group, the number of nodes in the node pool cannot exceed the group quota. | + +----------------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0269__response_nodepoolstatus: + +.. table:: **Table 21** NodePoolStatus + + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+============================================================================+ + | currentNode | Integer | Number of nodes in the node pool. | + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + | phase | String | Node pool status. If this field is left blank, the node pool is available. | + | | | | + | | | - **Synchronizing**: Scale-in is being performed. | + | | | - **Synchronized**: The node pool fails to be updated. | + | | | - **SoldOut**: Node resources are sold out. | + | | | - **Deleting**: The node pool is being deleted. | + | | | - **Error**: An error occurs. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **Synchronizing** | + | | | - **Synchronized** | + | | | - **SoldOut** | + | | | - **Deleting** | + | | | - **Error** | + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + | jobId | String | ID of the job to delete the node pool. | + +-----------------------+-----------------------+----------------------------------------------------------------------------+ + +**Response example**: + +.. code-block:: + + { + "kind": "List", + "apiVersion": "v3", + "items": [ + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "nodepool-name-change", + "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-02", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool", + "userPassword": {} + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100, + "extendParam": { + "useType": "docker" + } + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef" + } + }, + "billingMode": 0, + "taints": [ + { + "key": "change-taints", + "value": "value1", + "effect": "NoExecute" + } + ], + "k8sTags": { + "cce.cloud.com/cce-nodepool": "nodepool-name-change", + "change-tag": "value2" + }, + "userTags": [ + { + "key": "change-resource-tag", + "value": "value3" + } + ], + "extendParam": { + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear", + "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/preInstall": "bHMgLWw=", + "maxPods": 110 + } + }, + "autoscaling": { + "enable": true, + "minNodeCount": 2, + "maxNodeCount": 4, + "scaleDownCooldownTime": 10, + "priority": 2 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + } + }, + "status": { + "currentNode": 0, + "phase": "" + } + } + ] + } + +Status Code +----------- + +:ref:`Table 22 ` describes the status code of this API. + +.. _cce_02_0269__en-us_topic_0079614900_table46761928: + +.. table:: **Table 22** Status code + + +-------------+---------------------------------------------------------------------------+ + | Status Code | Description | + +=============+===========================================================================+ + | 200 | Information about all node pools in the cluster is successfully obtained. | + +-------------+---------------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. + +Error Codes +----------- + +See :ref:`Error Codes `. diff --git a/api-ref/source/apis/cluster_management/listing_all_nodes_in_a_cluster.rst b/api-ref/source/apis/cluster_management/listing_all_nodes_in_a_cluster.rst new file mode 100644 index 0000000..a83663f --- /dev/null +++ b/api-ref/source/apis/cluster_management/listing_all_nodes_in_a_cluster.rst @@ -0,0 +1,153 @@ +:original_name: cce_02_0244.html + +.. _cce_02_0244: + +Listing All Nodes in a Cluster +============================== + +Function +-------- + +This API is used to obtain details about all nodes in a cluster with a specified cluster ID. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0244__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` describes the request parameters. + +.. _cce_02_0244__table13638079467: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters**: + +:ref:`Table 3 ` describes the response parameters. + +.. _cce_02_0244__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 3** Response parameters + + +------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+========+==============================================================================================================================================================================================================================+ + | kind | String | API type. The value is fixed to **List**. | + +------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3**. | + +------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | items | Object | A list of details for all nodes in the current cluster. You can filter nodes by **items.metadata.name**. For more information, see :ref:`Table 4 `. | + +------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example response**: + +.. code-block:: + + { + "kind": "List", + "apiVersion": "v3", + "items": [ + { + "kind": "Node", + "apiversion": "v3", + "metadata": { + "name": "myhost", + "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "creationTimestamp": "2020-02-02 07:37:24.005071325 +0000 UTC", + "updateTimestamp": "2020-02-02 07:44:04.965500815 +0000 UTC", + "annotations": { + "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5" + } + }, + "spec": { + "flavor": "s1.medium", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-demo" + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100 + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "c90b3ce5-e1f1-4c87-a006-644d78846438" + } + }, + "billingMode": 0 + }, + "status": { + "phase": "Active", + "serverId": "456789abc-9368-46f3-8f29-d1a95622a568", + "publicIP": "10.34.56.78", + "privateIP": "192.168.1.23" + } + } + ] + } + +Status Code +----------- + +:ref:`Table 4 ` describes the status code of this API. + +.. _cce_02_0244__en-us_topic_0079614900_table46761928: + +.. table:: **Table 4** Status code + + +-------------+------------------------------------------------------------------------------------+ + | Status Code | Description | + +=============+====================================================================================+ + | 200 | Information about all the nodes in the specified cluster is successfully obtained. | + +-------------+------------------------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/listing_clusters_in_a_specified_project.rst b/api-ref/source/apis/cluster_management/listing_clusters_in_a_specified_project.rst new file mode 100644 index 0000000..8d069a2 --- /dev/null +++ b/api-ref/source/apis/cluster_management/listing_clusters_in_a_specified_project.rst @@ -0,0 +1,174 @@ +:original_name: cce_02_0239.html + +.. _cce_02_0239: + +Listing Clusters in a Specified Project +======================================= + +Function +-------- + +This API is used to obtain details about all clusters in a specified project. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0239__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+============================================================================================================================+ + | project_id | Yes | Project ID. For details on how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+----------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` lists the request parameters. + +.. _cce_02_0239__table538113720514: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters**: + +:ref:`Table 3 ` describes the response parameters. + +.. _cce_02_0239__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 3** Response parameters + + +------------+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+========================================================+================================================================================================================+ + | kind | String | API type. The value is fixed at **Cluster** and cannot be changed. | + +------------+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------+ + | items | :ref:`items ` object | A list of details for all clusters in the current project. You can filter clusters by **items.metadata.name**. | + +------------+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0239__table34052983203655: + +.. table:: **Table 4** Data structure of the **items** field + + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+============================================================================================================================+ + | kind | String | API type. The value is fixed at **Cluster** and cannot be changed. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Cluster metadata, which is a collection of attributes. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`status ` object | Cluster status and jobID of the job that lists clusters in a specified project. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + +**Response example**: + +.. code-block:: + + { + "kind": "Cluster", + "apiVersion": "v3", + "items": [ + { + "kind": "Cluster", + "apiVersion": "v3", + "metadata": { + "name": "mycluster", + "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "creationTimestamp": "2020-02-02 03:48:58.968214406 +0000 UTC", + "updateTimestamp": "2020-02-02 04:05:29.386391813 +0000 UTC" + }, + "spec": { + "type": "VirtualMachine", + "flavor": "cce.s1.small", + "version": "v1.17.9-r0", + "description": "awesome cluster", + "ipv6enable": false, + "supportIstio": true, + "hostNetwork": { + "vpc": "f0c12911-4fdb-4284-9230-7ffb0860826a", + "subnet": "ac274229-fd2e-4695-9f01-a0c1372b8006", + "SecurityGroup": "5da0b181-e0a2-4981-87ac-1681545cd666" + }, + "containerNetwork": { + "mode": "overlay_l2", + "cidr": "172.16.0.0/16" + }, + "eniNetwork": {}, + "authentication": { + "mode": "rbac", + "authenticatingProxy": {} + }, + "billingMode": 0, + "extendParam": { + "alpha.cce/fixPoolMask": "", + "kubernetes.io/cpuManagerPolicy": "", + "patchVersion": "", + "upgradefrom": "" + }, + "kubernetesSvcIpRange": "10.247.0.0/16", + "kubeProxyMode": "iptables" + }, + "status": { + "phase": "Available", + "endpoints": [ + { + "Internal": "https://192.168.0.61:5443", + }, + { + "External": "https://10.185.69.54:5443", + }, + { + "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com", + } + ] + } + } + +Status Code +----------- + +:ref:`Table 5 ` describes the status code of this API. + +.. _cce_02_0239__en-us_topic_0079614900_table46761928: + +.. table:: **Table 5** Status code + + +-------------+-------------------------------------------------------------------------------+ + | Status Code | Description | + +=============+===============================================================================+ + | 200 | Information about clusters in the specified project is successfully obtained. | + +-------------+-------------------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/modifying_the_access_information_of_a_specified_cluster.rst b/api-ref/source/apis/cluster_management/modifying_the_access_information_of_a_specified_cluster.rst new file mode 100644 index 0000000..75c7073 --- /dev/null +++ b/api-ref/source/apis/cluster_management/modifying_the_access_information_of_a_specified_cluster.rst @@ -0,0 +1,186 @@ +:original_name: cce_02_0346.html + +.. _cce_02_0346: + +Modifying the Access Information of a Specified Cluster +======================================================= + +Function +-------- + +This API is used to modify the access information of a specified cluster. + +URI +--- + +PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/mastereip + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0346__tcb491e3c1e0f4805bc2a0f117c2e5291: + +.. table:: **Table 1** Parameter description + + ========== ========= =========== + Parameter Mandatory Description + ========== ========= =========== + project_id Yes Project ID. + cluster_id Yes Cluster ID. + ========== ========= =========== + +Request +------- + +**Request parameters:** + +:ref:`Table 2 ` describes the request parameters. + +.. _cce_02_0346__t97650ea1b00a431b9ba9075aafc7e494: + +.. table:: **Table 2** Parameter description + + +-----------+-----------+-----------------------------------------------------------------+-------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+=================================================================+=============+ + | spec | Yes | :ref:`Table 3 ` | - | + +-----------+-----------+-----------------------------------------------------------------+-------------+ + +.. _cce_02_0346__t18f5d0505d9048cab59a8ecd4fa7138d: + +.. table:: **Table 3** Data structure of the spec field + + +-----------------+-----------------+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================================================+================================================================================================================================================================+ + | action | Yes | String | Whether to bind an elastic IP address to the cluster or unbind an elastic IP address from the cluster. The value is **bind** or **unbind** (case insensitive). | + | | | | | + | | | | .. note:: | + | | | | | + | | | | **id** needs to be configured only when **action** is set to **bind**. | + +-----------------+-----------------+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | spec | No | :ref:`Table 4 ` | Information about the elastic IP address. | + +-----------------+-----------------+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0346__table985812714268: + +.. table:: **Table 4** Data structure of the spec-spec field + + ========= ========= ====== ============================= + Parameter Mandatory Type Description + ========= ========= ====== ============================= + id Yes String ID of the elastic IP address. + ========= ========= ====== ============================= + +**Example request:** + +- Binding an elastic IP address to the cluster + + .. code-block:: + + { + "spec": { + "action": "bind", + "spec": { + "id": "0ef26920-3527-405d-a7b4-27106618c2d7" + } + } + } + +- Unbinding an elastic IP address from the cluster + + .. code-block:: + + { + "spec": { + "action": "unbind" + } + } + +Response +-------- + +**Response parameters:** + +:ref:`Table 5 ` describes the response parameters. + +.. _cce_02_0346__tab67b852d83a4de9b60d1595df71492e: + +.. table:: **Table 5** Response parameters + + +-----------+-----------------------------------------------------------------+-------------------+ + | Parameter | Type | Description | + +===========+=================================================================+===================+ + | metadata | json | Metadata. | + +-----------+-----------------------------------------------------------------+-------------------+ + | spec | :ref:`Table 6 ` | - | + +-----------+-----------------------------------------------------------------+-------------------+ + | status | :ref:`Table 7 ` | Cluster endpoint. | + +-----------+-----------------------------------------------------------------+-------------------+ + +.. _cce_02_0346__tce0b898226db4163888e3bf7c290b876: + +.. table:: **Table 6** Data structure of the spec field + + +-----------+-------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+=================================================+=================================================================================================================+ + | action | String | Whether an EIP is bound to or unbound from the cluster. The value is **bind** or **unbind** (case insensitive). | + +-----------+-------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`Table 4 ` | Information about the elastic IP address. | + +-----------+-------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + | elasticIp | String | Elastic IP address. | + +-----------+-------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0346__t500749d17adf492d8e2535fe4933b586: + +.. table:: **Table 7** Data structure of the status field + + =============== ====== =================================== + Parameter Type Description + =============== ====== =================================== + privateEndpoint String Address for access within the VPC. + publicEndpoint String Address for access outside the VPC. + =============== ====== =================================== + +**Example response:** + +.. code-block:: + + { + "metadata": {}, + "spec": { + "action": "bind", + "spec": { + "id": "0ef26920-3527-405d-a7b4-27106618c2d7", + "eip": { + "bandwidth": { + "size": 5, + "sharetype": "PER" + } + }, + "IsDynamic": false + }, + "elasticIp": "10.154.50.11" + }, + "status": { + "privateEndpoint": "https://172.16.0.86:5443", + "publicEndpoint": "https://10.154.50.11:5443" + } + } + +Status Code +----------- + +:ref:`Table 8 ` describes the status code of the API. + +.. _cce_02_0346__tcb712722097d4597ae95bec996421736: + +.. table:: **Table 8** Status code + + =========== =========================================================== + Status Code Description + =========== =========================================================== + 200 The progress of the specified job is successfully obtained. + =========== =========================================================== + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/obtaining_cluster_certificates.rst b/api-ref/source/apis/cluster_management/obtaining_cluster_certificates.rst new file mode 100644 index 0000000..ee35988 --- /dev/null +++ b/api-ref/source/apis/cluster_management/obtaining_cluster_certificates.rst @@ -0,0 +1,241 @@ +:original_name: cce_02_0248.html + +.. _cce_02_0248: + +Obtaining Cluster Certificates +============================== + +Function +-------- + +This API is used to obtain certificates of a specified cluster in form of kubeconfig file. + +URI +--- + +POST /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0248__table2027961241820: + +.. table:: **Table 1** Description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and\ :ref:`Table 3 ` describes the request parameters. + +.. _cce_02_0248__table538113720514: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0248__table34052983203655: + +.. table:: **Table 3** Parameters in the request body + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=====================================================================================================================================================================================================+ + | duration | Yes | Integer | Period during which a cluster certificate is valid, in days. | + | | | | | + | | | | Validity period of the cluster certificate, in days. A cluster certificate can be valid for 1 to 1,825 days. If this parameter is set to **-1**, the validity period is 1,825 days (about 5 years). | + | | | | | + | | | | Minimum: 1 | + | | | | | + | | | | Maximum: 1825 | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +Applying for a cluster access certificate valid for 30 days + +.. code-block:: + + { + "duration": 30 + } + +Response +-------- + +**Response parameters**: + +:ref:`Table 4 ` describes the response parameters. + +.. _cce_02_0248__table10794441185312: + +.. table:: **Table 4** Response parameters + + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=================+=================================================================+=========================================================================================================================================+ + | kind | String | API type. The value is fixed at **Config** and cannot be changed. | + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v1** and cannot be changed. | + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | preferences | Object | This field is not used currently and is left unspecified by default. | + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | clusters | Array of :ref:`clusters ` objects | Cluster list. | + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | users | Array of :ref:`users ` objects | Certificate information and client key information of a specified user. | + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | contexts | Array of :ref:`contexts ` objects | Context list. | + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | current-context | String | Current context. If **publicIp** (VM EIP) exists, the value is **external**. If **publicIp** does not exist, the value is **internal**. | + +-----------------+-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0248__table2157957598: + +.. table:: **Table 5** Data structure of the **clusters** field + + +-----------------------+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+========================================================+==================================================================================================================================================================================+ + | name | String | Cluster name. | + | | | | + | | | - If the **publicIp** parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is **internalCluster**. | + | | | - If the **publicIp** parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is **externalCluster**. | + +-----------------------+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | cluster | :ref:`cluster ` object | Cluster information. | + +-----------------------+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0248__table519211353218: + +.. table:: **Table 6** Data structure of the **cluster** field + + +----------------------------+---------+-------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============================+=========+=========================================================================================================================+ + | server | String | Node IP address. | + +----------------------------+---------+-------------------------------------------------------------------------------------------------------------------------+ + | certificate-authority-data | String | Certificate authorization data. | + +----------------------------+---------+-------------------------------------------------------------------------------------------------------------------------+ + | insecure-skip-tls-verify | Boolean | Whether to skip the server certificate verification. If the cluster type is **externalCluster**, the value is **true**. | + +----------------------------+---------+-------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0248__table7846125310316: + +.. table:: **Table 7** Data structure of the **users** field + + +-----------+-----------------------------------------------------+-----------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+=====================================================+===================================================================================+ + | name | String | The value is fixed to **user**. | + +-----------+-----------------------------------------------------+-----------------------------------------------------------------------------------+ + | user | :ref:`user ` object | Stores the certificate information and ClientKey information of a specified user. | + +-----------+-----------------------------------------------------+-----------------------------------------------------------------------------------+ + +.. _cce_02_0248__table205311581434: + +.. table:: **Table 8** Data structure of the **user** field + + +-------------------------+--------+----------------------------------------------------------+ + | Parameter | Type | Description | + +=========================+========+==========================================================+ + | client-certificate-data | String | Client certificate. | + +-------------------------+--------+----------------------------------------------------------+ + | client-key-data | String | Contains PEM encoding data from the TLS client key file. | + +-------------------------+--------+----------------------------------------------------------+ + +.. _cce_02_0248__table1653965354: + +.. table:: **Table 9** Data structure of the **contexts** field + + +-----------------------+-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================================================+===========================================================================================================================================================================+ + | name | String | Context name. | + | | | | + | | | - If the **publicIp** parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is **internal**. | + | | | - If the **publicIp** parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is **external**. | + +-----------------------+-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | context | :ref:`context ` object | Context information. | + +-----------------------+-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0248__table47913919518: + +.. table:: **Table 10** Data structure of the **context** field + + ========= ====== ================ + Parameter Type Description + ========= ====== ================ + cluster String Cluster context. + user String User context. + ========= ====== ================ + +**Response example**: + +.. code-block:: + + { + "kind": "Config", + "apiVersion": "v1", + "preferences": {}, + "clusters": [ + { + "name": "internalCluster", + "cluster": { + "server": "https://192.168.1.7:5443", + "certificate-authority-data": "" + } + } + ], + "users": [ + { + "name": "user", + "user": { + "client-certificate-data": "", + "client-key-data": "" + } + } + ], + "contexts": [ + { + "name": "internal", + "context": { + "cluster": "internalCluster", + "user": "user" + } + } + ], + "current-context": "internal" + } + +Status Code +----------- + +:ref:`Table 11 ` describes the status code of this API. + +.. _cce_02_0248__en-us_topic_0079614900_table46761928: + +.. table:: **Table 11** Status code + + +-------------+------------------------------------------------------------------+ + | Status Code | Description | + +=============+==================================================================+ + | 200 | Certificates of the specified cluster are successfully obtained. | + +-------------+------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/obtaining_cluster_certificates_deprecated.rst b/api-ref/source/apis/cluster_management/obtaining_cluster_certificates_deprecated.rst new file mode 100644 index 0000000..702afb9 --- /dev/null +++ b/api-ref/source/apis/cluster_management/obtaining_cluster_certificates_deprecated.rst @@ -0,0 +1,216 @@ +:original_name: cce_02_0359_0.html + +.. _cce_02_0359_0: + +Obtaining Cluster Certificates (Deprecated) +=========================================== + +Function +-------- + +This API is used to obtain certificates of a specified cluster in form of kubeconfig file. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0359_0__table2027961241820: + +.. table:: **Table 1** Description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` describes the request parameters. + +.. _cce_02_0359_0__table538113720514: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters**: + +:ref:`Table 3 ` describes the response parameters. + +.. _cce_02_0359_0__table10794441185312: + +.. table:: **Table 3** Response parameters + + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | Parameter | Type | Description | + +=================+=========================================================+======================================================================+ + | kind | String | API type. The value is fixed at **Config** and cannot be changed. | + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v1** and cannot be changed. | + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | preferences | - | This field is not used currently and is left unspecified by default. | + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | clusters | :ref:`clusters ` object | Cluster list. | + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | users | :ref:`users ` object | - | + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | contexts | :ref:`contexts ` object | Context list. | + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + | current-context | String | Current context. | + +-----------------+---------------------------------------------------------+----------------------------------------------------------------------+ + +.. _cce_02_0359_0__table2157957598: + +.. table:: **Table 4** Data structure of the **clusters** field + + +-----------------------+----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+==========================================================+==================================================================================================================================================================================+ + | name | String | Cluster name. | + | | | | + | | | - If the **publicIp** parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is **internalCluster**. | + | | | - If the **publicIp** parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is **externalCluster**. | + +-----------------------+----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | cluster | :ref:`cluster ` object | Cluster information. | + +-----------------------+----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0359_0__table519211353218: + +.. table:: **Table 5** Data structure of the **cluster** field + + ========================== ====== =============================== + Parameter Type Description + ========================== ====== =============================== + server String Node IP address. + certificate-authority-data String Certificate authorization data. + ========================== ====== =============================== + +.. _cce_02_0359_0__table7846125310316: + +.. table:: **Table 6** Data structure of the **users** field + + +-----------+-------------------------------------------------------+-----------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+=======================================================+===================================================================================+ + | name | String | The value is fixed to **user**. | + +-----------+-------------------------------------------------------+-----------------------------------------------------------------------------------+ + | user | :ref:`user ` object | Stores the certificate information and ClientKey information of a specified user. | + +-----------+-------------------------------------------------------+-----------------------------------------------------------------------------------+ + +.. _cce_02_0359_0__table205311581434: + +.. table:: **Table 7** Data structure of the **user** field + + +-------------------------+--------+----------------------------------------------------------+ + | Parameter | Type | Description | + +=========================+========+==========================================================+ + | client-certificate-data | String | Client certificate. | + +-------------------------+--------+----------------------------------------------------------+ + | client-key-data | String | Contains PEM encoding data from the TLS client key file. | + +-------------------------+--------+----------------------------------------------------------+ + +.. _cce_02_0359_0__table1653965354: + +.. table:: **Table 8** Data structure of the **contexts** field + + +-----------------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=========================================================+===========================================================================================================================================================================+ + | name | String | Context name. | + | | | | + | | | - If the **publicIp** parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is **internal**. | + | | | - If the **publicIp** parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is **external**. | + +-----------------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | context | :ref:`context ` object | Context information. | + +-----------------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0359_0__table47913919518: + +.. table:: **Table 9** Data structure of the **context** field + + ========= ====== ================ + Parameter Type Description + ========= ====== ================ + cluster String Cluster context. + user String User context. + ========= ====== ================ + +**Response example**: + +.. code-block:: + + { + "kind": "Config", + "apiVersion": "v1", + "preferences": {}, + "clusters": [ + { + "name": "internalCluster", + "cluster": { + "server": "https://192.168.1.7:5443", + "certificate-authority-data": "" + } + } + ], + "users": [ + { + "name": "user", + "user": { + "client-certificate-data": "", + "client-key-data": "" + } + } + ], + "contexts": [ + { + "name": "internal", + "context": { + "cluster": "internalCluster", + "user": "user" + } + } + ], + "current-context": "internal" + } + +Status Code +----------- + +:ref:`Table 10 ` describes the status code of this API. + +.. _cce_02_0359_0__en-us_topic_0079614900_table46761928: + +.. table:: **Table 10** Status code + + +-------------+------------------------------------------------------------------+ + | Status Code | Description | + +=============+==================================================================+ + | 200 | Certificates of the specified cluster are successfully obtained. | + +-------------+------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/querying_a_specified_node_pool.rst b/api-ref/source/apis/cluster_management/querying_a_specified_node_pool.rst new file mode 100644 index 0000000..2da6bc6 --- /dev/null +++ b/api-ref/source/apis/cluster_management/querying_a_specified_node_pool.rst @@ -0,0 +1,609 @@ +:original_name: cce_02_0355.html + +.. _cce_02_0355: + +Querying a Specified Node Pool +============================== + +Function +-------- + +This API is used to query a specified node pool. + +.. note:: + + - The URL for cluster management is in the format of **https://Endpoint/uri.** In the URL, **uri** indicates the resource path, that is, the path for API access. + - A node pool is a group of nodes within a cluster that all have the same configuration. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0355__table97151734171818: + +.. table:: **Table 1** Parameter description + + +-------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=============+===========+========+===============================================================================================================================+ + | project_id | Yes | String | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +-------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | String | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +-------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | nodepool_id | Yes | String | Node pool ID. For details about how to obtain the node pool ID, see :ref:`Listing All Nodes in a Cluster `. | + +-------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Parameter description + + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+=================+==========================================================================================================================================================================================================+ + | project_id | Yes | String | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | errorStatus | No | String | String | + | | | | | + | | | | This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of errorStatus is null, the cluster stays in the Deleting state, but not Error. | + | | | | | + | | | | Minimum: 0 | + | | | | | + | | | | Maximum: 10 | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | showDefaultNodePool | No | String | String | + | | | | | + | | | | Whether to display the default node pool. By default, the default node pool is not displayed. If this parameter is set to true, the default node pool is displayed. | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 1 ` lists the request parameters. + +.. table:: **Table 3** Parameters in the request header + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | String | Description | + +=================+=================+=================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +NA + +Response +-------- + +**Response parameters:** + +:ref:`Table 4 ` describes the response parameters. + +.. _cce_02_0355__table835415466262: + +.. table:: **Table 4** Response parameters + + +------------+----------------------------------------------------------+-----------------------------------------------+ + | Parameter | Type | Description | + +============+==========================================================+===============================================+ + | kind | String | API type. The value is fixed to **NodePool**. | + +------------+----------------------------------------------------------+-----------------------------------------------+ + | apiVersion | String | API version. The value is fixed to **v3**. | + +------------+----------------------------------------------------------+-----------------------------------------------+ + | items | :ref:`NodePool ` object | / | + +------------+----------------------------------------------------------+-----------------------------------------------+ + +.. _cce_02_0355__table5986744184015: + +.. table:: **Table 5** NodePool + + +------------+------------------------------------------------------------+-----------------------------------------------+ + | Parameter | Type | Description | + +============+============================================================+===============================================+ + | kind | String | API type. The value is fixed to **NodePool**. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | apiVersion | String | API version. The value is fixed to **v3**. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | metadata | :ref:`metadata ` object | Node pool metadata. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | spec | :ref:`spec ` object | Detailed node pool parameters. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + | status | :ref:`status ` object | Node pool status. | + +------------+------------------------------------------------------------+-----------------------------------------------+ + +.. _cce_02_0355__table173551146152616: + +.. table:: **Table 6** Data structure of the metadata field + + ========= ====== ====================== + Parameter Type Description + ========= ====== ====================== + name String Name of the node pool. + uid String ID of the node pool. + ========= ====== ====================== + +.. _cce_02_0355__table1735515465260: + +.. table:: **Table 7** Data structure of the spec field + + +-----------------------+----------------------------------------------------------------+-------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+================================================================+===================================================================+ + | type | String | Node type. | + | | | | + | | | - **vm**: ECS | + | | | - **ElasticBMS**: BMS. This value is valid in CCE Turbo cluster. | + +-----------------------+----------------------------------------------------------------+-------------------------------------------------------------------+ + | initialNodeCount | Integer | Initial number of nodes for the node pool. | + +-----------------------+----------------------------------------------------------------+-------------------------------------------------------------------+ + | nodeTemplate | :ref:`nodeTemplate ` object | Detailed parameters of the node pool template. | + +-----------------------+----------------------------------------------------------------+-------------------------------------------------------------------+ + | autoscaling | :ref:`autoscaling ` object | Auto scaling parameters. | + +-----------------------+----------------------------------------------------------------+-------------------------------------------------------------------+ + | nodeManagement | :ref:`nodeManagement ` object | Node management parameters. | + +-----------------------+----------------------------------------------------------------+-------------------------------------------------------------------+ + +.. _cce_02_0355__table3150105216225: + +.. table:: **Table 8** Data structure of the **nodeTemplate** field + + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+==============================================================+====================================================================================================================================================================================================================================================================================+ + | flavor | String | Node specifications. For details, see the description of the **flavorRef** parameter in `Creating an ECS `__. | + | | | | + | | | .. note:: | + | | | | + | | | When adding a BMS node, check whether the flavor of the node to be added supports local disks. If local disks are not supported, add at least one 100 GB EVS disk. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | String | AZ of the node. For details, see the description of the **availability_zone** parameter in `Creating an ECS `__. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | os | String | Node OS. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | login | :ref:`login ` object | Node login mode, which can be key pair or password. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | rootVolume | :ref:`Volume ` object | System disk parameters of the node. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dataVolumes | Array of :ref:`Volume ` object | Data disk parameters of the node. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | :ref:`publicIP ` object | EIP used by the node to access public networks. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeNicSpec | :ref:`nodeNicSpec ` object | Node NIC description. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | count | Integer | Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. | + | | | | + | | | .. note:: | + | | | | + | | | This fielder can be set to **0** for a node pool. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | :ref:`extendParam ` object | Extended parameter. Format: Key-value pair. | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | userTags | Object | Tag of a VM. | + | | | | + | | | The format is key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | + | | | - **Key**: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported. | + | | | - **Value**: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "userTags": [ | + | | | { | + | | | "key": "tag1", | + | | | "value": "aaaa" | + | | | }, | + | | | { | + | | | "key": "tag2", | + | | | "value": "bbbb" | + | | | } | + | | | ] | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | k8sTags | Object | Tag of a Kubernetes node. | + | | | | + | | | The format is key-value pair. The number of key-value pairs cannot exceed 20. | + | | | | + | | | - **Key**: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key | + | | | - **Value**: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "k8sTags": { | + | | | "key": "value" | + | | | } | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | taints | Object | You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters: | + | | | | + | | | - **Key**: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key. | + | | | - **Value**: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.). | + | | | - **Effect**: Available options are **NoSchedule**, **PreferNoSchedule**, and **NoExecute**. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "taints": [{ | + | | | "key": "status", | + | | | "value": "unavailable", | + | | | "effect": "NoSchedule" | + | | | }, { | + | | | "key": "looks", | + | | | "value": "bad", | + | | | "effect": "NoSchedule" | + | | | }] | + +-----------------------+--------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table10946114617286: + +.. table:: **Table 9** Data structure of the **login** field + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==================================================================================================================================+ + | sshKey | String | Name of the key pair used for node login. For details on how to create a key pair, see :ref:`Creating a Key Pair `. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | userPassword | String | Password used for node login. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table1359314517: + +.. table:: **Table 10** Data structure of the **Volume** field + + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=====================================================================+============================================================================================================================================================================================+ + | volumetype | String | Disk type. For details, see the description of **root_volume** in `Creating an ECS `__. | + | | | | + | | | - **SATA**: common I/O disk type. | + | | | - **SAS**: high I/O disk type. | + | | | - **SSD**: ultra-high I/O disk type. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | Integer | Specifies the system disk size, in GB. The value ranges from 40 to 1024. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | Map | Disk extension parameter. For details, see the description of the extendparam parameter in `Creating an ECS `__. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hw:passthrough | Boolean | - Pay attention to this field if your ECS is SDI-compliant. If the value of this field is **true**, the created disk is of the SCSI type. | + | | | - If the node pool type is **ElasticBMS**, this field must be set to **true**. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`dataVolumeMetadata ` object | Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted. | + | | | | + | | | If data disks are created using a data disk image, this parameter cannot be used. | + +-----------------------+---------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table15849123210415: + +.. table:: **Table 11** Data structure of the **dataVolumeMetadata** field + + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==================================================================================================================================================================+ + | \__system__encrypted | String | Whether an EVS disk is encrypted. | + | | | | + | | | - **'0'**: not encrypted | + | | | - **'1'**: encrypted | + | | | | + | | | If this parameter is not specified, EVS disks will not be encrypted by default. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | \__system__cmkid | String | CMK ID used for encryption. This parameter is used with **\__system__encrypted**. | + | | | | + | | | .. note:: | + | | | | + | | | You can obtain the ID through HTTPS requests. For details, see `Querying the List of CMKs `__. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table139179586343: + +.. table:: **Table 12** Data structure of the **publicIP** field + + +-----------------------+----------------------------------------------------+---------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+====================================================+=====================================================================+ + | ids | Array of strings | List of IDs of the existing EIPs. | + | | | | + | | | .. important:: | + | | | | + | | | NOTICE: | + | | | If **ids** is set, you do not need to set **count** and **eip**. | + +-----------------------+----------------------------------------------------+---------------------------------------------------------------------+ + | count | Integer | Number of EIPs to be dynamically created. | + | | | | + | | | .. important:: | + | | | | + | | | NOTICE: | + | | | The **count** and **eip** parameters must be set simultaneously. | + +-----------------------+----------------------------------------------------+---------------------------------------------------------------------+ + | eip | :ref:`eip ` object | EIP. | + | | | | + | | | .. important:: | + | | | | + | | | NOTICE: | + | | | The **count** and **eip** parameters must be set simultaneously. | + +-----------------------+----------------------------------------------------+---------------------------------------------------------------------+ + +.. _cce_02_0355__table135065714419: + +.. table:: **Table 13** Data structure of the **eip** field + + +-----------+------------------------------------------------------------+----------------------------------+ + | Parameter | Type | Description | + +===========+============================================================+==================================+ + | iptype | String | Type of the EIP. | + +-----------+------------------------------------------------------------+----------------------------------+ + | bandwidth | :ref:`bandwidth ` object | Bandwidth parameters of the EIP. | + +-----------+------------------------------------------------------------+----------------------------------+ + +.. _cce_02_0355__table16381121974213: + +.. table:: **Table 14** Data structure of the **bandwidth** field + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================================================================================================================+ + | chargemode | String | Bandwidth billing mode. | + | | | | + | | | - If this parameter is not carried, the node is billed by bandwidth. | + | | | - If this parameter is carried but is left blank, the node is billed by bandwidth. | + | | | - If this parameter is set to **traffic**, the node is billed by traffic. | + | | | - If this parameter is set to another value, node creation will fail. | + | | | | + | | | .. note:: | + | | | | + | | | - Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended. | + | | | - Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | Integer | Bandwidth size. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sharetype | String | Bandwidth sharing type. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table2297153010333: + +.. table:: **Table 15** Data structure of the **nodeNicSpec** field + + +------------+-------------------------------------------------------------------+--------------------------+ + | Parameter | Type | Description | + +============+===================================================================+==========================+ + | primaryNic | :ref:`primaryNic ` object | Primary NIC description. | + +------------+-------------------------------------------------------------------+--------------------------+ + | extNics | Array of :ref:`extNics ` objects | Extension NIC. | + +------------+-------------------------------------------------------------------+--------------------------+ + +.. _cce_02_0355__table1054732719504: + +.. table:: **Table 16** Data structure of the primaryNic/extNics field + + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+==================+=======================================================================================================================================================================================================+ + | subnetId | String | Network ID of the subnet to which the NIC belongs. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | fixedIps | Array of strings | The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipBlock | String | CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table153332427337: + +.. table:: **Table 17** Data structure of the spec/extendParam field + + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=========================+=======================+=================================================================================================================+ + | maxPods | Integer | Maximum number of pods on the node. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | alpha.cce/preInstall | String | Script required before the installation. | + | | | | + | | | .. note:: | + | | | | + | | | The input value must be encoded using Base64. (Command: **echo -n "Content to be encoded" \| base64**) | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | alpha.cce/postInstall | String | Script required after the installation. | + | | | | + | | | .. note:: | + | | | | + | | | The input value must be encoded using Base64. (Command: **echo -n "Content to be encoded" \| base64**) | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | alpha.cce/NodeImageID | String | Mandatory if a custom image is used in creating a bare metal node. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | DockerLVMConfigOverride | String | ConfigMap of the Docker data disk. The following is an example configuration: | + | | | | + | | | .. code-block:: | + | | | | + | | | "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" | + | | | | + | | | In this example: | + | | | | + | | | - **userLV**: size of the user space, for example, **vgpaas/20%VG**. | + | | | - **userPath**: mount path of the user space, for example, **/home/wqt-test**. | + | | | - **diskType**: disk type. Currently, only the **evs**, **hdd**, and **ssd** are supported. | + | | | - **lvType**: type of a logic volume. Currently, the value can be **linear** or **striped**. | + | | | - **dockerThinpool**: Docker space size, for example, **vgpaas/60%VG**. | + | | | - **kubernetesLV**: kubelet space size, for example, **vgpaas/20%VG**. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | publicKey | String | Public key of the node. Used when creating a key pair. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table14356154632610: + +.. table:: **Table 18** Data structure of the autoscaling field + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================================================================================+ + | enable | Boolean | Whether to enable auto scaling. | + | | | | + | | | Default: **false** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | minNodeCount | Integer | Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications. | + | | | | + | | | Minimum: **0** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | maxNodeCount | Integer | Maximum number of nodes allowed if auto scaling is enabled. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | scaleDownCooldownTime | Integer | Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | priority | Integer | Weight of a node pool. A node pool with a higher weight has a higher priority during scaling. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table1778609171919: + +.. table:: **Table 19** Data structure of the nodeManagement field + + +----------------------+--------+-------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +======================+========+=============================================================================================================+ + | serverGroupReference | String | ECS group ID. If this parameter is specified, all nodes in the node pool will be created in this ECS group. | + +----------------------+--------+-------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0355__table19851129411: + +.. table:: **Table 20** Data structure of the status field + + +-----------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===============================================================+ + | currentNode | Integer | Number of nodes in the node pool. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + | phase | String | Node pool status. | + | | | | + | | | - **Synchronizing**: The node is being synchronized. | + | | | - **Synchronized**: The node has been synchronized. | + | | | - **SoldOut**: Nodes have been sold out. | + | | | - **Deleting**: The node is being deleted. | + | | | - **Error**: An error occurred when the node is being added. | + | | | | + | | | .. note:: | + | | | | + | | | If the status is blank, the status is normal. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + | jobId | String | ID of the job to delete the node pool. | + +-----------------------+-----------------------+---------------------------------------------------------------+ + +**Response example**: + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "test-nodepool", + "uid": "65787e3e-cd82-11ea-8ec6-0255ac1001be" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool", + "userPassword": {} + }, + "rootVolume": { + "volumetype": "SATA", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SATA", + "size": 100, + "extendParam": { + "useType": "docker" + }, + "metadata": { + "__system__cmkid": "1ed68cb7-b09b-423c-8d66-fdd2e063769d", + "__system__encrypted": "1" + } + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "3d6f5dc2-caf7-4a06-b4ac-11a3a5a49cdd" + } + }, + "billingMode": 0, + "taints": [ + { + "key": "test-taints", + "value": "test", + "effect": "NoSchedule" + } + ], + "k8sTags": { + "cce.cloud.com/cce-nodepool": "test-nodepool", + "test-k8stag": "test" + }, + "userTags": [ + { + "key": "test-resourcetag", + "value": "test" + } + ], + "extendParam": { + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear", + "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/preInstall": "bHMgLWw=", + "maxPods": 100 + } + }, + "autoscaling": { + "enable": true, + "minNodeCount": 0, + "maxNodeCount": 4, + "scaleDownCooldownTime": 5, + "priority": 1 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + } + }, + "status": { + "currentNode": 0, + "phase": "" + } + } + +Status Code +----------- + +:ref:`Table 21 ` describes the status code of this API. + +.. _cce_02_0355__zh-cn_topic_0079614900_table46761928: + +.. table:: **Table 21** Status code + + =========== ================================================ + Status Code Description + =========== ================================================ + 200 The specified node pool is queried successfully. + =========== ================================================ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/querying_the_access_information_of_a_specified_cluster.rst b/api-ref/source/apis/cluster_management/querying_the_access_information_of_a_specified_cluster.rst new file mode 100644 index 0000000..9be2be1 --- /dev/null +++ b/api-ref/source/apis/cluster_management/querying_the_access_information_of_a_specified_cluster.rst @@ -0,0 +1,159 @@ +:original_name: cce_02_0347.html + +.. _cce_02_0347: + +Querying the Access Information of a Specified Cluster +====================================================== + +Function +-------- + +This API is used to query the access information of a specified cluster. + +.. note:: + + The URL for cluster management is in the format of **https://Endpoint/uri**. In the URL, **uri** indicates the resource path, that is, the path for API access. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters/{cluster_id}/openapi + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0347__tcb491e3c1e0f4805bc2a0f117c2e5291: + +.. table:: **Table 1** Parameter description + + ========== ========= ====== =========== + Parameter Mandatory Type Description + ========== ========= ====== =========== + project_id Yes String Project ID. + cluster_id Yes String Cluster ID. + ========== ========= ====== =========== + +Request +------- + +N/A + +Response +-------- + +**Response parameters:** + +:ref:`Table 2 ` describes the response parameters. + +.. _cce_02_0347__tab67b852d83a4de9b60d1595df71492e: + +.. table:: **Table 2** Response parameters + + +-----------+-----------------------------------------------------------------+-------------------+ + | Parameter | Type | Description | + +===========+=================================================================+===================+ + | metadata | json | Metadata. | + +-----------+-----------------------------------------------------------------+-------------------+ + | spec | :ref:`Table 3 ` | - | + +-----------+-----------------------------------------------------------------+-------------------+ + | status | :ref:`Table 7 ` | Cluster endpoint. | + +-----------+-----------------------------------------------------------------+-------------------+ + +.. _cce_02_0347__ta3c0ec2411934d01ad2031e6ea7a7106: + +.. table:: **Table 3** Data structure of the spec field + + +-----------+--------------------------------------------------+-------------------------------------------+ + | Parameter | Type | Description | + +===========+==================================================+===========================================+ + | spec | :ref:`Table 4 ` | Information about the elastic IP address. | + +-----------+--------------------------------------------------+-------------------------------------------+ + +.. _cce_02_0347__table5860192685015: + +.. table:: **Table 4** Data structure of the spec-spec field + + +-----------+-------------------------------------------------+--------------------------------------------+ + | Parameter | Type | Description | + +===========+=================================================+============================================+ + | id | String | ID of the elastic IP address. | + +-----------+-------------------------------------------------+--------------------------------------------+ + | eip | :ref:`Table 5 ` | Information about the elastic IP address. | + +-----------+-------------------------------------------------+--------------------------------------------+ + | IsDynamic | Boolean | Whether the elastic IP address is dynamic. | + +-----------+-------------------------------------------------+--------------------------------------------+ + +.. _cce_02_0347__table423743115136: + +.. table:: **Table 5** Data structure of the eip field + + +-----------+-------------------------------------------------+----------------------------------------------------+ + | Parameter | Type | Description | + +===========+=================================================+====================================================+ + | bandwidth | :ref:`Table 6 ` | Specifies the bandwidth of the elastic IP address. | + +-----------+-------------------------------------------------+----------------------------------------------------+ + +.. _cce_02_0347__table163165523719: + +.. table:: **Table 6** Data structure of the bandwidth field + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===============================================================================================+ + | size | Integer | Specifies the bandwidth (Mbit/s). | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + | sharetype | String | Specifies the bandwidth sharing type. | + | | | | + | | | Enumerated values: **PER** (indicates exclusive bandwidth) and **WHOLE** (indicates sharing). | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------+ + +.. _cce_02_0347__t500749d17adf492d8e2535fe4933b586: + +.. table:: **Table 7** Data structure of the status field + + =============== ====== =================================== + Parameter Type Description + =============== ====== =================================== + privateEndpoint String Address for access within the VPC. + publicEndpoint String Address for access outside the VPC. + =============== ====== =================================== + +**Example response:** + +.. code-block:: + + { + "metadata": {}, + "spec": { + "spec": { + "id": "0ead681e-9f94-4599-8a21-e2a1950da121", + "eip": { + "bandwidth": { + "size": 5, + "sharetype": "PER" + } + }, + "IsDynamic": false + } + }, + "status": { + "privateEndpoint": "https://192.168.0.189:5443", + "publicEndpoint": "https://10.154.50.197:5443" + } + } + +Status Code +----------- + +:ref:`Table 8 ` describes the status code of the API. + +.. _cce_02_0347__table5493720464: + +.. table:: **Table 8** Status code + + =========== =========================================================== + Status Code Description + =========== =========================================================== + 200 The progress of the specified job is successfully obtained. + =========== =========================================================== + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/reading_a_specified_cluster.rst b/api-ref/source/apis/cluster_management/reading_a_specified_cluster.rst new file mode 100644 index 0000000..3b4d753 --- /dev/null +++ b/api-ref/source/apis/cluster_management/reading_a_specified_cluster.rst @@ -0,0 +1,387 @@ +:original_name: cce_02_0238.html + +.. _cce_02_0238: + +Reading a Specified Cluster +=========================== + +Function +-------- + +This API is used to obtain details about a specified cluster. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters/{cluster_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0238__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` lists the request parameters. + +.. _cce_02_0238__table538113720514: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters:** + +:ref:`Table 3 ` describes the response parameters. + +.. _cce_02_0238__table34052983203655: + +.. table:: **Table 3** Response parameters + + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+============================================================================================================================+ + | kind | String | API type. The value is fixed at **Cluster** and cannot be changed. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Cluster metadata, which is a collection of attributes. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`status ` object | Cluster status and jobID of the job that reads a specified cluster. | + +------------+---------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0238__table1034041612134: + +.. table:: **Table 4** Data structure of the **spec** field + + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=================================================================+===============================================================================================================================================================================================================================================================================================================================+ + | category | String | Cluster category: | + | | | | + | | | - CCE: CCE cluster | + | | | - Turbo: CCE Turbo cluster | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is valid in cluster of v1.17.17 or higher. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | type | String | Cluster type. | + | | | | + | | | **VirtualMachine**: The master node architecture is x86. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | flavor | String | Cluster flavor, which cannot be changed after the cluster is created. | + | | | | + | | | - **cce.s1.small**: small-scale, single-master cluster (≤ 50 nodes) | + | | | - **cce.s1.medium**: medium-scale, single-master cluster (≤ 200 nodes) | + | | | - **cce.s2.small**: small-scale, high availability cluster (≤ 50 nodes) | + | | | - **cce.s2.medium**: medium-scale, high availability cluster (≤ 200 nodes) | + | | | - **cce.s2.large**: large-scale, high availability cluster (≤ 1,000 nodes) | + | | | - **cce.s2.xlarge**: ultra-large-scale, high availability cluster (≤ 2,000 nodes) | + | | | | + | | | .. note:: | + | | | | + | | | - s1: single-master cluster | + | | | - s2: high availability cluster | + | | | - For example, **≤ 50 nodes** indicates that the maximum number of nodes that can be managed by the cluster is 50. | + | | | - A single-master cluster has only one master node. If the master node is down, the cluster will become unavailable and stop serving new workloads. However, existing workloads in the cluster are not affected. | + | | | - A high-availability cluster has multiple master nodes. Faults in a single master node will not take the cluster down. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | version | String | Cluster's baseline Kubernetes version. The latest version is recommended. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | platformVersion | String | Version of the CCE cluster platform, which is for viewing only and cannot be specified during cluster creation. The latest platform version corresponding to the cluster version is automatically selected during cluster creation. | + | | | | + | | | Value format: **cce.X.Y** | + | | | | + | | | - **X** indicates the quarterly or regularly feature version number, starting from 1. | + | | | - **Y** indicates the patch version of the cluster, starting from 0 (feature version). Other values indicate later patch versions after the feature version is released. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | String | AZ of the cluster. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipv6enable | Boolean | Reserved. This parameter is not used in the current version. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | supportIstio | String | Reserved. This parameter is not used in the current version. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Cluster description. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | customSan | Array of strings | Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications. | + | | | | + | | | #. Duplicate names are not allowed. | + | | | #. Must comply with the IP address and domain name formats. | + | | | | + | | | example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34 | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | hostNetwork | :ref:`hostNetwork ` object | Node network parameters, including a VPC and subnet ID. **hostNetwork** is mandatory because nodes in a cluster communicate with each other by using a VPC. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | containerNetwork | :ref:`containerNetwork ` object | Container network parameters, including a container network model and container CIDR block. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | eniNetwork | :ref:`eniNetwork ` object | Configuration of Cloud Native Network 2.0. Specify this field when creating a CCE Turbo cluster. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | authentication | :ref:`authentication ` object | Configurations of the cluster authentication mode. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | masters | No | :ref:`MasterSpec ` objects | + | | | | + | | | Advanced configurations of the master node. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | :ref:`extendParam ` object | Extended fields in the format of key-value pairs. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetesSvcIpRange | String | Service CIDR block or the IP address range which the **kubernetes clusterIp** must fall within. This parameter is available only for clusters of v1.11.7 and later. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubeProxyMode | String | Service forwarding mode. Two modes are available: | + | | | | + | | | - **iptables**: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many services are deployed. In addition, non-incremental updates will cause a latency and even obvious performance issues in the case of heavy service traffic. | + | | | - **ipvs**: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters. | + +-----------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0238__table1622013552507: + +.. table:: **Table 5** Data structure of the **hostNetwork** field + + +---------------+--------+-------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===============+========+=========================================================================================================================+ + | vpc | String | ID of the VPC used to create a master node. The VPC ID is obtained from :ref:`Creating a VPC and Subnet `. | + +---------------+--------+-------------------------------------------------------------------------------------------------------------------------+ + | subnet | String | Network ID of the subnet. The value is obtained from :ref:`Creating a VPC and Subnet `. | + +---------------+--------+-------------------------------------------------------------------------------------------------------------------------+ + | SecurityGroup | String | ID of the default security group created for the node during cluster creation. | + +---------------+--------+-------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0238__table882310145412: + +.. table:: **Table 6** Data structure of the **containerNetwork** field + + +-----------------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+============================================================================+====================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | mode | String | Container network model. Select one of the following possible values: | + | | | | + | | | - **overlay_l2**: an overlay_l2 network built for containers by using OpenVSwitch (OVS). | + | | | - **vpc-router**: an underlay_l2 network built for containers by using ipvlan and custom VPC routes. | + | | | - **eni**: cloud native 2.0 network model. This model deeply integrates the native ENI capability of VPC, uses the VPC CIDR block to allocate container addresses, and supports passthrough between load balancers and containers to provide high performance. You can use this network model when creating a CCE Turbo cluster. | + | | | | + | | | .. note:: | + | | | | + | | | - Tunnel network: Under this model, the container network is an overlay network on top of a VPC network based on the VXLAN technology. VXLAN encapsulates Ethernet packets as UDP packets for tunnel transmission. Though at some cost of performance, the tunnel encapsulation enables higher interoperability and compatibility with advanced features (such as network policy-based isolation), meeting the requirements of most applications. | + | | | - VPC network: Routing is implemented within a VPC network according to custom VPC routes. Each node is assigned a CIDR block of a fixed size. vpc-router networks are free of tunnel encapsulation overheads and provide better container network performance than tunnel networks. In addition, as routes to node IP addresses and the containers have been configured on vpc-router, container instances can be directly accessed from outside the cluster. | + +-----------------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | cidr | String | Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, or 192.168.0.0/16-19. If the selected CIDR block conflicts with existing CIDR blocks, the system automatically selects another CIDR block. | + | | | | + | | | This parameter cannot be modified after the cluster is created. Exercise caution when setting this parameter.(This parameter has been discarded. If **cidrs** has been configured, skip this parameter.) | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **64** | + +-----------------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | cidrs | Array of :ref:`ContainerCIDR ` objects | List of container CIDR blocks. In clusters of v1.21 and later, the **cidrs** field is used. When the cluster network type is **vpc-router**, you can add multiple container CIDR blocks. In versions earlier than v1.21, if the **cidrs** field is used, the first CIDR element in the array is used as the container CIDR block. | + | | | | + | | | The configuration cannot be changed after the cluster is created. | + +-----------------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0238__request_containercidr: + +.. table:: **Table 7** ContainerCIDR + + +-----------+-----------+--------+--------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========+============================================================================================+ + | cidr | Yes | String | Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, and 192.168.0.0/16-19 | + +-----------+-----------+--------+--------------------------------------------------------------------------------------------+ + +.. _cce_02_0238__request_eninetwork: + +.. table:: **Table 8** EniNetwork + + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===============+===========+========+===============================================================================+ + | eniSubnetId | Yes | String | IPv4 Subnet ID of the ENI container subnet. Currently, IPv6 is not supported. | + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + | eniSubnetCIDR | Yes | String | ENI subnet CIDR block. | + +---------------+-----------+--------+-------------------------------------------------------------------------------+ + +.. _cce_02_0238__request_masterspec: + +.. table:: **Table 9** MasterSpec + + +------------------+-----------------+-----------------+------------------------+ + | Parameter | Mandatory | Type | Description | + +==================+=================+=================+========================+ + | availabilityZone | No | String | Availability Zone. | + | | | | | + | | | | For example, eu-de-01. | + +------------------+-----------------+-----------------+------------------------+ + +.. _cce_02_0238__table17575013586: + +.. table:: **Table 10** Data structure of the extendParam field + + +--------------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================================+=======================+=============================================================================================================================================================================================================================+ + | alpha.cce/fixPoolMask | String | Number of mask bits of the fixed IP address pool of the container network model. This field is supported only for the VPC network model (vpc-router). | + | | | | + | | | This parameter determines the number of container IP addresses that can be allocated to a node. The maximum number of pods that can be created on a node is decided by this parameter and maxPods set during node creation. | + | | | | + | | | The value is an integer ranging from 24 to 28. | + +--------------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetes.io/cpuManagerPolicy | String | CPU management policy of the master node. | + +--------------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | upgradefrom | String | Version from which this version is upgrade. | + +--------------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0238__table6749834132215: + +.. table:: **Table 11** Data structure of the **status** field + + +-----------------------+-------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=========================================================================+====================================================================================================================================================+ + | phase | String | Cluster status. Possible values: | + | | | | + | | | - **Available**: The cluster is running properly. | + | | | - **Unavailable**: The cluster is exhibiting unexpected behavior. Manually delete the cluster or contact the administrator to delete the cluster. | + | | | - **ScalingUp**: Nodes are being added to the cluster. | + | | | - **ScalingDown**: The cluster is being downsized to fewer nodes. | + | | | - **Creating**: The cluster is being created. | + | | | - **Deleting**: The cluster is being deleted. | + | | | - **Upgrading**: The cluster is being upgraded. | + | | | - **Resizing**: Cluster specifications are being changed. | + | | | - **Empty**: The cluster has no resources. | + +-----------------------+-------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | reason | String | Reason of cluster state transition. This parameter is returned if the cluster is not in the Available state. | + +-----------------------+-------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | message | String | Detailed information about why the cluster changes to the current state. This parameter is returned if the cluster is not in the Available state. | + +-----------------------+-------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | endpoints | :ref:`endpoint ` object | Access address of the kube-apiserver in the cluster. | + +-----------------------+-------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0238__t3d666891caf940a39046a0807b3c480a: + +.. table:: **Table 12** Data structure of the endpoint field + + +--------------+--------+-------------------------------------------------------------+ + | Parameter | Type | Description | + +==============+========+=============================================================+ + | internal | String | Internal network address. | + +--------------+--------+-------------------------------------------------------------+ + | external | String | External network address. | + +--------------+--------+-------------------------------------------------------------+ + | external_otc | String | Endpoint of the cluster to be accessed through API Gateway. | + +--------------+--------+-------------------------------------------------------------+ + +**Response example**: + +.. code-block:: + + "kind": "Cluster", + "apiVersion": "v3", + "metadata": { + "name": "mycluster", + "uid": "365b5e05-846a-11ea-9fe6-0255ac101107", + "creationTimestamp": "2020-04-22 07:23:50.157883 +0000 UTC", + "updateTimestamp": "2020-05-08 03:10:12.174334 +0000 UTC" + }, + "spec": { + "type": "VirtualMachine", + "flavor": "cce.s1.small", + "version": "v1.17.9-r0", + "description": "new description", + "az": "eu-de-01", + "ipv6enable": false, + "supportIstio": true, + "hostNetwork": { + "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1", + "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438", + "SecurityGroup": "7bf2a95b-f41d-4187-9e72-d0a9a4de8e6d" + }, + "containerNetwork": { + "mode": "overlay_l2", + "cidr": "172.16.0.0/16" + }, + "eniNetwork": {}, + "authentication": { + "mode": "rbac", + "authenticatingProxy": {} + }, + "billingMode": 0, + "extendParam": { + "alpha.cce/fixPoolMask": "", + "kubernetes.io/cpuManagerPolicy": "", + "upgradefrom": "" + }, + "kubernetesSvcIpRange": "10.247.0.0/16", + "kubeProxyMode": "iptables" + }, + "status": { + "phase": "Available", + "endpoints": [ + { + "Internal": "https://192.168.0.61:5443", + }, + { + "External": "https://10.185.69.54:5443", + }, + { + "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com", + }, + ] + } + } + +Status Code +----------- + +:ref:`Table 13 ` describes the status code of this API. + +.. _cce_02_0238__en-us_topic_0079614900_table46761928: + +.. table:: **Table 13** Status code + + +-------------+-------------------------------------------------------------------+ + | Status Code | Description | + +=============+===================================================================+ + | 200 | Information about the specified cluster is successfully obtained. | + +-------------+-------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/reading_a_specified_node.rst b/api-ref/source/apis/cluster_management/reading_a_specified_node.rst new file mode 100644 index 0000000..94a0237 --- /dev/null +++ b/api-ref/source/apis/cluster_management/reading_a_specified_node.rst @@ -0,0 +1,410 @@ +:original_name: cce_02_0243.html + +.. _cce_02_0243: + +Reading a Specified Node +======================== + +Function +-------- + +This API is used to obtain details about a node with a specified node ID. + +URI +--- + +GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0243__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | node_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================================================================================================================+ + | errorStatus | No | String | This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of **errorStatus** is null, the cluster stays in the **Deleting** state, but not **Error**. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **10** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 3 ` describes the request parameters. + +.. _cce_02_0243__table13638079467: + +.. table:: **Table 3** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters**: + +:ref:`Table 4 ` describes the response parameters. + +.. _cce_02_0243__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 4** Response parameters + + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=========================================================================================================================+ + | kind | String | API type. The value is fixed at **Node** and cannot be changed. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Node's metadata, which is a collection of attributes. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`status ` object | Node status and jobID of the node creation job. | + +------------+---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0243__table669019286188: + +.. table:: **Table 5** Data structure of the **metadata** field + + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+==============================================================+==============================================================================================================================================================+ + | name | String | Node name. | + | | | | + | | | .. note:: | + | | | | + | | | Enter 1 to 56 characters, starting with a lowercase letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **56** | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | uid | String | Node ID, which is unique and automatically generated after the resource is created. A user-defined ID will not take effect. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | labels | Map | CCE node label (not the native Kubernetes label). | + | | | | + | | | Labels are used to select objects that meet certain criteria. A label is a key-value pair. | + | | | | + | | | Example: | + | | | | + | | | .. code-block:: | + | | | | + | | | "labels": { | + | | | "key" : "value" | + | | | } | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | creationTimestamp | String | Time when the object was created. The value is automatically generated after the object is created. A user-defined value will not take effect. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | updateTimestamp | String | Time when the object was updated. The value is automatically generated after the object is created. A user-defined value will not take effect. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | annotations | :ref:`annotations ` object | Node annotation. Format: Key-value pair. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0243__table10411172218590: + +.. table:: **Table 6** Data structure of the **annotations** field + + +----------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============================+=======================+=======================================================================================================================================================================+ + | kubernetes.io/node-pool.id | String | - If a node is created from a node pool, the value is the ID of the node pool. | + | | | - If the node is not created from a node pool, the value is in the following format: *Name of the AZ where the node is located*\ #\ *Node flavor*\ #\ *Node OS name* | + +----------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0243__table13949117115810: + +.. table:: **Table 7** Data structure of the **spec** field + + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+==============================================================+============================================================================================================================================================================================+ + | flavor | String | Node specifications. For details, see the description of the **flavorRef** parameter in `Creating an ECS `__. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | az | String | AZ of the node. For details, see the description of the **availability_zone** parameter in `Creating an ECS `__. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | os | String | Node OS. | + | | | | + | | | - Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2. | + | | | - Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5. | + | | | - Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7. | + | | | - Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7. | + | | | - Nodes using **kata** runtime in CCE Turbo cluster support EulerOS 2.9. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | login | :ref:`login ` object | Node login mode, which can only be key pair. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | rootVolume | :ref:`Volume ` object | System disk parameters of the node. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dataVolumes | Array of :ref:`Volume ` object | Data disk parameters of the node. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | publicIP | :ref:`publicIP ` object | EIP parameters of a node. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeNicSpec | :ref:`nodeNicSpec ` object | Description about the node NIC. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | count | Integer | Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter can be set to **0** for a node pool. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | billingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ecsGroupId | String | ECS group ID. If this parameter is specified, the node is created in the specified ECS group. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is not supported when you add a node to a node pool or use CCE Turbo cluster. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | dedicatedHostId | String | ID of the DeH host. If this parameter is specified, the node is scheduled to its own DeH host. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is not supported when you add a node to a node pool. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | offloadNode | Boolean | Whether the node belongs to a CCE Turbo cluster. | + | | | | + | | | .. note:: | + | | | | + | | | This parameter is not supported when you add a node to a node pool. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | faultDomain | String | Cloud server fault domain. The node is created in the fault domain specified by this parameter. | + | | | | + | | | .. note:: | + | | | | + | | | You must specify the ECS to which the fault domain policy applies and enable the fault domain feature. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | runtime | :ref:`Runtime ` object | Container runtime. The default value is **docker**. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | :ref:`extendParam ` object | Extended parameter. Format: Key-value pair. | + +-----------------------+--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0243__table162751117166: + +.. table:: **Table 8** Data structure of the nodeNicSpec field + + +------------+------------------------------------------------------------------+------------------------------------+ + | Parameter | Type | Description | + +============+==================================================================+====================================+ + | primaryNic | :ref:`primaryNic ` object | Description about the primary NIC. | + +------------+------------------------------------------------------------------+------------------------------------+ + | extNics | Array of :ref:`extNics ` objects | Extension NIC. | + +------------+------------------------------------------------------------------+------------------------------------+ + +.. _cce_02_0243__table614985275016: + +.. table:: **Table 9** Data structure of the primaryNic/extNics field + + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+==================+===================================================================================================================================================================================================================+ + | subnetId | String | Network ID of the subnet to which the NIC belongs. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | fixedIps | Array of strings | The IP address of the primary NIC is specified by **fixedIps**. The number of IP addresses cannot be greater than the number of created nodes. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ipBlock | String | CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. **fixedIps** and **ipBlock** cannot be specified at the same time. | + +-----------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0243__table483064395515: + +.. table:: **Table 10** Runtime + + +-----------------------+-----------------------+-----------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=====================================================+ + | name | String | Container runtime. The default value is **docker**. | + | | | | + | | | Enumeration values: | + | | | | + | | | - docker | + | | | - containerd | + +-----------------------+-----------------------+-----------------------------------------------------+ + +.. _cce_02_0243__table2039318361484: + +.. table:: **Table 11** Data structure of the **extendParam** field + + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=========================+=======================+=================================================================================================================+ + | chargingMode | Integer | Billing mode of a node. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | ecs:performancetype | String | Type of the ECS specifications. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | orderID | String | Order ID. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | productID | String | Product ID. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | maxPods | Integer | Maximum number of pods on the node. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | dockerBaseSize | Integer | Available disk space of a single Docker container on the node using the device mapper. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | periodType | String | Purchase duration type. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | periodNum | Integer | Purchase duration. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | isAutoRenew | String | Whether auto renewal is enabled. | + | | | | + | | | - **true**: Indicates that auto renewal is enabled. | + | | | - **false**: Indicates that auto renewal is disabled. | + | | | | + | | | .. note:: | + | | | | + | | | This field is not supported for the current version. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | DockerLVMConfigOverride | String | Docker data disk configurations. The following is the default configuration: | + | | | | + | | | .. code-block:: | + | | | | + | | | "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear" | + | | | | + | | | The configuration contains the following fields: | + | | | | + | | | - **userLV**: size of the user space, for example: **vgpaas/20%VG**. | + | | | - **userPath**: mount path of the user space, for example: **/home/wqt-test**. | + | | | - **diskType**: disk type. Currently, only the **evs**, **hdd**, and **ssd** are supported. | + | | | - **lvType**: type of a logic volume. Currently, the value can be **linear** or **striped**. | + | | | - **dockerThinpool**: Docker disk space, for example: **vgpaas/60%VG**. | + | | | - **kubernetesLV**: kubelet size, for example: **vgpaas/20%VG**. | + +-------------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0243__table1741714540447: + +.. table:: **Table 12** Data structure of the **status** field + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=============================================================================================================+ + | phase | String | Node status. | + | | | | + | | | - **Build**: The VM that hosts the node is being created. | + | | | - **Active**: The node is ready for use. | + | | | - **Abnormal**: The node is unready for use. | + | | | - **Deleting**: The node is being deleted. | + | | | - **Installing**: The node is being installed. | + | | | - **Upgrading**: The node is being upgraded. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------+ + | serverId | String | ID of the ECS where the node resides. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------+ + | publicIP | String | EIP used by the node to access public networks. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------+ + | privateIP | String | Private IP address used by the node to communicate with other nodes in the same VPC as the current cluster. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------+ + +**Example response**: + +.. code-block:: + + { + "kind": "Node", + "apiVersion": "v3", + "metadata": { + "name": "myhost", + "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "creationTimestamp": "2020-02-02 08:12:40.124294439 +0000 UTC", + "updateTimestamp": "2020-02-02 08:18:20.221871842 +0000 UTC", + "annotations": { + "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5" + } + }, + "spec": { + "flavor": "s1.medium", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "Keypair-demo" + }, + "rootVolume": { + "volumetype": "SAS", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SAS", + "size": 100 + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + } + }, + "status": { + "phase": "Active", + "serverId": "456789abc-9368-46f3-8f29-d1a95622a568", + "publicIP": "10.34.56.78", + "privateIP": "192.168.1.23" + } + } + +Status Code +----------- + +:ref:`Table 13 ` describes the status code of this API. + +.. _cce_02_0243__en-us_topic_0079614900_table46761928: + +.. table:: **Table 13** Status code + + +-------------+-------------------------------------------------------------------------------+ + | Status Code | Description | + +=============+===============================================================================+ + | 200 | Information about the node in the specified cluster is successfully obtained. | + +-------------+-------------------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/reading_job_progress.rst b/api-ref/source/apis/cluster_management/reading_job_progress.rst new file mode 100644 index 0000000..af5cc61 --- /dev/null +++ b/api-ref/source/apis/cluster_management/reading_job_progress.rst @@ -0,0 +1,228 @@ +:original_name: cce_02_0247.html + +.. _cce_02_0247: + +Reading Job Progress +==================== + +Function +-------- + +This API is used to query the progress of a job with a specified job ID returned after a job request is issued. + +.. note:: + + - The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access. + - You can call this API when: + + - Creating or deleting a cluster + - Creating or deleting a node + +URI +--- + +GET /api/v3/projects/{project_id}/jobs/{job_id} + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0247__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | job_id | Yes | Job ID. For details about how to obtain the job ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` describes the request parameters. + +.. _cce_02_0247__table189325395020: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | Default: **application/json** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + | | | | + | | | Maximum: **16384** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +N/A + +Response +-------- + +**Response parameters**: + +:ref:`Table 3 ` describes the response parameters. + +.. _cce_02_0247__en-us_topic_0079616779_en-us_topic_0079614912_ref458774242: + +.. table:: **Table 3** Response parameters + + +-----------------------+--------------------------------------------------------+------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+========================================================+==================================================================+ + | kind | String | API type. The value is fixed at **Job** and cannot be changed. | + | | | | + | | | Default: **Job** | + +-----------------------+--------------------------------------------------------+------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + | | | | + | | | Default: **v3** | + +-----------------------+--------------------------------------------------------+------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Node metadata. | + +-----------------------+--------------------------------------------------------+------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed node parameters. | + +-----------------------+--------------------------------------------------------+------------------------------------------------------------------+ + | status | :ref:`status ` object | Node status. | + +-----------------------+--------------------------------------------------------+------------------------------------------------------------------+ + +.. _cce_02_0247__table13456192212: + +.. table:: **Table 4** Data structure of the **metadata** field + + ================= ====== ================== + Parameter Type Description + ================= ====== ================== + uid String Job ID. + creationTimestamp String Job creation time. + updateTimestamp String Job update time. + ================= ====== ================== + +.. _cce_02_0247__table620623542313: + +.. table:: **Table 5** Data structure of the **spec** field + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==================================================================================================================================+ + | type | String | Job type, for example, **CreateCluster**. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | clusterUID | String | ID of the cluster where the job runs. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | resourceID | String | ID of the resource on which a job is executed. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | resourceName | String | Name of the resource on which a job is executed. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | extendParam | Map | Extended parameter. This field is not supported for the current version. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | subJobs | Object | List of sub-jobs. For details, see :ref:`Table 3 `. | + | | | | + | | | - The sub-job list contains details about all sub-jobs. | + | | | - Usually, a cluster/node creation job consists of multiple sub-jobs. The job is complete only after all sub-jobs are complete. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0247__table5445161610255: + +.. table:: **Table 6** Data structure of the **status** field + + +-----------------------+-----------------------+---------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===================================================+ + | phase | String | Job status. The options are as follows: | + | | | | + | | | - JobPhaseInitializing JobPhase = "Initializing" | + | | | - JobPhaseRunning JobPhase = "Running" | + | | | - JobPhaseFailed JobPhase = "Failed" | + | | | - JobPhaseSuccess JobPhase = "Success" | + +-----------------------+-----------------------+---------------------------------------------------+ + | reason | String | Reason why the job is in the current state. | + +-----------------------+-----------------------+---------------------------------------------------+ + +**Example response**: + +.. code-block:: + + { + "kind": "Job", + "apiVersion": "v3", + "metadata": { + "uid": "354331b2c-229a-11e8-9c75-0255ac100ceb", + "creationTimestamp": "2020-02-02 08:12:40.672772389 +0000 UTC", + "updateTimestamp": "2020-02-02 08:21:50.478108569 +0000 UTC" + }, + "spec": { + "type": "CreateCluster", + "clusterUID": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "resourceID": "6f4dcb2c-229a-11e8-9c75-0255ac100ceb", + "resourceName": "cluster-name", + "extendParam": { + "serverID": "bc467e3a-2338-11e8-825b-0255ac100c13" + }, + "subJobs": [ + { + "kind": "Job", + "apiVersion": "v3", + "metadata": { + "uid": "fd474fab-9606-11e8-baa9-0255ac10215d", + "creationTimestamp": "2020-02-02 03:52:34.615819618 +0000 UTC", + "updateTimestamp": "2020-02-02 04:05:29.196243031 +0000 UTC" + }, + "spec": { + "type": "InstallMaster", + "clusterUID": "fcc72de0-9606-11e8-baa8-0255ac10215d", + "resourceID": "fd3b4ac0-9606-11e8-baa8-0255ac10215d", + "extendParam": { + "serverID": "fd3b4ac0-9606-11e8-baa8-0255ac10215d" + } + }, + "status": { + "phase": "Success" + } + }, + { + "kind": "Job", + "apiVersion": "v3", + "metadata": { + "uid": "fd474f82-9606-11e8-baa8-0255ac10215d", + "creationTimestamp": "2020-02-02 03:52:33.859150791 +0000 UTC", + "updateTimestamp": "2020-02-02 03:52:34.615655429 +0000 UTC" + }, + "spec": { + "type": "CreatePSMCert", + "clusterUID": "fcc72de0-9606-11e8-baa8-0255ac10215d" + }, + "status": { + "phase": "Success" + } + } + ], + }, + "status": { + "phase": "Running", + "reason": "" + } + } + +Status Code +----------- + +:ref:`Table 7 ` describes the status code of this API. + +.. _cce_02_0247__en-us_topic_0079614900_table46761928: + +.. table:: **Table 7** Status code + + =========== =========================================================== + Status Code Description + =========== =========================================================== + 200 The progress of the specified job is successfully obtained. + =========== =========================================================== + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/updating_a_specified_cluster.rst b/api-ref/source/apis/cluster_management/updating_a_specified_cluster.rst new file mode 100644 index 0000000..305a8a2 --- /dev/null +++ b/api-ref/source/apis/cluster_management/updating_a_specified_cluster.rst @@ -0,0 +1,255 @@ +:original_name: cce_02_0240.html + +.. _cce_02_0240: + +Updating a Specified Cluster +============================ + +Function +-------- + +This API is used to update information about a specified cluster. + +URI +--- + +PUT /api/v3/projects/{project_id}/clusters/{cluster_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0240__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and :ref:`Table 3 ` describe the request parameters. + +.. _cce_02_0240__table172831182919: + +.. table:: **Table 2** Parameters in the **request** header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0240__table34052983203655: + +.. table:: **Table 3** Parameters in the request body + + +-----------+-----------+------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+======================================================+============================================================================================================================+ + | spec | Yes | :ref:`spec ` object | Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec. | + +-----------+-----------+------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0240__table1034041612134: + +.. table:: **Table 4** Data structure of the **spec** field + + +------------------+-----------------+------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +==================+=================+====================================================================================+======================================================================================================================================+ + | description | No | String | Cluster description. | + +------------------+-----------------+------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ + | customSan | No | Array of strings | Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications. | + | | | | | + | | | | #. Duplicate names are not allowed. | + | | | | #. Must comply with the IP address and domain name formats. | + | | | | | + | | | | example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34 | + +------------------+-----------------+------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ + | containerNetwork | No | :ref:`ContainerNetworkUpdate ` object | Container networking parameters, including information about the container CIDR block. | + +------------------+-----------------+------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0240__request_containernetworkupdate: + +.. table:: **Table 5** ContainerNetworkUpdate + + +-----------------+-----------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+============================================================================+==============================================================================================================================================================+ + | cidrs | No | Array of :ref:`ContainerCIDR ` objects | List of container CIDR blocks. For clusters of v1.21 and later, if the cluster uses the VPC network model, container CIDR blocks can be added incrementally. | + | | | | | + | | | | The configuration cannot be changed after the cluster is updated. | + +-----------------+-----------------+----------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0240__request_containercidr: + +.. table:: **Table 6** ContainerCIDR + + +-----------+-----------+--------+--------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========+============================================================================================+ + | cidr | Yes | String | Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, and 192.168.0.0/16-19 | + +-----------+-----------+--------+--------------------------------------------------------------------------------------------+ + +**Example request**: + +- Updating the description of a cluster + + .. code-block:: + + { + "spec" : { + "description" : "new description" + } + } + +- Updating only the custom SAN of the cluster certificate + + .. code-block:: + + { + "spec" : { + "customSan" : [ "192.168.1.0", "example.com" ] + } + } + +- Updating both the cluster description and custom certificate SAN + + .. code-block:: + + { + "spec" : { + "description" : "new description", + "customSan" : [ "192.168.1.0", "example.com" ] + } + } + +- Adding a container CIDR block for a cluster of v1.21 or later that uses the VPC network model + + .. code-block:: + + { + "spec" : { + "containerNetwork" : { + "cidrs" : [ { + "cidr" : "10.10.0.0/16" + }, { + "cidr" : "10.11.0.0/16" + } ] + } + } + } + +Response +-------- + +**Response parameters:** + +For details about the response parameters, see :ref:`Table 7 `. + +.. _cce_02_0240__table111553952019: + +.. table:: **Table 7** Parameters in the response body + + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============+=========================================================+=====================================================================================================================+ + | kind | String | API type. For a cluster management API, the parameter must be set to **Cluster** and cannot be changed. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | apiVersion | String | API version. The value is fixed at **v3** and cannot be changed. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | metadata | :ref:`metadata ` object | Basic information about a cluster. metadata is a collection of attributes. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | spec | :ref:`spec ` object | Detailed description of the cluster to be created. CCE creates or updates objects by defining or updating its spec. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | status | :ref:`status ` object | Cluster status and jobID of the job that reads a specified cluster. | + +------------+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + +**Example response:** + +.. code-block:: + + { + "kind": "Cluster", + "apiVersion": "v3", + "metadata": { + "name": "mycluster", + "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "creationTimestamp": "2020-02-02 03:48:58.968214406 +0000 UTC", + "updateTimestamp": "2020-02-02 06:39:36.844676088 +0000 UTC" + }, + "spec": { + "type": "VirtualMachine", + "flavor": "cce.s1.small", + "version": "v1.17.9-r0", + "description": "new description", + "az": "eu-de-01", + "ipv6enable": false, + "supportIstio": true, + "hostNetwork": { + "vpc": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "subnet": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "SecurityGroup": "5da0b181-e0a2-4981-87ac-1681545cd666" + }, + "containerNetwork": { + "mode": "overlay_l2", + "cidr": "172.17.0.0/16" + }, + "eniNetwork": {}, + "authentication": { + "mode": "rbac", + "authenticatingProxy": {} + }, + "billingMode": 0, + "extendParam": { + "alpha.cce/fixPoolMask": "", + "kubernetes.io/cpuManagerPolicy": "", + "patchVersion": "", + "upgradefrom": "" + }, + "kubernetesSvcIpRange": "10.247.0.0/16", + "kubeProxyMode": "iptables" + }, + "status": { + "phase": "Available", + "endpoints": [ + { + "Internal": "https://192.168.0.61:5443", + }, + { + "External": "https://10.185.69.54:5443", + }, + { + "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com", + }, + ] + } + } + +Status Code +----------- + +:ref:`Table 8 ` describes the status code of this API. + +.. _cce_02_0240__en-us_topic_0079614900_table46761928: + +.. table:: **Table 8** Status code + + +-------------+------------------------------------------------------------------+ + | Status Code | Description | + +=============+==================================================================+ + | 200 | Information about the specified cluster is successfully updated. | + +-------------+------------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/updating_a_specified_node.rst b/api-ref/source/apis/cluster_management/updating_a_specified_node.rst new file mode 100644 index 0000000..d3d3f16 --- /dev/null +++ b/api-ref/source/apis/cluster_management/updating_a_specified_node.rst @@ -0,0 +1,165 @@ +:original_name: cce_02_0245.html + +.. _cce_02_0245: + +Updating a Specified Node +========================= + +Function +-------- + +This API is used to update information about a specified node. + +URI +--- + +PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} + +:ref:`Table 1 ` describes the parameters of the API. + +.. _cce_02_0245__table2027961241820: + +.. table:: **Table 1** Parameter description + + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +============+===========+===============================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + | node_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and :ref:`Table 3 ` describe the request parameters. + +.. _cce_02_0245__table34821245101211: + +.. table:: **Table 2** Parameters in the request header + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=======================+=======================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | Message body type (format). Possible values: | + | | | | + | | | - application/json;charset=utf-8 | + | | | - application/json | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0245__table185578532300: + +.. table:: **Table 3** Parameters in the request body + + +-----------+-----------+---------------------------------------------------------+-------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+=========================================================+=======================================================+ + | metadata | No | :ref:`metadata ` object | Node's metadata, which is a collection of attributes. | + +-----------+-----------+---------------------------------------------------------+-------------------------------------------------------+ + +.. _cce_02_0245__table915314146321: + +.. table:: **Table 4** Data structure of the **metadata** field + + +-----------+-----------+--------+-------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========+===========================================================================================+ + | name | Yes | String | Node name. After the node name is changed, the ECS name (VM name) is changed accordingly. | + +-----------+-----------+--------+-------------------------------------------------------------------------------------------+ + +**Example request**: + +.. code-block:: + + { + "metadata": { + "name": "new-hostname" + } + } + +Response +-------- + +**Response parameters**: + +For the description of the response parameters, see :ref:`Table 4 `. + +**Example response**: + +.. code-block:: + + { + "kind": "Node", + "apiVersion": "v3", + "metadata": { + "name": "new-hostname", + "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb", + "creationTimestamp": " 2020-02-20T21:11:09Z", + "updateTimestamp": "2020-02-20T21:11:09Z", + "annotations": { + "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5" + } + }, + "spec": { + "flavor": "s1.medium", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-demo", + }, + "rootVolume": { + "volumeType": "SAS", + "diskSize": 40 + }, + "dataVolumes": [ + { + "volumeType": "SAS", + "diskSize": 100 + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "c90b3ce5-e1f1-4c87-a006-644d78846438" + } + }, + "billingMode": 0 + "publicIP": { + "eip": { + } + } + }, + "status": { + "phase": "Active", + "serverId": "456789abc-9368-46f3-8f29-d1a95622a568", + "publicIP": "10.34.56.78", + "privateIP": "192.168.1.23" + } + } + +Status Code +----------- + +:ref:`Table 5 ` describes the status code of this API. + +.. _cce_02_0245__en-us_topic_0079614900_table46761928: + +.. table:: **Table 5** Status code + + +-------------+---------------------------------------------------------------+ + | Status Code | Description | + +=============+===============================================================+ + | 200 | Information about the specified node is successfully updated. | + +-------------+---------------------------------------------------------------+ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/updating_a_specified_node_pool.rst b/api-ref/source/apis/cluster_management/updating_a_specified_node_pool.rst new file mode 100644 index 0000000..b845c63 --- /dev/null +++ b/api-ref/source/apis/cluster_management/updating_a_specified_node_pool.rst @@ -0,0 +1,369 @@ +:original_name: cce_02_0356.html + +.. _cce_02_0356: + +Updating a Specified Node Pool +============================== + +Function +-------- + +This API is used to update a specified node pool. + +.. note:: + + - The URL for cluster management is in the format of **https://Endpoint/uri**. In the URL, **uri** indicates the resource path, that is, the path for API access. + - Currently, only the node pool name and scaling parameters in **spec** can be updated, such as **initialNodeCount, autoscaling, name, k8sTags, taints, login**, and **userTags**. + +URI +--- + +PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id} + +:ref:`Table 1 ` describes the parameters of this API. + +.. _cce_02_0356__table127923532918: + +.. table:: **Table 1** Parameter description + + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Description | + +=============+===========+=========================================================================================================================================+ + | project_id | Yes | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + | nodepool_id | Yes | Node pool ID. For details about how to obtain the node pool ID, see :ref:`Listing All Node Pools in a Specified Cluster `. | + +-------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------+ + +Request +------- + +**Request parameters**: + +:ref:`Table 2 ` and :ref:`Table 3 ` lists the request parameters. + +.. _cce_02_0356__table794104818135: + +.. table:: **Table 2** Parameters in the request header + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | String | Description | + +=================+=================+=================+===============================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see :ref:`API Usage Guidelines `. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0356__table1644211019: + +.. table:: **Table 3** NodePool structure + + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========================================================+===========================================+ + | kind | Yes | String | API type, which is fixed at **NodePool**. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | apiVersion | Yes | String | API version, which is fixed at **v3**. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | metadata | Yes | :ref:`metadata ` object | Metadata of the node pool. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + | spec | Yes | :ref:`spec ` object | Parameters of the node pool. | + +------------+-----------+--------------------------------------------------------+-------------------------------------------+ + +.. _cce_02_0356__table13456192212: + +.. table:: **Table 4** Data structure of the **metadata** field + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================================================================+ + | name | Yes | String | Node pool name. | + | | | | | + | | | | Naming rule: Enter 1 to 50 characters that starts with a lowercase letter and cannot end with a hyphen (-). Lowercase letters, digits, and hyphens (-) are allowed. The value cannot be **DefaultPool**. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0356__table620623542313: + +.. table:: **Table 5** Data structure of the **spec** field + + +------------------+-----------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +==================+=================+=====================+=====================================================================================================================================================================================================================================================================================================================================+ + | initialNodeCount | Yes | Integer | Expected number of nodes in this node pool. The value cannot be greater than the maximum number of nodes allowed for the cluster. | + +------------------+-----------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | type | No | String | Node pool type. If this parameter is left blank, the value **vm** is used by default. | + | | | | | + | | | | - **vm**: ECS | + | | | | - **ElasticBMS**: BMS. This value is valid in CCE Turbo cluster. | + +------------------+-----------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | autoscaling | No | autoscaling object | Auto scaling parameters. | + +------------------+-----------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodeTemplate | Yes | nodeTemplate object | Parameters of the node pool template. | + | | | | | + | | | | If **az** is set to **random**, when you create a node pool or update the number of nodes in a node pool, a scaling task is triggered. The system selects an AZ from all AZs where scaling is allowed to add nodes based on priorities. | + | | | | | + | | | | AZs with a smaller number of existing nodes have a higher priority. If AZs have the same number of nodes, the system selects the AZ based on the AZ sequence. Example: | + | | | | | + | | | | - Creating nodes in a node pool for the first time: Assume that AZ 1, AZ 2, and AZ 3 have available resources. These AZs have the same priority because they have no existing nodes. In this case, AZ 1 is selected by sequence to create all nodes to be added. | + | | | | - Adding nodes to a node pool that already has nodes: | + | | | | | + | | | | - Assume that the node pool has 1 node in AZ 1, 3 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 3 has a higher priority than AZ 2 because AZ 3 has less nodes. Therefore, all nodes to be added will be created in AZ 3. | + | | | | - Assume that the node pool has 1 node in AZ 1, 2 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 2 and AZ 3 have the same priority because they have the same number of nodes. Therefore, all nodes to be added will be created in AZ 2. | + +------------------+-----------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 6** Data structure of the **autoscaling** field + + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=======================+===========+=========+=============================================================================================================================================================================================================================+ + | enable | No | Boolean | Whether to enable auto scaling. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | minNodeCount | No | Integer | Minimum number of nodes after a scale-down if auto scaling is enabled. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | maxNodeCount | No | Integer | Maximum number of nodes after a scale-up if auto scaling is enabled. The value of this parameter must be greater than or equal to that of **minNodeCount** and does not exceed the maximum number of nodes for the cluster. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | scaleDownCooldownTime | No | Integer | Interval during which nodes added after a scale-up will not be deleted, in minutes. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | priority | No | Integer | Node pool weight. A higher weight indicates a higher priority in scale-up. | + +-----------------------+-----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 7** Data structure of the **nodeTemplate** field + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=====================================================================================================================================================================================================================================================================================+ + | k8sTags | No | Object | Kubernetes label, in the format of key-value pair. A maximum of 20 key-value pairs are allowed. | + | | | | | + | | | | - **Key**: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key. | + | | | | - **Value**: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "k8sTags": { | + | | | | "key": "value" | + | | | | } | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | taints | No | Object | Taints added to the created node to set anti-affinity. The following three parameters are contained in every taint: | + | | | | | + | | | | - **Key**: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key. | + | | | | - **Value**: The value can be a string of 1 to 63 characters starting with a letter or digit. Letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. | + | | | | - **Effect**: Set it to **NoSchedule**, **PreferNoSchedule**, or **NoExecute**. | + | | | | | + | | | | Example: | + | | | | | + | | | | .. code-block:: | + | | | | | + | | | | "taints": [ | + | | | | { | + | | | | "key": "status", | + | | | | "value": "unavailable", | + | | | | "effect": "NoSchedule" | + | | | | }, | + | | | | { | + | | | | "key": "looks", | + | | | | "value": "bad", | + | | | | "effect": "NoSchedule" | + | | | | }] | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Example request**: + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "nodepool-name-change", + "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool", + "userPassword": {} + }, + "rootVolume": { + "volumetype": "SATA", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SATA", + "size": 100, + "extendParam": { + "useType": "docker" + } + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef" + } + }, + "billingMode": 0, + "taints": [ + { + "key": "change-taints", + "value": "value1", + "effect": "NoExecute" + } + ], + "k8sTags": { + "change-tag": "value2" + }, + "userTags": [ + { + "key": "change-resource-tag", + "value": "value3" + } + ], + "extendParam": { + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/preInstall": "bHMgLWw=", + "maxPods": 110 + } + }, + "autoscaling": { + "enable": true, + "minNodeCount": 2, + "maxNodeCount": 4, + "scaleDownCooldownTime": 10, + "priority": 2 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + } + }, + "status": { + "currentNode": 0, + "phase": "" + } + } + +Response +-------- + +**Response parameters**: + +:ref:`Table 18 ` describes the response parameters. + +**Response example**: + +.. code-block:: + + { + "kind": "NodePool", + "apiVersion": "v3", + "metadata": { + "name": "nodepool-name-change", + "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7" + }, + "spec": { + "initialNodeCount": 0, + "type": "vm", + "nodeTemplate": { + "flavor": "s6.large.2", + "az": "eu-de-01", + "os": "EulerOS 2.5", + "login": { + "sshKey": "KeyPair-nodepool", + "userPassword": {} + }, + "rootVolume": { + "volumetype": "SATA", + "size": 40 + }, + "dataVolumes": [ + { + "volumetype": "SATA", + "size": 100, + "extendParam": { + "useType": "docker" + } + } + ], + "publicIP": { + "eip": { + "bandwidth": {} + } + }, + "nodeNicSpec": { + "primaryNic": { + "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef" + } + }, + "billingMode": 0, + "taints": [ + { + "key": "change-taints", + "value": "value1", + "effect": "NoExecute" + } + ], + "k8sTags": { + "cce.cloud.com/cce-nodepool": "nodepool-name-change", + "change-tag": "value2" + }, + "userTags": [ + { + "key": "change-resource-tag", + "value": "value3" + } + ], + "extendParam": { + "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear", + "alpha.cce/postInstall": "bHMgLWwK", + "alpha.cce/preInstall": "bHMgLWw=", + "maxPods": 110 + } + }, + "autoscaling": { + "enable": true, + "minNodeCount": 2, + "maxNodeCount": 4, + "scaleDownCooldownTime": 10, + "priority": 2 + }, + "nodeManagement": { + "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3" + } + }, + "status": { + "currentNode": 0, + "phase": "" + } + } + +Status Code +----------- + +:ref:`Table 8 ` describes the status code of this API. + +.. _cce_02_0356__zh-cn_topic_0079614900_table46761928: + +.. table:: **Table 8** Status code + + =========== ================================================ + Status Code Description + =========== ================================================ + 200 The specified node pool is updated successfully. + =========== ================================================ + +For details about error status codes, see :ref:`Status Code `. diff --git a/api-ref/source/apis/cluster_management/waking_up_a_cluster.rst b/api-ref/source/apis/cluster_management/waking_up_a_cluster.rst new file mode 100644 index 0000000..c16a498 --- /dev/null +++ b/api-ref/source/apis/cluster_management/waking_up_a_cluster.rst @@ -0,0 +1,72 @@ +:original_name: cce_02_0375.html + +.. _cce_02_0375: + +Waking Up a Cluster +=================== + +Function +-------- + +This API is used to wake up a hibernated cluster. + +URI +--- + +POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/awake + +.. table:: **Table 1** Path parameters + + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========+===============================================================================================================================+ + | project_id | Yes | String | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | cluster_id | Yes | String | Cluster ID. For details about how to obtain the cluster ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=========================================================================================================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this field is mandatory and must be set to a user token. For details about how to obtain a token, see :ref:`API Usage Guidelines `. | + | | | | | + | | | | Maximum: **16384** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +None + +Example Requests +---------------- + +None + +Example Responses +----------------- + +None + +Status Codes +------------ + ++-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Status Code | Description | ++=============+=============================================================================================================================================================================+ +| 200 | The cluster wakeup job is successfully delivered. Keep querying the cluster status. When the cluster status changes to **Available**, the cluster is woken up successfully. | ++-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Error Codes +----------- + +See :ref:`Error Codes `. diff --git a/api-ref/source/apis/index.rst b/api-ref/source/apis/index.rst new file mode 100644 index 0000000..11883fc --- /dev/null +++ b/api-ref/source/apis/index.rst @@ -0,0 +1,20 @@ +:original_name: cce_02_0103.html + +.. _cce_02_0103: + +APIs +==== + +- :ref:`API Version Query ` +- :ref:`Cluster Management ` +- :ref:`Add-on Management ` +- :ref:`Quota Management ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + api_version_query/index + cluster_management/index + add-on_management/index + quota_management/index diff --git a/api-ref/source/apis/quota_management/index.rst b/api-ref/source/apis/quota_management/index.rst new file mode 100644 index 0000000..05f7667 --- /dev/null +++ b/api-ref/source/apis/quota_management/index.rst @@ -0,0 +1,14 @@ +:original_name: quota_lifecycle_management.html + +.. _quota_lifecycle_management: + +Quota Management +================ + +- :ref:`Querying Resource Quotas ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + querying_resource_quotas diff --git a/api-ref/source/apis/quota_management/querying_resource_quotas.rst b/api-ref/source/apis/quota_management/querying_resource_quotas.rst new file mode 100644 index 0000000..f7755a7 --- /dev/null +++ b/api-ref/source/apis/quota_management/querying_resource_quotas.rst @@ -0,0 +1,113 @@ +:original_name: ShowQuotas.html + +.. _ShowQuotas: + +Querying Resource Quotas +======================== + +Function +-------- + +This API is used to query CCE resource quotas. + +URI +--- + +GET /api/v3/projects/{project_id}/quotas + +.. table:: **Table 1** Path parameters + + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============+===========+========+===============================================================================================================================+ + | project_id | Yes | String | Project ID. For details about how to obtain the project ID, see :ref:`How to Obtain Parameters in the API URI `. | + +------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================+ + | Content-Type | Yes | String | Message body type (format). | + | | | | | + | | | | Default: **application/json** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this field is mandatory and must be set to a user token. | + | | | | | + | | | | Maximum: **16384** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + +-----------+---------------------------------------------------------------------------------------------------------+-------------+ + | Parameter | Type | Description | + +===========+=========================================================================================================+=============+ + | quotas | Array of :ref:`QuotaResource ` objects | Resources | + +-----------+---------------------------------------------------------------------------------------------------------+-------------+ + +.. _showquotas__en-us_topic_0000001242535373_response_quotaresource: + +.. table:: **Table 4** QuotaResource + + +--------------------+---------+------------------------------------------------------------+ + | Parameter | Type | Description | + +====================+=========+============================================================+ + | quotaKey | String | Resource type | + +--------------------+---------+------------------------------------------------------------+ + | quotaLimit | Integer | Quota | + +--------------------+---------+------------------------------------------------------------+ + | used | Integer | Number of created resources | + +--------------------+---------+------------------------------------------------------------+ + | unit | String | Unit | + +--------------------+---------+------------------------------------------------------------+ + | regionId | String | Region ID. This parameter is not returned if not involved. | + +--------------------+---------+------------------------------------------------------------+ + | availabilityZoneId | String | AZ ID. This parameter is not returned if not involved. | + +--------------------+---------+------------------------------------------------------------+ + +Example Requests +---------------- + +None + +Example Responses +----------------- + +**Status code: 200** + +The resource quotas are obtained successfully. + +.. code-block:: + + { + "quotas" : { + "resources" : [ { + "quotaKey" : "cluster", + "quotaLimit" : 20, + "used" : 13, + "unit" : "count" + } ] + } + } + +Status Codes +------------ + +=========== ============================================== +Status Code Description +=========== ============================================== +200 The resource quotas are obtained successfully. +=========== ============================================== + +Error Codes +----------- + +See :ref:`Error Codes `. diff --git a/api-ref/source/appendix/api_permissions.rst b/api-ref/source/appendix/api_permissions.rst new file mode 100644 index 0000000..54d0c3c --- /dev/null +++ b/api-ref/source/appendix/api_permissions.rst @@ -0,0 +1,48 @@ +:original_name: cce_02_0272.html + +.. _cce_02_0272: + +API Permissions +=============== + ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| **Module** | **API** | **Function** | **Permission** | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| Cluster management | GET /api/v3/projects/{project_id}/clusters | Obtaining information about clusters in a specified project | cce:cluster:list | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | POST /api/v3/projects/{project_id}/clusters | Creating a cluster | cce:cluster:create | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | GET /api/v3/projects/{project_id}/clusters/{cluster_id} | Obtaining information about a specified cluster | cce:cluster:get | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert | Obtaining the certificates of a cluster | | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | PUT /api/v3/projects/{project_id}/clusters/{cluster_id} | Updating information about a cluster | cce:cluster:update | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | DELETE /api/v3/projects/{project_id}/clusters/{cluster_id} | Deleting a cluster | cce:cluster:delete | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes | Obtaining information about all nodes in a cluster | cce:node:list | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes | Creating nodes for a cluster | cce:node:create | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} | Updating information about a specified node | cce:node:update | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} | Obtaining information about a specified node | cce:node:get | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} | Deleting a node | cce:node:delete | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | GET /api/v3/projects/{project_id}/jobs/{job_id} | Obtaining information about a specified job | cce:job:get | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools | Obtaining information about all node pools in a specified cluster | cce:nodepool:list | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| Storage management | POST /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims | Creating a PersistentVolumeClaim | cce:storage:create | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | POST /api/v1/cloudpersistentvolumes | Creating a PersistentVolume | | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | DELETE /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims/{name} | Deleting a PersistentVolumeClaim | cce:storage:delete | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | DELETE /api/v1/cloudpersistentvolumes/{name} | Deleting a PersistentVolume | | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| Kubernetes-native APIs | /api/\* | Operating Kubernetes resources | cce:kubernetes:\* | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ +| | /apis/\* | | | ++------------------------+----------------------------------------------------------------------------+-------------------------------------------------------------------+--------------------+ diff --git a/api-ref/source/appendix/creating_a_key_pair.rst b/api-ref/source/appendix/creating_a_key_pair.rst new file mode 100644 index 0000000..76a464a --- /dev/null +++ b/api-ref/source/appendix/creating_a_key_pair.rst @@ -0,0 +1,30 @@ +:original_name: cce_02_0101.html + +.. _cce_02_0101: + +Creating a Key Pair +=================== + +Context +------- + +Create a key pair before you create a container cluster. Key pairs are used for user identity authentication upon login to a node. + +If you have already created a key pair, you do not need to create it again. + +Procedure +--------- + +#. On the management console, click **Service List**, and choose **Computing** > **Elastic Cloud Server** to launch the ECS console. + +#. In the navigation pane, choose **Key Pair**. + +#. Click **Create Key Pair**. + +#. Enter a key pair name and click **OK**. + + The key pair name must be 1 to 64 characters long. Only letters, digits, hyphens (-), and underscores (_) are allowed. + +#. In the displayed dialog box, click **OK**. + + A key file in the **.pem** format is generated and automatically saved to the default directory on your local computer. diff --git a/api-ref/source/appendix/creating_a_vpc_and_subnet.rst b/api-ref/source/appendix/creating_a_vpc_and_subnet.rst new file mode 100644 index 0000000..f335c84 --- /dev/null +++ b/api-ref/source/appendix/creating_a_vpc_and_subnet.rst @@ -0,0 +1,45 @@ +:original_name: cce_02_0100.html + +.. _cce_02_0100: + +Creating a VPC and Subnet +========================= + +Context +------- + +To provide a secure and isolated network environment for CCE, create a VPC before creating a cluster. + +If you have already created a VPC, you do not need to create it again. + +Creating a VPC +-------------- + +#. On the management console, click **Service List**, and choose **Network** > **Virtual Private Cloud** to launch the VPC console. + +#. On the VPC console, click **Create VPC**. + +#. The created VPC is displayed in the list. Click its name and obtain the VPC ID, which will be required in :ref:`Creating a Cluster `. + + + .. figure:: /_static/images/en-us_image_0233731209.png + :alt: **Figure 1** Obtaining the VPC ID + + + **Figure 1** Obtaining the VPC ID + +Creating a Subnet +----------------- + +#. On the management console, click **Service List**, and choose **Network** > **Virtual Private Cloud** to launch the VPC console. + +#. In the navigation pane, choose **Subnets**. On the displayed page, click **Create Subnets**. + +#. After the subnet is created, click its name to obtain the network ID, which will be required in :ref:`Creating a Cluster `. + + + .. figure:: /_static/images/en-us_image_0233732535.png + :alt: **Figure 2** Obtaining the network ID of a subnet + + + **Figure 2** Obtaining the network ID of a subnet diff --git a/api-ref/source/appendix/error_codes.rst b/api-ref/source/appendix/error_codes.rst new file mode 100644 index 0000000..316c80d --- /dev/null +++ b/api-ref/source/appendix/error_codes.rst @@ -0,0 +1,115 @@ +:original_name: cce_02_0250.html + +.. _cce_02_0250: + +Error Codes +=========== + +If an error occurs in API calling, no result is returned. Identify the cause based on the error code of each API. If an error occurs in API calling, HTTP status code 4\ *xx* or 5\ *xx* is returned. The response body contains the specific error code and information. + +Format of an Error Response Body +-------------------------------- + +If an error occurs during API calling, an error code and a message will be displayed. The following shows an error response body. + +.. code-block:: + + { + "errorMessage": "Authorization failed.", + "errorCode": "CCE.01401001", + } + +In the preceding information, **errorCode** is an error code, and **errorMessage** describes the error. + +Error Code Description +---------------------- + ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| Status Code | Error Code | Error Message | Description | Troubleshooting | ++=============+==============+=========================================================+===============================================================+====================================================================================================================+ +| 400 | CCE.01400001 | Invalid request. | Invalid request body. | Modify the request body based on the returned message and the CCE API documentation, or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400002 | Subnet not found in the VPC. | No subnet is found in the VPC. | Check whether the subnet in the request body is in the corresponding VPC. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400003 | IPv6 not supported for the subnet. | The subnet does not support IPv6. | Use a subnet that supports IPv6. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400004 | No available flavors for master nodes. | There is no available flavor for the master node. | Change to another available cluster flavor or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400005 | Container network CIDR blocks conflict. | The container CIDR block conflicts with the existing one. | Check the container CIDR block based on the returned message. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400006 | Content type not supported. | The content type is invalid. | Use the supported content type by referring to the CCE API documentation. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400007 | Insufficient cluster quota. | Insufficient cluster quota. | Submit a service ticket to increase the cluster quota. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400008 | Insufficient server quota | Insufficient ECS quota. | Submit a service ticket to increase the ECS quota. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400009 | Insufficient CPU quota. | Insufficient ECS CPU quota. | Submit a service ticket to increase the ECS CPU quota. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400010 | Insufficient memory quota. | Insufficient ECS memory quota. | Submit a service ticket to increase the ECS memory quota. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400011 | Insufficient security group quota. | Insufficient security group quota. | Submit a service ticket to increase the security group quota. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400012 | Insufficient EIP quota. | Insufficient EIP quota. | Submit a service ticket to increase the EIP quota. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400013 | Insufficient volume quota. | Insufficient disk quota. | Submit a service ticket to increase the disk quota based on the returned message. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400014 | Excessive nodes in the cluster. | The number of nodes exceeds the cluster scale. | Submit a service ticket to change the cluster flavor. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400015 | Version not supported. | The cluster version is not supported. | Create a cluster of the supported version based on the returned message. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400016 | Current cluster type does not support this node flavor. | The current cluster type does not support this node flavor. | Use the correct node flavor based on the returned message. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400017 | No available container CIDR block found. | No available container CIDR block is found. | Use a correct container CIDR block based on the returned message. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400018 | This type of OS cannot be created in this CCE version. | The current CCE version does not support this type of OS. | Use a supported OS based on the returned message. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400019 | Insufficient resource tenant quota. | The quota of the resource tenant is insufficient. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400020 | Insufficient VPC quota. | Insufficient VPC quota. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400021 | No available flavors for nodes. | There is no available flavor for the node. | Change to another available node flavor or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.01400022 | No available node volumes for nodes. | There is no available EVS disk flavor for the node. | Change to another available EVS disk flavor or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.02400001 | Invalid request. | Invalid request body. | Modify the request body based on the returned message and the CCE API documentation, or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.03400001 | Invalid request. | Invalid request body. | Modify the request body based on the returned message and the CCE API documentation, or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 400 | CCE.03400002 | Missing access key. | The access key is missing. | Ensure that the version of the installed or upgraded storage add-on is correct, or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 401 | CCE.01401001 | Authorization failed. | Authentication failed. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 401 | CCE.02401001 | Authorization failed. | Authentication failed. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 401 | CCE.03401001 | Authorization failed. | Authentication failed. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 403 | CCE.01403001 | Forbidden. | Access denied. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 403 | CCE.02403001 | Forbidden. | Access denied. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 403 | CCE.03403001 | Forbidden. | Access denied. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 404 | CCE.01404001 | Resource not found. | Resources not found. | Check whether the resource to be accessed has been deleted. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 404 | CCE.02404001 | Resource not found. | Resources not found. | Check whether the resource to be accessed has been deleted. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 404 | CCE.03404001 | Resource not found. | Resources not found. | Check whether the resource to be accessed has been deleted. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 409 | CCE.01409001 | The resource already exists. | The resource already exists. | Delete the resource and try again. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 409 | CCE.01409002 | Resource updated with out-of-date version. | An out-of-date version is used to update the target resource. | Ensure that the target resource version is the latest one or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 409 | CCE.02409001 | The resource already exists. | The resource already exists. | Delete the resource and try again. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 409 | CCE.03409001 | Addon instance has installed. | The add-on instance has been installed. | Delete the add-on instance and install it again. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 429 | CCE.01429002 | Resource locked by other requests. | The resource is locked by another request. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 429 | CCE.02429001 | The throttling threshold has been reached. | The maximum number of requests has been reached. | Reduce the frequency of sending requests or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 500 | CCE.01500001 | Internal error. | Internal error. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 500 | CCE.02500001 | Internal error. | Internal error. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ +| 500 | CCE.03500001 | Internal error. | Internal error. | Rectify the fault based on the returned message or contact technical support. | ++-------------+--------------+---------------------------------------------------------+---------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/appendix/how_to_obtain_parameters_in_the_api_uri.rst b/api-ref/source/appendix/how_to_obtain_parameters_in_the_api_uri.rst new file mode 100644 index 0000000..4bfd538 --- /dev/null +++ b/api-ref/source/appendix/how_to_obtain_parameters_in_the_api_uri.rst @@ -0,0 +1,66 @@ +:original_name: cce_02_0271.html + +.. _cce_02_0271: + +How to Obtain Parameters in the API URI +======================================= + +project_id +---------- + +#. Log in to the CCE console, click the username in the upper right corner, and select **My Credentials**. + +#. On the **Projects** tab page, obtain the project ID of the corresponding region. + + + .. figure:: /_static/images/en-us_image_0203982493.png + :alt: **Figure 1** Viewing project IDs + + + **Figure 1** Viewing project IDs + +cluster_id +---------- + +#. Log in to the CCE console, and choose **Resource Management** > **Clusters** from the navigation pane. + +#. Click the name of the created cluster. The cluster details page is displayed. Obtain the cluster ID. + + + .. figure:: /_static/images/en-us_image_0233732613.png + :alt: **Figure 2** Obtaining the cluster ID + + + **Figure 2** Obtaining the cluster ID + +node_id +------- + +#. Log in to the CCE console, and choose **Resource Management** > **Nodes** from the navigation pane. + +#. Click the node name to go to the node details page and obtain the node ID. + + + .. figure:: /_static/images/en-us_image_0279177365.png + :alt: **Figure 3** Obtaining the node ID + + + **Figure 3** Obtaining the node ID + +job_id +------ + +#. Log in to the CCE console, and choose **Resource Management** > **Clusters** or choose **Resource Management** > **Nodes** from the navigation pane. + +#. For example, on the **Clusters** page, click the status of the cluster that is being created. The cluster creation job details page is displayed. + +#. Obtain the job ID. + + If you are using Google Chrome, press **F12**. On the pane displayed on the right, click the **Network** tab. Enter **jobs** in the **Filter** text box to filter the job list. Select a job from the list on the left and click **Preview**. The UID field indicates the UID of the job. + + + .. figure:: /_static/images/en-us_image_0203982464.png + :alt: **Figure 4** Obtaining the job ID + + + **Figure 4** Obtaining the job ID diff --git a/api-ref/source/appendix/how_to_use_elb_in_a_cluster.rst b/api-ref/source/appendix/how_to_use_elb_in_a_cluster.rst new file mode 100644 index 0000000..c10a185 --- /dev/null +++ b/api-ref/source/appendix/how_to_use_elb_in_a_cluster.rst @@ -0,0 +1,140 @@ +:original_name: cce_02_0087.html + +.. _cce_02_0087: + +How to Use ELB in a Cluster +=========================== + +This section describes how to use the Elastic Load Balancer (ELB) in a cluster created by CCE. + +Procedure +--------- + +Create a Service. + +.. note:: + + Before enabling sticky session, ensure that the following conditions are met: + + - The workload protocol is TCP. + - Anti-affinity has been configured between pods of the workload. That is, all pods of the workload are deployed on different nodes. + +Automatically creating an ELB: + +.. code-block:: + + apiVersion: v1 + kind: Service + metadata: + annotations: + kubernetes.io/elb.class: union + kubernetes.io/session-affinity-mode: SOURCE_IP + kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 + kubernetes.io/elb.autocreate: "{\"type\":\"public\",\"bandwidth_name\":\"cce-bandwidth-1551163379627\",\"bandwidth_chargemode\":\"traffic\",\"bandwidth_size\":5,\"bandwidth_sharetype\":\"PER\",\"eip_type\":\"5_bgp\",\"name\":\"james\"}" + labels: + app: nginx + name: nginx + spec: + externalTrafficPolicy: Local + ports: + - name: service0 + port: 80 + protocol: TCP + targetPort: 80 + selector: + app: nginx + type: LoadBalancer + +Using an existing ELB: + +.. code-block:: + + apiVersion: v1 + kind: Service + metadata: + annotations: + kubernetes.io/elb.class: union + kubernetes.io/session-affinity-mode: SOURCE_IP + kubernetes.io/elb.id: 3c7caa5a-a641-4bff-801a-feace27424b6 + kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 + labels: + app: nginx + name: nginx + spec: + loadBalancerIP: 10.78.42.242 + externalTrafficPolicy: Local + ports: + - name: service0 + port: 80 + protocol: TCP + targetPort: 80 + selector: + app: nginx + type: LoadBalancer + +.. table:: **Table 1** Key parameters + + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=====================================+=================================================================+==========================================================================================================================================================================================================================================================================================================================+ + | kubernetes.io/elb.class | String | Mandatory and must be set to **union** if an enhanced load balancer is in use. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetes.io/session-affinity-mode | String | Optional. If sticky session is enabled, add this parameter. | + | | | | + | | | The value **SOURCE_IP** indicates that listeners ensure sticky session based on source IP addresses. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetes.io/elb.id | String | Optional. This parameter is mandatory if an existing ELB is used. | + | | | | + | | | It indicates the ID of an enhanced load balancer. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetes.io/elb.subnet-id | String | Optional. This parameter is mandatory only if a load balancer will be automatically created. For clusters of v1.11.7-r0 or later, this parameter can be left unspecified. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | kubernetes.io/elb.autocreate | :ref:`elb.autocreate ` object | Optional. This parameter is mandatory if a public network load balancer will be automatically created. The system will create an enhanced load balancer and an EIP. This parameter is also mandatory if a private network load balancer will be automatically created. The system will create an enhanced load balancer. | + | | | | + | | | **Example:** | + | | | | + | | | - Value for a public network load balancer that is automatically created: "{\"type\":\"public\",\"bandwidth_name\":\"cce-bandwidth-1551163379627\",\"bandwidth_chargemode\":\"traffic\",\"bandwidth_size\":5,\"bandwidth_sharetype\":\"PER\",\"eip_type\":\"5_bgp\",\"name\":\"james\"}" | + | | | - Value for a private network load balancer that is automatically created: "{\"type\":\"inner\"}" | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | loadBalancerIP | String | Private IP address of a private network load balancer or public IP address of a public network load balancer. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | externalTrafficPolicy | String | Optional. If sticky session is enabled, add this parameter so requests are transferred to a fixed node. If a LoadBalancer Service with this parameter set to **Local** is created for a workload, the workload can be accessed only when the client is installed on the same node as the server. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | port | Integer | Access port that is registered on the load balancer and mapped to the cluster-internal IP address. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | targetPort | String | Container port on the CCE console. | + +-------------------------------------+-----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _cce_02_0087__table19417184671919: + +.. table:: **Table 2** Data structure of the **elb.autocreate** field + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=============================================================================================================================+ + | name | String | Name of the load balancer that is automatically created. | + | | | | + | | | The value is a string of 1 to 64 characters that consist of letters, digits, underscores (_), and hyphens (-). | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | type | String | Network type of the load balancer. | + | | | | + | | | - **public**: public network load balancer. | + | | | - **inner**: private network load balancer. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | bandwidth_name | String | Bandwidth name. The default value is **cce-bandwidth-*****\***. | + | | | | + | | | The value is a string of 1 to 64 characters that consist of letters, digits, underscores (_), hyphens (-), and periods (.). | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | bandwidth_chargemode | String | Bandwidth billing mode. | + | | | | + | | | The value is **traffic**, indicating that the billing is based on traffic. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | bandwidth_size | Integer | Bandwidth size. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | bandwidth_sharetype | String | Bandwidth sharing mode. | + | | | | + | | | - **PER**: dedicated bandwidth. | + | | | - **WHOLE**: shared bandwidth. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | eip_type | String | EIP type. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/appendix/index.rst b/api-ref/source/appendix/index.rst new file mode 100644 index 0000000..e0b08ff --- /dev/null +++ b/api-ref/source/appendix/index.rst @@ -0,0 +1,34 @@ +:original_name: cce_02_0083.html + +.. _cce_02_0083: + +Appendix +======== + +- :ref:`Patch Request Method Operation Description ` +- :ref:`Patch Request Method Operation Example ` +- :ref:`Status Code ` +- :ref:`Error Codes ` +- :ref:`Obtaining a Project ID ` +- :ref:`Obtaining the Account ID ` +- :ref:`How to Use ELB in a Cluster ` +- :ref:`How to Obtain Parameters in the API URI ` +- :ref:`API Permissions ` +- :ref:`Creating a VPC and Subnet ` +- :ref:`Creating a Key Pair ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + patch_request_method_operation_description + patch_request_method_operation_example + status_code + error_codes + obtaining_a_project_id + obtaining_the_account_id + how_to_use_elb_in_a_cluster + how_to_obtain_parameters_in_the_api_uri + api_permissions + creating_a_vpc_and_subnet + creating_a_key_pair diff --git a/api-ref/source/appendix/obtaining_a_project_id.rst b/api-ref/source/appendix/obtaining_a_project_id.rst new file mode 100644 index 0000000..ce852bb --- /dev/null +++ b/api-ref/source/appendix/obtaining_a_project_id.rst @@ -0,0 +1,59 @@ +:original_name: cce_02_0341.html + +.. _cce_02_0341: + +Obtaining a Project ID +====================== + +Obtaining the Project ID by Calling an API +------------------------------------------ + +You can obtain the project ID by calling the API `used to query project information based on the specified criteria `__. + +The API used to obtain a project ID is **GET https://**\ *{Endpoint}*\ **/v3/projects**, where *{Endpoint}* indicates the IAM endpoint. You can obtain the IAM endpoint from `Regions and Endpoints `__. + +The following is an example response. The value of **id** in the **projects** field is the project ID. + +.. code-block:: + + { + "projects": [ + { + "domain_id": "65382450e8f64ac0870cd180d14e684b", + "is_domain": false, + "parent_id": "65382450e8f64ac0870cd180d14e684b", + "name": "xxxxxxxx", + "description": "", + "links": { + "next": null, + "previous": null, + "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99" + }, + "id": "a4a5d4098fb4474fa22cd05f897d6b99", + "enabled": true + } + ], + "links": { + "next": null, + "previous": null, + "self": "https://www.example.com/v3/projects" + } + } + +Obtaining a Project ID from the Console +--------------------------------------- + +A project ID is required for some URLs when an API is called. To obtain a project ID, perform the following operations: + +#. Log in to the management console. + +#. Click the username and choose **My Credentials** from the drop-down list. + + On the **My Credentials** page, view project IDs in the project list. + + + .. figure:: /_static/images/en-us_image_0203982368.png + :alt: **Figure 1** Obtaining the Project ID + + + **Figure 1** Obtaining the Project ID diff --git a/api-ref/source/appendix/obtaining_the_account_id.rst b/api-ref/source/appendix/obtaining_the_account_id.rst new file mode 100644 index 0000000..074f861 --- /dev/null +++ b/api-ref/source/appendix/obtaining_the_account_id.rst @@ -0,0 +1,21 @@ +:original_name: cce_02_0342.html + +.. _cce_02_0342: + +Obtaining the Account ID +======================== + +An account ID is required for some URLs when an API is called. To obtain an account ID, perform the following operations: + +#. Sign up and log in to the management console. + +#. Click the username in the upper right corner and choose **My Credentials** from the drop-down list. + + On the **My Credentials** page, view account IDs in the project list. + + + .. figure:: /_static/images/en-us_image_0233731004.png + :alt: **Figure 1** Obtaining the Account ID + + + **Figure 1** Obtaining the Account ID diff --git a/api-ref/source/appendix/patch_request_method_operation_description.rst b/api-ref/source/appendix/patch_request_method_operation_description.rst new file mode 100644 index 0000000..30cb6f1 --- /dev/null +++ b/api-ref/source/appendix/patch_request_method_operation_description.rst @@ -0,0 +1,57 @@ +:original_name: cce_02_0085.html + +.. _cce_02_0085: + +Patch Request Method Operation Description +========================================== + +Kubernetes APIs use the HTTP header "Content-Type" to distinguish between patch request method operations. + +Operation Description +--------------------- + +Currently, three types of patch request method operations are supported: + +#. **JSON Patch, Content-Type: application/json-patch+json** + + According to RFC 6902, JSON patch operations indicate a series of operations performed on resource objects. The following provides an example of the JSON patch operation: + + .. code-block:: + + { + "op": "add", + "path": "/spec/containers/0/image", + "value": "busybox:latest" + } + + In the preceding example: + + - "op" indicates a series of operations performed on resource objects, and it contains the following operations: + + add + + replace + + remove (not supported) + + move (not supported) + + copy (not supported) + + test (not supported) + + - "path" indicates the path to the to-be-operated resource object. + + For example, **/spec/containers/0/image** indicates that the object to be operated is **spec.containers[0].image**. + + - "value" indicates the to-be-modified value. + +#. **Merge Patch, Content-Type: application/merge-patch+json** + + According to RFC 7386, merge patch contains some description of a resource object (namely, JSON object). The JSON object is submitted to the server end, and merges with the current object of the server end (that is, replaces the list field of the current resource object) to form a new object. + +#. **Strategic Merge Patch, Content-Type: application/strategic-merge-patch+json** + + Strategic merge patch is used to add legal metadata to API objects, and uses new metadata to determine which list should be merged and which should not. The current metadata is used as the structure labels. + +For more information about the difference between **Merge Patch** and **Strategic Merge Patch**, see :ref:`Patch Request Method Operation Example `. diff --git a/api-ref/source/appendix/patch_request_method_operation_example.rst b/api-ref/source/appendix/patch_request_method_operation_example.rst new file mode 100644 index 0000000..2adb3e7 --- /dev/null +++ b/api-ref/source/appendix/patch_request_method_operation_example.rst @@ -0,0 +1,279 @@ +:original_name: cce_02_0086.html + +.. _cce_02_0086: + +Patch Request Method Operation Example +====================================== + +This section provides examples of **Merge Patch** and **Strategic Merge Patch** method operations. + +Operation Example +----------------- + +By way of example, **Merge Patch** and **Strategic Merge Patch** method operations are performed at the time of creating a ReplicationController resource object. + +**Sample request** + +.. code-block:: + + { + "apiVersion": "v1", + "kind": "ReplicationController", + "metadata": { + "name": "frontend-controller" + }, + "spec": { + "replicas": 2, + "selector": { + "app": "nginx" + }, + "template": { + "metadata": { + "labels": { + "app": "nginx" + } + }, + "spec": { + "containers": [ + { + "name": "redis", + "image": "redis:latest", + "ports": [ + { + "containerPort": 80 + } + ] + } + ] + } + } + } + } + +**Sample response** + +.. code-block:: + + { + "kind": "ReplicationController", + "apiVersion": "v1", + "metadata": { + "name": "frontend-controller", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/replicationcontrollers/nginx-controller", + "uid": "549b2234-5d46-11e6-aeb9-286ed488fafe", + "resourceVersion": "4110", + "generation": 1, + "creationTimestamp": "2016-08-08T08:58:52Z", + "labels": { + "app": "nginx" + } + }, + "spec": { + "replicas": 2, + "selector": { + "app": "nginx" + }, + "template": { + "metadata": { + "creationTimestamp": null, + "labels": { + "app": "nginx" + } + }, + "spec": { + "containers": [ + { + "name": "redis", + "image": "redis:latest", + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "Always" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "securityContext": {} + } + } + }, + "status": { + "replicas": 0 + } + } + +- If you use **Merge Patch** to add a container to the **template** field of a specified ReplicationController, the list of existing containers is then replaced by the newly added container. + + **Merge Patch request** + + .. code-block:: + + { + "spec": { + "template": { + "spec": { + "containers": [ + { + "name": "hello-world", + "image": "busybox:latest" + } + ] + } + } + } + } + + **Merge Patch response** + + .. code-block:: + + { + "kind": "ReplicationController", + "apiVersion": "v1", + "metadata": { + "name": "frontend-controller", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/replicationcontrollers/nginx-controller", + "uid": "549b2234-5d46-11e6-aeb9-286ed488fafe", + "resourceVersion": "4159", + "generation": 2, + "creationTimestamp": "2016-08-08T08:58:52Z", + "labels": { + "app": "nginx" + } + }, + "spec": { + "replicas": 2, + "selector": { + "app": "nginx" + }, + "template": { + "metadata": { + "creationTimestamp": null, + "labels": { + "app": "nginx" + } + }, + "spec": { + "containers": [ + { + "name": "hello-world", + "image": "busybox:latest", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "Always" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "securityContext": {} + } + } + }, + "status": { + "replicas": 2, + "fullyLabeledReplicas": 2, + "observedGeneration": 1 + } + } + + The **containers** are replaced by the newly added container. + +- If you use **Strategic Merge Patch** to add metadata to a resource object, the new metadata then determines which list should b merged and which should not. + + **Strategic Merge Patch request** + + .. code-block:: + + { + "spec": { + "template": { + "spec": { + "containers": [ + { + "name": "hello-world", + "image": "busybox:latest" + } + ] + } + } + } + }' + + **Strategic Merge Patch response** + + .. code-block:: + + { + "kind": "ReplicationController", + "apiVersion": "v1", + "metadata": { + "name": "frontend-controller", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/replicationcontrollers/nginx-controller", + "uid": "f2e048bb-5d46-11e6-aeb9-286ed488fafe", + "resourceVersion": "4250", + "generation": 2, + "creationTimestamp": "2016-08-08T09:03:18Z", + "labels": { + "app": "nginx" + } + }, + "spec": { + "replicas": 2, + "selector": { + "app": "nginx" + }, + "template": { + "metadata": { + "creationTimestamp": null, + "labels": { + "app": "nginx" + } + }, + "spec": { + "containers": [ + { + "name": "redis", + "image": "redis:latest", + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "Always" + }, + { + "name": "hello-world", + "image": "busybox:latest", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "Always" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "securityContext": {} + } + } + }, + "status": { + "replicas": 2, + "fullyLabeledReplicas": 2, + "observedGeneration": 1 + } + } + + The **containers** merge with the new content according to the value of the **name** field. diff --git a/api-ref/source/appendix/status_code.rst b/api-ref/source/appendix/status_code.rst new file mode 100644 index 0000000..9a1b2d2 --- /dev/null +++ b/api-ref/source/appendix/status_code.rst @@ -0,0 +1,120 @@ +:original_name: cce_02_0084.html + +.. _cce_02_0084: + +Status Code +=========== + +:ref:`Table 1 ` describes the status codes. + +.. _cce_02_0084__t20791fa3900d4d2d8289da35135eca33: + +.. table:: **Table 1** Status code + + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Status Code | Code | Description | + +=======================+=================================+==================================================================================================================================================================================================================================================================================================================================================================+ + | 100 | Continue | The server has received the initial part of the request and the client should continue to send the remaining part. | + | | | | + | | | It is issued on a provisional basis while request processing continues. It alerts the client to wait for a final response. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 101 | Switching Protocols | The requester has asked the server to switch protocols and the server has agreed to do so. The target protocol must be more advanced than the source protocol. | + | | | | + | | | For example, the current HTTP protocol is switched to a later version of HTTP. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 201 | Created | The request has been fulfilled, resulting in the creation of a new resource. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 202 | Accepted | The request has been accepted for processing, but the processing has not been completed. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 203 | Non-Authoritative Information | The server successfully processed the request, but is returning information that may be from another source. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 204 | NoContent | The server has successfully processed the request, but does not return any content. | + | | | | + | | | The status code is returned in response to an HTTP OPTIONS request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 205 | Reset Content | The server has successfully processed the request, but does not return any content. Unlike a 204 response, this response requires that the requester reset the content. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 206 | Partial Content | The server has successfully processed a part of the GET request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 300 | Multiple Choices | There are multiple options for the requested resource. For example, this code could be used to present a list of resource characteristics and addresses from which the client such as a browser may choose. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 301 | Moved Permanently | This and all future requests should be permanently directed to the given URI indicated in this response. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 302 | Found | The requested resource was temporarily moved. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 303 | See Other | The response to the request can be found under a different URI, and should be retrieved using a GET or POST method. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 304 | Not Modified | The requested resource has not been modified. In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 305 | Use Proxy | The requested resource is available only through a proxy. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 306 | Unused | This HTTP status code is no longer used. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | BadRequest | The request is invalid. | + | | | | + | | | The client should modify the request instead of re-initiating it. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 401 | Unauthorized | The authorization information provided by the client is incorrect or invalid. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 402 | Payment Required | This status code is reserved for future use. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | Forbidden | The server has received the request and understood it, but the server is refusing to respond to it. | + | | | | + | | | The client should modify the request instead of re-initiating it. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 404 | NotFound | The requested resource cannot be found. | + | | | | + | | | The client should modify the request instead of re-initiating it. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 405 | MethodNotAllowed | A request method is not supported for the requested resource. | + | | | | + | | | The client should modify the request instead of re-initiating it. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 406 | Not Acceptable | The server cannot fulfill the request based on the content characteristics of the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 407 | Proxy Authentication Required | This code is similar to 401, but indicates that the client must first authenticate itself with the proxy. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 408 | Request Time-out | The server timed out waiting for the request. | + | | | | + | | | The client may re-initiate the request without modifications at any later time. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 409 | Conflict | The request cannot be processed due to a conflict. | + | | | | + | | | This status code indicates that the resource that the client attempts to create already exits, or the request fails to be processed because of the update of the conflict request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 410 | Gone | The requested resource cannot be found. | + | | | | + | | | The status code indicates that the requested resource has been deleted permanently. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 411 | Length Required | The server refused to process the request because the request does not specify the length of its content. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 412 | Precondition Failed | The server does not meet one of the preconditions that the requester puts on the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 413 | Request Entity Too Large | The server refuses to process a request because the request entity is too large. The server may disable the connection to prevent the client from sending requests consecutively. If the server temporarily cannot process the request, the response will contain a Retry-After header field. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 414 | Request-URI Too Large | The URI provided was too long for the server to process. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 415 | Unsupported Media Type | The server does not support the media type in the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 416 | Requested range not satisfiable | The requested range is invalid. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 417 | Expectation Failed | The server fails to meet the requirements of the Expect request-header field. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 422 | UnprocessableEntity | The request is well-formed but is unable to be processed due to semantic errors. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 429 | TooManyRequests | The client sends excessive requests to the server within a given time (exceeding the limit on the access frequency of the client), or the server receives excessive requests within a given time (beyond its processing capability). In this case, the client should repeat requests after the time specified in the Retry-After header of the response expires. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 500 | InternalServerError | The server is able to receive the request but it could not understand the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 501 | Not Implemented | The server does not support the requested function. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 502 | Bad Gateway | The server acting as a gateway or proxy receives an invalid response from a remote server. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 503 | ServiceUnavailable | The requested service is invalid. | + | | | | + | | | The client should modify the request instead of re-initiating it. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 504 | ServerTimeout | The server could not return a timely response. The response will reach the client only if the request carries a timeout parameter. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 505 | HTTP Version not supported | The server does not support the HTTP protocol version used in the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/change_history.rst b/api-ref/source/change_history.rst new file mode 100644 index 0000000..d18bab5 --- /dev/null +++ b/api-ref/source/change_history.rst @@ -0,0 +1,166 @@ +:original_name: cce_02_0273.html + +.. _cce_02_0273: + +Change History +============== + +.. table:: **Table 1** Change history + + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Date | Revision | + +===================================+============================================================================================================================================================================+ + | 2022-05-24 | - Supported clusters of v1.23. | + | | - Add a note about how to automatically install ICAgent. For details, see :ref:`Creating a Cluster `. | + | | - The native APIs of Kubernetes will no longer be maintained. For details, see :ref:`Overview `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2022-03-24 | Supported clusters of v1.21. | + | | | + | | - The cluster certificate SAN can be customized. For details, see **customSan** field in :ref:`Table 5 `. | + | | - Added the **cidrs** field in :ref:`Table 5 `. | + | | - Added :ref:`Quota Management `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2022-02-17 | - Supported the creation of CCE Turbo Cluster. | + | | - Updated the request method to obtain cluster certificates. For details, see :ref:`Obtaining Cluster Certificates `. | + | | - Added the **category** and **platformVersion** field in :ref:`Table 5 `. | + | | - Added :ref:`Hibernating a Cluster ` and :ref:`Waking Up a Cluster `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-11-06 | Updated **flavor** in :ref:`Creating a Cluster ` and :ref:`Reading a Specified Cluster `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-09-17 | - Added the description of **alpha.cce/NodeImageID** and **DockerLVMConfigOverride** in :ref:`Table 8 `. | + | | - Added the description of **type** in :ref:`Table 5 `. | + | | - Updated the example request in :ref:`Creating a Node Pool `. | + | | - Added the description of **custom** in :ref:`Table 5 `. | + | | - Updated :ref:`Request `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-09-04 | Updated :ref:`API Usage Guidelines `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-08-31 | - Added an example request in :ref:`Listing All Node Pools in a Specified Cluster `. | + | | - Updated :ref:`Creating a Node Pool `. | + | | - Updated :ref:`Updating a Specified Node Pool `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-07-30 | - Supported clusters of v1.17.9. | + | | - Supported clusters of v1.15.11. | + | | - Added :ref:`Creating a Node Pool `. | + | | - Added :ref:`Querying a Specified Node Pool `. | + | | - Added :ref:`Updating a Specified Node Pool `. | + | | - Added :ref:`Deleting a Node Pool `. | + | | - Added :ref:`Add-on Management `. | + | | - Deleted the description and configurations of BMS clusters. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-05-08 | - Updated :ref:`API Usage Guidelines `. | + | | - Added **alpha.cce/fixPoolMask**, **kubernetes.io/cpuManagerPolicy**, and **upgradefrom** in :ref:`Table 13 `. | + | | - Added **ipv6enable** and **eniNetwork** in :ref:`Table 16 `. | + | | - Added **SecurityGroup** in :ref:`Table 17 `. | + | | - Added **ipv6enable** and **eniNetwork** in :ref:`Table 4 `. | + | | - Added :ref:`Table 6 ` in :ref:`Reading a Specified Node `. | + | | - Added **extendParam** in Table 10. | + | | - Updated Table 19. | + | | - Updated **os** in :ref:`Table 5 `. | + | | - Updated the request and response examples in :ref:`Cluster Management `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-04-14 | - Updated :ref:`API Usage Guidelines `. | + | | - Added **kubeProxyMode** in :ref:`Table 5 `. | + | | - Added **authenticatingProxy** in :ref:`Table 7 `. | + | | - Added **clusterExternalIP** and deleted **kubeProxyMode** in :ref:`Table 13 `. | + | | - Updated the example request in :ref:`Creating a Cluster `. | + | | - Updated **extendParam** in :ref:`Table 21 `. | + | | - Updated **spec** in :ref:`Table 3 `. | + | | - Added **description** in :ref:`Table 4 `. | + | | - Deleted **patchVersion** in :ref:`Table 10 `. | + | | - Added **publicKey** in :ref:`Table 21 `. | + | | - Added **initialNodeCount** in Table 6. | + | | - Added **minNodeCount** in Table 17. | + | | - Updated Table 19. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-03-25 | - Updated :ref:`Listing All Node Pools in a Specified Cluster `. | + | | - Supported clusters of v1.15.6. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-02-27 | - Updated :ref:`API Usage Guidelines `. | + | | - Deleted the description of Add-on Management APIs. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-02-25 | Updated :ref:`API Usage Guidelines `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-02-24 | Updated :ref:`Cluster Management `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-02-21 | Updated Table 7. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2020-02-10 | Updated :ref:`Listing All Node Pools in a Specified Cluster `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-12-03 | - Revised descriptions according to the suggestions raised in UAT. | + | | - Deleted section 2.3 Storage Management. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-11-20 | Updated :ref:`API Usage Guidelines `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-11-12 | Revised descriptions according to the suggestions raised in UAT. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-10-30 | - Revised descriptions to indicate support for creating Kubernetes clusters 1.13.10. | + | | - Updated :ref:`API Usage Guidelines `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-08-21 | Added the description of **authentication** :ref:`Table 5 `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-07-29 | Updated the example response in :ref:`Listing All Node Pools in a Specified Cluster `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-07-25 | Allows users to configure the command lines that will be injected into a node when adding a node. For details, see :ref:`Table 8 `. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-07-11 | Revised descriptions according to the suggestions raised in UAT. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-06-30 | - Added the description of **SecurityGroup** in 6.2.2-Table Data structure of the hostNetwork field in 6.2.2-Obtaining Information About a Specified Cluster. | + | | - Added 6.2.16-Obtaining Information About All Node Pools in a Specified Cluster. | + | | - Allowed users to assign a cluster EIP when creating a cluster. For details, see 6.2.1-Creating a Container Cluster. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-05-30 | - Added **multi_AZ** to the sample API request and response in 6.2.1-Creating a Container Cluster. | + | | - Revised descriptions to indicate support for creating Kubernetes clusters 1.9.10. | + | | - Revised descriptions in the previous issue. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-04-29 | Added 6.1-API Version Query. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-03-13 | Revised descriptions to indicate support for creating Kubernetes clusters 1.11.3. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-03-05 | Revised descriptions according to the suggestions raised in UAT. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-02-25 | Revised descriptions according to the suggestions raised in UAT. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-02-15 | Revised descriptions according to the suggestions raised in UAT. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-01-24 | - Revised the example response in 6.2.14-Querying the Access Information of a Specified Cluster and added 6.2.14-Table Data structure of the bandwidth field. | + | | - Deleted description about **elasticIp** in 6.2.15-Modifying the Access Information of a Specified Cluster. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2019-01-03 | - Added 6.2.14-Querying the Access Information of a Specified Cluster and 6.2.15-Modifying the Access Information of a Specified Cluster. | + | | - Revised descriptions in the previous issue. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-11-29 | Added the underlay_ipvlan container network type in 6.2.1-Table Data structure of the containerNetwork field. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-11-07 | Revised descriptions in the previous issue. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-10-10 | Revised descriptions in the previous issue. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-09-15 | - Added the description of the **dedicated_host_id** in 2.7-Table Data structure of the spec field. | + | | - Modified the description of the **type** in 7.3.1-Table Data structure of the spec field. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-09-05 | - Modified the directory structure. | + | | - Added the procedure for creating BMS clusters. | + | | - Added the description of creating a high-speed network for a BMS cluster in 4.5-(Optional) Creating a High-Speed Network. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-07-25 | - Deleted the description of Kubernetes 1.7 APIs. | + | | - Deleted the procedure for creating BMS clusters. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-07-06 | Added the **external_otc** parameter in 6.2.2-Table Data structure of the endpoint field, and updated related examples. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-06-26 | - Added the **az** parameter in 6.2.1-Table Data structure of the spec field. | + | | - Corrected the URIs in 7.9.4-Deleting All Deployments. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-06-21 | Revised descriptions in the previous issue. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-05-26 | - Split the CCE2.0 API Reference into two manuals: CCE2.0 API Reference (Kubernetes) and CCE2.0 API Reference (CCE). | + | | | + | | The former manual described native Kubernetes APIs and the latter manual described CCE's proprietary APIs. | + | | | + | | - Updated parameter description in 6.2.1-Creating a Container Cluster, 6.2.7-Creating a Node, and 6.2.13-Obtaining the Progress of a Specified Job. | + | | | + | | - Advised users to perform storage operations by using the PersistentVolumeClaim API instead of the APIs described in 7.7-PersistentVolumeClaim and 7.8-PersistentVolume. | + | | | + | | For details on how to use the PersistentVolumeClaim, see User Guide > Storage Management > Using Storage Volumes of EVS Disks > Creating an EVS Disk Using kubectl. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 2018-04-28 | This issue is the first official release. | + +-----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/index.rst b/api-ref/source/index.rst index 2d47d78..3488132 100644 --- a/api-ref/source/index.rst +++ b/api-ref/source/index.rst @@ -2,3 +2,12 @@ Cloud Container Service - API Reference ======================================= +.. toctree:: + :maxdepth: 1 + + api_usage_guidelines + apis/index + kubernetes_apis/index + permissions_policies_and_supported_actions + appendix/index + change_history diff --git a/api-ref/source/kubernetes_apis/index.rst b/api-ref/source/kubernetes_apis/index.rst new file mode 100644 index 0000000..776f933 --- /dev/null +++ b/api-ref/source/kubernetes_apis/index.rst @@ -0,0 +1,14 @@ +:original_name: cce_02_0340.html + +.. _cce_02_0340: + +Kubernetes APIs +=============== + +- :ref:`Overview ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + overview diff --git a/api-ref/source/kubernetes_apis/overview.rst b/api-ref/source/kubernetes_apis/overview.rst new file mode 100644 index 0000000..5cb43c8 --- /dev/null +++ b/api-ref/source/kubernetes_apis/overview.rst @@ -0,0 +1,67 @@ +:original_name: kubernetesapi.html + +.. _kubernetesapi: + +Overview +======== + +Description +----------- + +You can use Kubernetes native APIs to manage your Kubernetes clusters. For details, see `Kubernetes API Concepts `__. + +To find detailed API definitions for different Kubernetes versions, visit the following links: + +- 1.19: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/ +- 1.21: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/ +- 1.23: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/ + +Based on the open source Kubernetes APIs, CCE enhances and adapts following functions. + +- Ingress: For details, see `Using kubectl to Create an ELB Ingress `__. +- PV and PVC: For details, see `PV `__ and `PVC `__. + + - EVS: For details, see `Creating a Pod Mounted with an EVS Volume `__. + - SFS Turbo: For details, see `Creating a Deployment Mounted with an SFS Turbo Volume `__ and `Creating a StatefulSet Mounted with an SFS Turbo Volume `__. + - OBS: For details, see `Creating a Deployment Mounted with an OBS Volume `__ and `Creating a StatefulSet Mounted with an OBS Volume `__. + - SFS: For details, see `Creating a Deployment Mounted with an SFS Volume `__ and `Creating a StatefulSet Mounted with an SFS Volume `__. + +- Network Policies: For details, see `Network Policies `__. + +Calling Kubernetes APIs Through API Gateway +------------------------------------------- + +You can call Kubernetes native APIs through API Gateway using the URL in the format of **https://{clusterid}.Endpoint/uri**. In the URL, *{clusterid}* indicates the cluster ID, and *uri* indicates the resource path, that is, the path for API access. + +.. table:: **Table 1** URL parameters + + +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Description | + +=============+====================================================================================================================================================+ + | {clusterid} | Cluster ID. After a cluster is created, call the :ref:`API for obtaining a cluster in a specified project ` to obtain the cluster ID. | + +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | Endpoint | Web service entry URL. It can be obtained from `Regions and Endpoints `__. | + +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + | uri | Path in which the resource requested by the API is located. You can obtain the path from the URI of the API. | + +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ + +Calling Kubernetes APIs Through the API Server +---------------------------------------------- + +You can use the API server of a Kubernetes cluster to call Kubernetes native APIs. + +#. Call the :ref:`API for obtaining the cluster certificate ` to obtain the cluster certificates. + + There are three certificates: + + - ca.crt + - client.crt + - client.key + +#. Go to the cluster details page and obtain the API server address (private or public network address). + + With the certificates and API server address, you can call Kubernetes native APIs. + + For example, if you run the **curl** command to call the API to view the pod information, you only need to carry the certificate in the command as follows: + + **curl --cert ./client.crt --key ./client.key https://192.168.0.198:5443/api/v1/namespaces/default/pods/** diff --git a/api-ref/source/permissions_policies_and_supported_actions.rst b/api-ref/source/permissions_policies_and_supported_actions.rst new file mode 100644 index 0000000..f6a6cfd --- /dev/null +++ b/api-ref/source/permissions_policies_and_supported_actions.rst @@ -0,0 +1,125 @@ +:original_name: cce_02_0327.html + +.. _cce_02_0327: + +Permissions Policies and Supported Actions +========================================== + +This chapter describes fine-grained permissions management for your CCE. If your cloud account does not need individual IAM users, then you may skip over this chapter. + +A policy is a set of permissions defined in JSON format. By default, new IAM users do not have any permissions assigned. You need to add a user to one or more groups, and assign permissions policies to these groups. The user then inherits permissions from the groups it is a member of. This process is called authorization. After authorization, the user can perform specified operations on specified cloud services based on the permissions. + +There are fine-grained policies and role-based access control (RBAC) policies. An RBAC policy consists of permissions for an entire service. Users in a group with such a policy assigned are granted all of the permissions required for that service. A fine-grained policy consists of API-based permissions for operations on specific resource types. Fine-grained policies, as the name suggests, allow for more fine-grained control than RBAC policies. + +.. note:: + + - Fine-grained policies are currently available for open beta testing. You can apply to the fine-grained access control function free of charge. + - If you want to allow or deny the access to an API, fine-grained authorization is a good choice. + +An account has all of the permissions required to call all APIs, but IAM users must have the required permissions specifically assigned. The permissions required for calling an API are determined by the actions supported by the API. Only users who have been granted permissions can call the API successfully. For example, if an IAM user queries CCE clusters using an API, the user must have been granted permissions that allow the **cce:cluster:list** action. + +Supported Actions +----------------- + +Operations supported by a fine-grained policy are specific to APIs. The following describes the headers of the action tables provided in this chapter: + +- Permissions: Defined by actions in a custom policy. +- Actions: Added to a custom policy to control permissions for specific operations. +- Authorization Scope: A custom policy can be applied to IAM projects or enterprise projects or both. Policies that contain actions supporting both IAM and enterprise projects can be assigned to user groups and take effect in both IAM and Enterprise Management. Policies that only contain actions supporting IAM projects can be assigned to user groups and only take effect for IAM. Such policies will not take effect if they are assigned to user groups in Enterprise Management. +- APIs: REST APIs that can be called in a custom policy. + +.. table:: **Table 1** CCE actions + + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Permissions | Actions | Authorization Scope | APIs | + +=================================================+====================+========================+============================================================================+ + | Listing clusters in a specified project | cce:cluster:list | Supported: | GET /api/v3/projects/{project_id}/clusters | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Obtaining information about a specified cluster | cce:cluster:get | Supported: | GET /api/v3/projects/{project_id}/clusters/{cluster_id} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Creating a cluster | cce:cluster:create | Supported: | POST /api/v3/projects/{project_id}/clusters | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Updating information about a specified cluster | cce:cluster:update | Supported: | PUT /api/v3/projects/{project_id}/clusters/{cluster_id} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Deleting a cluster | cce:cluster:delete | Supported: | DELETE /api/v3/projects/{project_id}/clusters/{cluster_id} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Obtaining a cluster certificate | cce:cluster:get | Supported: | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Listing all nodes in a cluster | cce:node:list | Supported: | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Obtaining information about a specified node | cce:node:get | Supported: | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Creating a node | cce:node:create | Supported: | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Updating information about a specified node | cce:node:update | Supported: | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Deleting a node | cce:node:delete | Supported: | DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Obtaining job progress | cce:job:get | Supported: | GET /api/v3/projects/{project_id}/jobs/{job_id} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Listing all node pools in a specified cluster | cce:nodepool:list | Supported: | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Creating a PersistentVolumeClaim | cce:storage:create | Supported: | POST /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Deleting a PersistentVolumeClaim | cce:storage:delete | Supported: | DELETE /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims/{name} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Creating a PersistentVolume | cce:storage:create | Supported: | POST /api/v1/cloudpersistentvolumes | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Deleting a PersistentVolume | cce:storage:delete | Supported: | DELETE /api/v1/cloudpersistentvolumes/{name} | + | | | | | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+ + | Operating on Kubernetes resources | cce:kubernetes:\* | Supported: | - /api/\* | + | | | | - /apis/\* | + | | | - IAM projects | | + | | | - Enterprise projects | | + +-------------------------------------------------+--------------------+------------------------+----------------------------------------------------------------------------+